我刚开始使用log4j2。我将它用于使用RMI的多个JVM。我有两个问题。
我使用与应用程序相同的CLASSPATH启动rmiregistry,因为它是自己的可执行文件。它启动时没有任何错误,但一旦RMI客户端与它通信,rmiregistry会输出此错误:ERROR StatusLogger Log4j2无法找到日志记录实现。请将log4j-core添加到类路径中...但是log4j-core jar文件已经在CLASSPATH中,如果出现问题,那么为什么应用程序也不输出此错误?
我正在使用带有OnStartupTriggeringPolicy和SizeBasedTriggeringPolicy的RollingFile appender。从理论上讲,我应该得到如下日志:
foo.log - 活动日志
foo.log.1 - 如果我在之前已经启动了旧日志 foo.log.2 - 如果我已多次启动它,则会滚动旧日志
但是当我第一次启动时,它会滚动很多次,即使尚未达到大小限制且活动日志应该已经滚动。换句话说,我明白了:
foo.log
foo.log.1
foo.log.2
foo.log.3 - 活动日志
foo.log.4
配置文件(log4j2.xml)内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<!-- ********** APPENDERS *********** -->
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d (%-4r) [%t] %-5p %c %x - %m%n"/>
</Console>
<RollingFile
name="FOO_OUT"
fileName="/foo/log/foo.log"
filePattern="/foo/log/foo.log.%i"
append="true">
<PatternLayout>
<Pattern>%d (%-4r) [%t] %-5p %c %x - %m%n</Pattern>
</PatternLayout>
<DefaultRolloverStrategy max="24" fileIndex="min"/>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<asyncLogger name="au.com" level="DEBUG">
<AppenderRef ref="FOO_OUT"/>
</asyncLogger>
<asyncRoot level="debug">
<AppenderRef ref="FOO_OUT"/>
</asyncRoot>
</Loggers>
</Configuration>
CLASSPATH包含很多jar,但与lo4j2相关的主要是:
/foo/lib/slf4j/slf4j-api-1.7.21.jar
/foo/lib/slf4j/jcl-over-slf4j-1.7.21.jar
/foo/lib/slf4j/log4j-slf4j-impl-2.5.jar
/foo/lib/log4j2/log4j-core-2.5.jar
/foo/lib/log4j2/log4j-api-2.5.jar
/foo/lib/log4j2/disruptor-3.3.4.jar