Log4j2 and Flume on Jetty Server



我正在尝试使用Log4J2和Flume-ng对分布式系统进行集中式日志记录。系统中的一台服务器运行Jetty,我用它来为系统做Web服务(servlets)。当我在这个项目中包括 Log4J2 和 Flume-ng 的 Maven 依赖项时,它会破坏 Jetty,并且无法正确启动/绑定。如果我删除下面列表中的依赖项(log4j-flume-ng),那么 Jetty 将正常运行,给我以下输出:

2012-10-08 16:36:33.457::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2012-10-08 16:36:34.285 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=gs-adhoc1-test.jrs-software.co.uk/10.1.1.161:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2012-10-08 16:36:34.290 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@31ac05
2012-10-08 16:36:34.272::INFO:  jetty-7.0.0.pre5
2012-10-08 16:36:34.322::INFO:  Started SelectChannelConnector@0.0.0.0:5000

但是有了这种依赖关系,它就会出现(只是Memcached输出):

2012-10-08 16:36:34.285 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=gs-adhoc1-test.jrs-software.co.uk/10.1.1.161:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2012-10-08 16:36:34.290 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@31ac05

Maven POM 中的依赖关系如下:

<dependencies>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty</artifactId>
        <version>3.5.4.Final</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty</artifactId>
        <version>7.0.0.pre5</version>       
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>net.sf.json-lib</groupId>
        <artifactId>json-lib</artifactId>
        <version>2.3</version>
        <classifier>jdk15</classifier>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>net.sf.ezmorph</groupId>
        <artifactId>ezmorph</artifactId>
        <version>1.0.6</version>
    </dependency>  
    <dependency>
        <groupId>couchdb4j</groupId>
        <artifactId>couchdb4j</artifactId>
        <version>0.5.0-i386-1</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20090211</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.simple-spring-memcached</groupId>
        <artifactId>spymemcached</artifactId>
        <version>2.8.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0-beta1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-beta1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-flume-ng</artifactId>
        <version>2.0-alpha2</version>       
    </dependency>
</dependencies>

我不知道如何开始解决这个问题。我已经设法让Flume与我的其他服务器一起工作没有问题,但似乎Jetty将没有。有人可以提供任何建议来解决这个问题吗?

我最近在我的项目中将 jetty-6.1.26 与 log4j2 一起使用。似乎您错过了log4j2-jcl来桥接其他软件包的公共日志记录,而不是将其排除在外。没有它,我无法开始我的项目。您需要定义 commons-logging.properties 才能使用 Log4j2 实现,并确保它首先出现在类路径中。

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

log4j2 仍然是 beta2 并且有一个已知的 commons-logging 错误,我发现它在 beta3 中得到了修复,但不确定它何时发布。

最新更新