1

我刚开始使用 log4j2。我将它用于使用 RMI 的多个 JVM。我有两个问题。

  1. 我使用与应用程序相同的 CLASSPATH 启动 rmiregistry,因为它是自己的可执行文件。它启动时没有任何错误,但是一旦 RMI 客户端与其对话,rmiregistry 就会输出此错误:ERROR StatusLogger Log4j2 could not find a logging implementation。请将 log4j-core 添加到类路径中...但是 log4j-core jar 文件已经在 CLASSPATH 中,如果有问题,那么为什么应用程序也不输出此错误?

  2. 我正在使用带有 OnStartupTriggeringPolicy 和 SizeBasedTriggeringPolicy 的 RollingFile 附加程序。理论上在启动时我应该得到如下日志:

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
4

0 回答 0