【问题标题】:Log4J change configuration runtimeLog4J 更改配置运行时
【发布时间】:2020-10-12 09:55:43
【问题描述】:

tomcat webapp启动时必须在运行时切换Log4J配置,我试过这个解决方案:

LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
ctx.setConfigLocation(ResourceUtils.toURI(getClass().getResource("/mynewconfig.xml")));
ctx.start();
ctx.reconfigure();

它似乎可以在 Windows 环境中工作,但这不适用于 ubuntu/linux。 我在这段代码之后添加了一个 System.out 来检查现有的 appender,在 windows env 中我可以找到我新配置的 appender,对于 linux 我只能看到默认启动的 appender。

我已经检查了文件路径权限。

这是默认的 log4j.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
   <Appenders>
      <Console name="console-log" target="SYSTEM_OUT">
         <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
      </Console>
   </Appenders>
   <Loggers>
      <Root level="warn" additivity="false">
         <AppenderRef ref="console-log" />
      </Root>
   </Loggers>
</Configuration>

这是新的(mynewconfig.xml)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
   <Appenders>
      <Console name="console-log" target="SYSTEM_OUT" >
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
      </Console>
      <RollingFile name="file-log" fileName="${sys:home}/log/app.log" filePattern="${sys:home}/log/app.%i.log">
         <PatternLayout>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
         </PatternLayout>
         <Policies>
            <SizeBasedTriggeringPolicy size="10MB" />
         </Policies>
         <DefaultRolloverStrategy max="5"/>
      </RollingFile>
      <RollingFile name="file-critico-log" fileName="${sys:home}/log/critico.log" filePattern="${sys:home}/log/critico.%i.log">
         <PatternLayout>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
         </PatternLayout>
         <Policies>
            <SizeBasedTriggeringPolicy size="10MB" />
         </Policies>
         <DefaultRolloverStrategy max="5"/>
      </RollingFile>
   </Appenders>
   <Loggers>
      <Logger name="com.mypackage" level="info" additivity="false">
         <appender-ref ref="file-log" />
         <appender-ref ref="console-log" />
      </Logger>
      <Logger name="critico" level="info" additivity="false">
         <appender-ref ref="file-log" level="error" />
         <appender-ref ref="file-critico-log" level="error" />
          <!-- appender-ref ref="console-log" level="error" / -->
      </Logger>
      <!-- Logger name="org.springframework.jdbc.core.JdbcTemplate" level="debug">
         <appender-ref ref="console-log" />
      </Logger-->
      <Root level="warn" additivity="false">
         <AppenderRef ref="file-log" />
         <AppenderRef ref="console-log" />
      </Root>
   </Loggers>
</Configuration>

【问题讨论】:

    标签: log4j tomcat9


    【解决方案1】:

    问题是 Ubuntu 中 tomcat 服务的沙盒文件系统。 看看https://www.freedesktop.org/software/systemd/man/systemd.exec.html

    我必须明确设置此配置:

    ReadWritePaths=/var/mypath
    

    /lib/systemd/system/tomcat.service文件中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2011-07-16
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      相关资源
      最近更新 更多