当前位置: 首页 > 知识库问答 >
问题:

log4j2:为多个日志动态创建日志文件

卫阳炎
2023-03-14

我目前正在创建一个系统,可以有模块(把它们看作插件),其中每一个都可以有自己的日志,专用的。

我想使用log4j2项目进行日志记录,但我似乎在文件附加符方面遇到了一些麻烦。

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

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

感谢你的阅读;即使是最轻微的线索也是受欢迎的:)

共有1个答案

谷泽宇
2023-03-14

如果您真的需要动态确定日志文件,请查看Log4J2 RoutingAppender。FAQ中有一个更长的示例,这些stackoverflow问题可能会引起兴趣:Log4j2的RoutingAppender的通配符模式,以及如何使用Log4j2(xml中的MDC)在不同的文件中写入不同的日志?

注意,您需要在ThreadContext映射中设置值,RoutingAppender使用该映射来决定将日志事件路由到哪个appender。这意味着每次代码进入不同的插件时都需要在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>
 类似资料:
  • 问题内容: 我当前正在创建一个可以包含模块的系统(将它们视为插件),其中每个模块可以拥有自己的专用日志。 我想使用log4j2项目进行日志记录,但是文件附加器似乎有些麻烦。 主项目(整个模块的模块加载器和“核心”)应具有自己的日志文件,而模块应具有自己的日志文件(如)。 通过阅读有关追加程序的文档,我发现了该类,并且我将使用它。直到我发现不能简单地将追加器添加到由创建的默认记录器中。 LogMan

  • 我有将日志保存到文件配置,但日志会附加到现有内容。我想创建总是新的文件。我怎么能那样做? 我的log4j2.xml:

  • 我想在Log4j2中设置一个目录。xml动态。 Log4j2。xml 运行: 输出: 2017-03-15 18:20:27131主要错误 无法创建文件${sys:logDirectory}/app。记录java。伊奥。IOException: 文件名、目录名或驱动器名的语法错误 ---编辑:德语中的原始错误消息是:-- (Dateinamen,Verzeichnisnamen或Datenträg

  • 我正在使用带有log4j2的Spring Boot1.5.9,当我测试日志记录功能时,创建了日志文件,但没有将日志写入其中,而控制台日志记录程序运行良好。请在pom.xml&log4j2.properties配置下面找到。 log4j2.properties文件:

  • 我希望由log4j2创建的日志文件在其文件名中包含日期模式,包括当前活动文件。也就是说,如果今天的日期是2016-12-15,我希望当前日志文件是lager-2016-12-15.log。当日期改变时,我希望创建一个名为lager-2016-12-16.log的新文件。 使用,我无法使当前活动日志文件的文件名中具有日期模式。我的log4j2.xml: 使用此配置,翻转时的复制被搞乱了。从fileN

  • 我想设置日志级别、文件名和日志文件的文件路径。我找到了一种方法来实现这一点,除了log4j创建一个附加的日志文件外,其他方法都可以实现。我得到了下面的log4j2。xml: 在我的主函数中,我设置了${sys:logDir}和${sys:logFilename}: 它像我想要的那样工作,但是log4j在我的主项目路径中创建了一个名为“${sys:logDir}${sys:logFilename}”