是否可以将 FileLogger 与 FormatLogger 结合使用,以可自定义的格式将日志写入文件?

问题描述 投票:0回答:1

我想向现有的 Julia 应用程序添加日志记录。

看起来 Julia 通过

Logging.jl
和其他相关包支持广泛的日志记录功能。更多信息可以在这里找到:

我猜想可以将其中一些组件组合在一起。据我从每个组件的有限文档来看,有两个组件似乎相关。

  • FileLogger
    来自
    LoggingExtras.jl
  • FormatLogger
    来自
    LoggingExtras.jl

是否可以将这两个概念结合起来生成一个记录器对象,该对象既写入文件又允许用户自定义日志消息规范?

我尝试阅读文档,并尝试在代码中将这两个项目组合在一起,但是我没有取得太大进展。

我认为这是因为文档非常有限。它稍微介绍了每个组件的作用,但它没有提供太多(如果有的话)有关如何将它们组合在一起的信息。

例如,我能够创建一个

FileLogger
实例,并向其写入日志消息。

using Logging, LoggingExtras

logger = FileLogger("example.log")

with_logger(logger) do
    @info "example log message"
end

但是我不知道如何将

FormatLogger
集成到其中,或者即使这是可能的?

logging julia
1个回答
0
投票

部分答案

如何“生成一个既可以写入文件又允许用户自定义日志消息规范的记录器对象”:

using Logging: with_logger
using LoggingExtras: FormatLogger

logger = FormatLogger() do io, args
    println(io, args._module, " | ", "[", args.level, "] ", args.message)
end

logger = FormatLogger("out.log"; append=true) do io, args
    println(io, args._module, " | ", "[", args.level, "] ", args.message)
end

with_logger(logger) do
   @info "This is an informational message."
   @warn "This is a warning, should take a look."
end

这附加到

out.log

Main | [Info] This is an informational message.
Main | [Warn] This is a warning, should take a look.

可发现性

上面的示例来自 README.md https://github.com/JuliaLogging/LoggingExtras.jl?tab=readme-ov-file#formatlogger-sink

目前在 REPL 中,

?FormatLogger
显示了两个方法签名,但没有带有
path
的第二个签名的示例。

FormatLogger(f::Function, path::AbstractString; append=false, always_flush=true)

第二个签名缺失,位于 https://julialogging.github.io/reference/loggingextras/#LoggingExtras.FormatLogger

组合记录器行为:接收器与过滤器

此答案没有提供一种将 Sink

FormatLogger
的行为与请求的另一个 Sink 相结合的方法,例如与
FileLogger
DatetimeRotatingFileLogger
相结合。 (也许文件名函数或格式化函数等功能可以成为具有简单默认值的选项,可以通过 Filter 记录器进行修改,而不是直接在 Sink 记录器中实现。)

© www.soinside.com 2019 - 2024. All rights reserved.