【问题标题】:log4j2 not logging to console, file or sysloglog4j2 没有记录到控制台、文件或系统日志
【发布时间】:2015-01-30 22:02:13
【问题描述】:

我正在努力让 log4j2 进行任何类型的日志记录。即使我将 log4j 配置调到跟踪级别,我也没有任何跟踪可以调试。

这是使用(或者更确切地说是尝试使用)servlet 2.5 和 log4j 2.1

我有点不知所措,因为我已经按照我所知的所有文档进行了操作?

    package myPkg;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.web.WebLoggerContextUtils;

@Path("myresource")
public class MyResource {
    final Logger logger = LogManager.getLogger(MyResource.class);
    logger.debug("test");

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
   logger.debug("test");
        logger.info("INFO");
        logger.warn("WARN");
        return "Got it!";
    }
}

我已经根据文档在 web.xml 中实现了更改,相关摘录如下:

   <!-- log4j-->
    <listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>

    <filter>
        <filter-name>log4jServletFilter</filter-name>
        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>log4jServletFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
<context-param>
    <description>log4j Context Name</description>
    <param-name>log4jContextName</param-name>
    <param-value>myWeb</param-value>
</context-param>
<context-param>
    <description>log4j Configuration File Location</description>
    <param-name>log4jConfiguration</param-name>
    <param-value>file:///home/ME/testConfig/log4j.xml</param-value>
</context-param>
    <!-- end log4j-->

我的 log4j 的 pom.xml 看起来像

 <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>${log4j.version}</version>
        </dependency>

我的 log4j.xml 看起来像

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<!-- STDOUT -->
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
<!-- DEBUG FILE -->
<File name="debugFile" fileName="/home/ME/testConfig/debug.log">
<ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
<!-- SYSLOG -->
<Syslog name="RFC5424" format="RFC5424" host="localhost" port="514"
protocol="TCP" appName="VoIP" includeMDC="true"
facility="LOCAL0" enterpriseNumber="43053" newLine="true"
messageId="Audit" id="App"/>
<!-- DO LOGGING -->
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="debugFile" level="TRACE"/>
<AppenderRef ref="STDOUT" level="WARN"/>
<AppenderRef ref="RFC5424" level="INFO"/>
</Root>
</Loggers>
</Configuration>

【问题讨论】:

    标签: java servlets logging log4j2


    【解决方案1】:

    仅供参考,log4j2.1 中似乎存在一个错误,如果您在 XML 标头 (&lt;?xml version="1.0" encoding="UTF-8"?&gt;) 前面有空格,它将默默地死掉!

    【讨论】:

    • 我在 2.5 和 2.2 上遇到了同样的问题,事实证明,在 2.2 中 log4j.properties 有效,而在 2.5 中它必须是 log4j.xml。当它失败时,它默默地失败了。我相信这是一个错误。
    猜你喜欢
    • 2016-07-12
    • 2021-10-07
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多