将消息发送到多个位置

在本教程中,我们将了解如何将日志消息同时发送到多个位置。在使用日志记录器如何记录日志到文件中,我们看到了一些替代记录器(NullLoggerFileLogger, 等)以及如何使用它们。但是,在这些示例中,我们仅将消息发送到新记录器。LoggingExtras.jl 包为此目的实现了一个记录器TeeLogger。该名称的灵感来自 shell 工具 tee ,它将命令输出写入标准输出和文件。

一个非常常见的日志记录设置是将日志写入 stderr(如默认记录器所做的那样)一个文件。以下是我们如何使用 TeeLoggerFileLogger和 默认的 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,
    ),
)