将消息发送到多个位置
在本教程中,我们将了解如何将日志消息同时发送到多个位置。在使用日志记录器和如何记录日志到文件中,我们看到了一些替代记录器(NullLogger
,FileLogger
, 等)以及如何使用它们。但是,在这些示例中,我们仅将消息发送到新记录器。LoggingExtras.jl 包为此目的实现了一个记录器TeeLogger
。该名称的灵感来自 shell 工具 tee
,它将命令输出写入标准输出和文件。
一个非常常见的日志记录设置是将日志写入 stderr
(如默认记录器所做的那样)和一个文件。以下是我们如何使用 TeeLogger
、FileLogger
和 默认的 ConsoleLogger
来做到这点:
using Logging, LoggingExtras
logger = TeeLogger(
global_logger(), # Current global logger (stderr)
FileLogger("logfile.log") # FileLogger writing to logfile.log
)
使用此记录器时,每条消息都将同时路由到默认记录器和文件。与日志消息过滤一起,可以创建任意日志消息路由,因为所有记录器都很好地组合并且可以嵌套。这在如何过滤消息中有更多描述,但下面给出了一个简短的例子。
这是一个将消息写入下面三个记录器的记录器:
- 默认的全局记录器(stderr),
MinLevelLogger
接受级别 >=Info
的任何消息,并使用FileLogger
将它们写入文件"logfile.log"
,MinLevelLogger
接受级别 >=Debug
的任何消息,并使用FileLogger
将它们写入文件"debug.log"
。
using Logging, LoggingExtras
logger = TeeLogger(
# Current global logger (stderr)
global_logger(),
# Accept any messages with level >= Info
MinLevelLogger(
FileLogger("logfile.log"),
Logging.Info
),
# Accept any messages with level >= Debug
MinLevelLogger(
FileLogger("debug.log"),
Logging.Debug,
),
)