我有一个带有jee6和log4j 2的网络应用程序。我想为我的批处理过程设置一个自定义日志,我设置了一个自定义级别来填充批处理日志。
但我无法记录任何内容,在服务器启动时我可以创建日志文件server.log但是为空,而error_batch.log包含所有日志:.info和我的自定义级别,我没有服务器中的错误,我案例的正确配置是什么?
private static final Logger logger = LogManager.getLogger(test.class);
-
logger.info("Starting on the Server");
logger.log(Level.forName("ERROR_BATCH", 450), "Example Error in Batch");
-
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<CustomLevels>
<CustomLevel name="ERROR_BATCH" intLevel="450" />
</CustomLevels>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<RollingFile name="logBatch" fileName="C:\\Workarea\\Error\\error_batch.log"
filePattern="C:\\Workarea\\Error\\error_batch-%d{dd-MM-yyyy}-%i.log"
append="true">
<PatternLayout>
<Pattern>%d %p %c [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingFile>
<RollingFile name="logServer" fileName="C:\\Workarea\\Error\\server.log"
filePattern="C:\\Workarea\\Error\\server-%d{dd-MM-yyyy}-%i.log"
append="true">
<PatternLayout>
<Pattern>%d %p %c [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console" />
<AppenderRef ref="logServer" />
</Root>
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="logServer" />
</Root>
<Root level="debug">
<AppenderRef ref="Console" />
<AppenderRef ref="logServer" />
</Root>
<Root level="trace">
<AppenderRef ref="logBatch" level="ERROR_BATCH" />
</Root>
</Loggers>
</Configuration>
答案 0 :(得分:1)
这看起来是How to log in different file? log4j2的副本,而后者又与先前提出的问题重复。
您的基本问题是您只能配置一次根记录器,而不能像您一样配置4次。我正在猜测一个等级=&#34;错误&#34;是&#34;赢了&#34;,但我不太确定。
至于如何将事件发送到特定日志文件,请参阅您之前提出的问题中给出的答案。
答案 1 :(得分:0)
logger.log(Level.forName("ERROR_BATCH", 450), "Example Error in Batch");
和
<CustomLevels>
<CustomLevel name="ERROR_BATCH" intLevel="450" />
</CustomLevels>
是重复的。您定义自定义级别两次,第二次(在代码中)必须覆盖第一个(在配置文件中)。
删除代码中的那个。它应该工作。