gpt4 book ai didi

java - Log4j2:动态创建多个日志的日志文件

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:42 28 4
gpt4 key购买 nike

我目前正在创建一个可以包含模块(将它们视为插件)的系统,其中每个模块都可以拥有自己的专用日志。

我想使用 log4j2 项目进行日志记录,但文件附加程序似乎有些问题。

主项目(模块加载器和整个项目的“核心”)应该有自己的日志文件,而模块应该有自己的(比如 mod_XXXXXXXX.log)。

通过阅读有关 appender 的文档,我发现了 FileAppender 类,并且我打算使用它。直到我发现我不能简单地将 appender 添加到由 LogManager.getLog() 创建的默认记录器。

LogManager 返回的记录器与 Logger 接口(interface)不同。

即使搜索也没有给我任何接近的解决方案,我发现的只是 xml 配置中的预定义文件日志 - 这不是我想要的。

感谢您的阅读;欢迎提供最细微的线索:)

最佳答案

如果您真的需要动态确定日志文件,请查看 Log4J2 RoutingAppender .更长的示例在 FAQ 中这些 stackoverflow 问题可能很有趣: Wildcard pattern for RoutingAppender of Log4j2How to write different logs in different files with log4j2 (MDC in xml)?

请注意,您需要在 RoutingAppender 用来决定将日志事件路由到哪个附加程序的 ThreadContext 映射中设置值。这意味着每次您的代码进入不同的插件时,您都需要在 ThreadContext 映射中放置一些值。

但是,您真的需要它如此动态吗?如果你事先知道你有什么插件,你可以为每个插件声明一个记录器(使用插件的包名称是一种常见的方法),并将每个这样的记录器映射到一个单独的附加程序。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
<File name="plugin1" fileName="logs/plugin1.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
<File name="plugin2" fileName="logs/plugin2.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="com.mycomp.project.plugin1" level="debug">
<AppenderRef ref="plugin1" level="debug" />
</Logger>
<Logger name="com.mycomp.project.plugin2" level="debug">
<AppenderRef ref="plugin2" level="debug" />
</Logger>
<Root level="trace">
<AppenderRef ref="MyFile" level="trace" />
</Root>
</Loggers>
</Configuration>

关于java - Log4j2:动态创建多个日志的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19052070/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com