我想向现有的 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
集成到其中,或者即使这是可能的?
如何“生成一个既可以写入文件又允许用户自定义日志消息规范的记录器对象”:
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 记录器中实现。)