log 包

介绍

Log 包提供日志管理和打印功能。

依赖 io 包中的 OutputStream 作为输出流。

主要接口

interface Logger

public interface Logger {
    mut prop level: LogLevel
    func setOutput(output: OutputStream): Unit
    func trace(msg: String): Unit
    func debug(msg: String): Unit
    func info(msg: String): Unit
    func warn(msg: String): Unit
    func error(msg: String): Unit
    func log(level: LogLevel, msg: String): Unit
}

此接口用于管理和打印日志。

prop level

mut prop level: LogLevel

功能:获取和修改日志打印级别,只有级别小于等于该值的日志会被打印。

func setOutput

func setOutput(output: OutputStream): Unit

功能:设置日志输出流,日志将被打印到该输出流。

参数:

  • output:输出流

func trace

func trace(msg: String): Unit

功能:打印 TRACE 级别的日志的便捷函数。如果设置的打印级别小于 TRACE,将忽略这条日志信息,否则打印到输出流。以下日志打印函数均使用该规则。

参数:

  • msg:日志内容

func debug

func debug(msg: String): Unit

功能:打印 DEBUG 级别的日志的便捷函数。

参数:

  • msg:日志内容

func info

func info(msg: String): Unit

功能:打印 INFO 级别的日志的便捷函数。

参数:

  • msg:日志内容

func warn

func warn(msg: String): Unit

功能:打印 WARN 级别的日志的便捷函数。

参数:

  • msg:日志内容

func error

func error(msg: String): Unit

功能:打印 ERROR 级别的日志的便捷函数。

参数:

  • msg:日志内容

func log

func log(level: LogLevel, msg: String): Unit

功能:打印日志的通用函数,需指定日志级别。

参数:

  • level:日志级别
  • msg:日志内容

class SimpleLogger

public class SimpleLogger <: Logger {
    public init()
    public init(name: String, level: LogLevel, output: OutputStream)
}

此类实现了 Logger 接口,提供基础的日志打印和管理功能,包括自定义日志名称,控制日志打印级别,自定义输出流,默认情况下,日志名称为 “Logger”,打印级别为 INFO,输出流为 stdOut

init

public init()

功能:创建一个默认的 SimpleLogger 实例。

init

public init(name: String, level: LogLevel, output: OutputStream)

功能:创建一个 SimpleLogger 实例,指定日志名称,日志打印级别和输出流。

参数:

  • name:日志名称
  • level:日志级别
  • output:输出流

func flush

public func flush(): Unit

功能:刷新输出流。

prop level

public mut prop level: LogLevel

功能:获取和修改日志打印级别。

func setOutput

public func setOutput(output: OutputStream): Unit

功能:设置输出流,日志信息将打印到该输出流中。

参数:

  • output:输出流

func trace

public func trace(msg: String): Unit

功能:打印 TRACE 级别的日志的便捷函数。

参数:

  • msg:日志内容

func debug

public func debug(msg: String): Unit

功能:打印 DEBUG 级别的日志的便捷函数。

参数:

  • msg:日志内容

func info

public func info(msg: String): Unit

功能:打印 INFO 级别的日志的便捷函数。

参数:

  • msg:日志内容

func warn

public func warn(msg: String): Unit

功能:打印 WARN 级别的日志的便捷函数。

参数:

  • msg:日志内容

func error

public func error(msg: String): Unit

功能:打印 ERROR 级别的日志的便捷函数。

参数:

  • msg:日志内容

func log

public func log(level: LogLevel, msg: String): Unit

功能:打印日志的通用函数,需指定日志级别。

参数:

  • level:日志级别
  • msg:日志内容

enum LogLevel

public enum LogLevel <: ToString {
    | OFF
    | ERROR
    | WARN
    | INFO
    | DEBUG
    | TRACE
    | ALL
}

该枚举类用于表示打印级别,定义了日志打印的七个级别,级别从低到高分别为 OFFERRORWARNINFODEBUGTRACEALL

SimpleLogger 类的实现中,指定了日志打印级别,以及每一条日志的级别,只有级别小于等于指定打印级别的日志条目会被打印到输出流中。

OFF

OFF

功能:构造一个日志打印级别的枚举实例,等级为禁用。

ERROR

ERROR

功能:构造一个日志打印级别的枚举实例,等级为错误。

WARN

WARN

功能:构造一个日志打印级别的枚举实例,等级为警告。

INFO

INFO

功能:构造一个日志打印级别的枚举实例,等级为通知。

DEBUG

DEBUG

功能:构造一个日志打印级别的枚举实例,等级为调试。

TRACE

TRACE

功能:构造一个日志打印级别的枚举实例,等级为跟踪。

ALL

ALL

功能:构造一个日志打印级别的枚举实例,等级为所有。

func level

public func level(): Int64

功能:获取日志级别对应的数字,OFF 为 1,ERROR 为 2,此后依次加一。

返回值:当前的日志级别对应的数字

func toString

public func toString(): String

功能:获取日志级别对应的名称。

返回值:当前的日志级别的名称

operator func >=

public operator func >=(target: LogLevel): Bool

功能:比较日志级别高低。

参数:

  • target:将当前日志级别和 target 进行比较

返回值:如果当前日志级别大于等于 target,返回 true,否则返回 false

示例

ALL 级别日志打印

下面是 ALL 级别日志打印示例。

代码如下:

from std import log.*
main(): Int64 {
    let logger: SimpleLogger = SimpleLogger()
    logger.level = LogLevel.ALL
    logger.log(LogLevel.ALL, "============== 日志级别为 ALL================")
    logger.log(LogLevel.TRACE,
    "=============="+logger.level.toString()+"================")
    logger.log(LogLevel.OFF, "OFF 打印出来!")
    logger.log(LogLevel.ERROR, "error 打印出来!")
    logger.log(LogLevel.WARN, "warn 打印出来!")
    logger.log(LogLevel.INFO, "INFO 打印出来!")
    logger.log(LogLevel.DEBUG, "DEBUG 打印出来!")
    logger.log(LogLevel.TRACE, "trace 打印出来!")
    logger.log(LogLevel.ALL, "ALL 打印出来!")
    logger.flush()
    0
}

运行结果如下:

2021/08/05 08:20:42.692770 ALL Logger ============== 日志级别为 ALL================
2021/08/05 08:20:42.696645 TRACE Logger ==============ALL================
2021/08/05 08:20:42.700188 ERROR Logger error 打印出来!
2021/08/05 08:20:42.703576 WARN Logger warn 打印出来!
2021/08/05 08:20:42.706920 INFO Logger INFO 打印出来!
2021/08/05 08:20:42.710268 DEBUG Logger DEBUG 打印出来!
2021/08/05 08:20:42.713602 TRACE Logger trace 打印出来!
2021/08/05 08:20:42.716940 ALL Logger ALL 打印出来!

ERROR 和 WARN 级别日志打印

下面是 ERROR 和 WARN 级别日志打印示例。

代码如下:

from std import fs.*
from std import log.*
main(): Int64 {
    let logger: SimpleLogger = SimpleLogger()
    logger.level = LogLevel.ERROR

    var s = File("./stdout1.log", OpenOption.CreateOrTruncate(false))
    logger.setOutput(s)
    logger.log(LogLevel.ERROR, "============== 日志级别为 ERROR================")
    logger.log(LogLevel.ERROR,
    "=============="+logger.level.toString()+"================")
    logger.log(LogLevel.OFF, "OFF 打印出来!")
    logger.log(LogLevel.ERROR, "error 打印出来!")
    logger.log(LogLevel.WARN, "warn 打印出来!")
    logger.log(LogLevel.INFO, "INFO 打印出来!")
    logger.log(LogLevel.DEBUG, "DEBUG 打印出来!")
    logger.log(LogLevel.TRACE, "trace 打印出来!")
    logger.log(LogLevel.ALL, "ALL 打印出来!")
    logger.flush()
    logger.level = LogLevel.WARN
    s.close()

    s = File("./stdout2.log", OpenOption.CreateOrTruncate(false))
    logger.setOutput(s)
    logger.log(LogLevel.WARN, "============== 日志级别为 WARN================")
    logger.log(LogLevel.WARN,
    "=============="+logger.level.toString()+"================")
    logger.log(LogLevel.OFF, "OFF 打印出来!")
    logger.log(LogLevel.ERROR, "error 打印出来!")
    logger.log(LogLevel.WARN, "warn 打印出来!")
    logger.log(LogLevel.INFO, "INFO 打印出来!")
    logger.log(LogLevel.DEBUG, "DEBUG 打印出来!")
    logger.log(LogLevel.TRACE, "trace 打印出来!")
    logger.log(LogLevel.ALL, "ALL 打印出来!")
    logger.flush()
    s.close()
    0
}

运行结果如下:

$ cat stdout1.log
2021/08/05 08:28:29.667441 ERROR Logger ============== 日志级别为 ERROR================
2021/08/05 08:28:29.671402 ERROR Logger ==============ERROR================
2021/08/05 08:28:29.674891 ERROR Logger error 打印出来!
$ cat stdout2.log
2021/08/05 08:28:29.678978 WARN Logger ============== 日志级别为 WARN================
2021/08/05 08:28:29.682635 WARN Logger ==============WARN================
2021/08/05 08:28:29.686126 ERROR Logger error 打印出来!
2021/08/05 08:28:29.689561 WARN Logger warn 打印出来!