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
}
该枚举类用于表示打印级别,定义了日志打印的七个级别,级别从低到高分别为 OFF
、ERROR
、WARN
、INFO
、DEBUG
、TRACE
、ALL
。
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 打印出来!