在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来检查现有的追加程序,在Windows env中,我可以找到新配置的追加程序,对于Linux,我只能看到默认的启动程序。
我已经检查了文件路径权限。
这是默认的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>
答案 0 :(得分:0)
问题是Ubuntu中tomcat服务的沙箱文件系统。 看看https://www.freedesktop.org/software/systemd/man/systemd.exec.html
我不得不明确设置此配置:
ReadWritePaths=/var/mypath
在 /lib/systemd/system/tomcat.service 文件中