【问题标题】:Socket Appender in Log4j2 giving errorLog4j2 中的 Socket Appender 给出错误
【发布时间】:2014-10-14 13:42:33
【问题描述】:

我正在尝试在使用 log4j2 进行日志记录的项目中使用 SocketAppender。当我为 Socket 添加配置并部署应用程序时,它会引发解析错误。 以下是详细信息。

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" strict="true" packages="">
<Appenders>
 <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />

 </Console>
 <Socket name="Socket1" host="localhost" port="4712"  reconnectionDelay="5000">
        <SerializedLayout/>
</Socket>
</Appenders>

<Loggers>
    <Logger name="com.example.web" level="INFO">
        <AppenderRef ref="Socket1"/>
    </Logger>
    <Root level="DEBUG">
        <AppenderRef ref="Console" level="DEBUG" />
    </Root>

</Loggers>
</Configuration>

POM.XML:

<!-- Logging with SLF4J & LogBack -->
<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-api</artifactId>
 <version>1.7.6</version>
</dependency>
<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-slf4j-impl</artifactId>
 <version>2.0-rc1</version>
</dependency>

在 Tomcat 中部署项目的异常:

log4j:WARN Fatal parsing error 31 and column 6
log4j:WARN Premature end of file.
log4j:ERROR Could not parse url   [file:/apps/work/Catalina/example/loader/log4j.xml].
org.xml.sax.SAXParseException: Premature end of file.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse  (DocumentBuilderImpl.java:284)
    at org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:767)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:866)
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

如果我从 log4j2.xml 中删除与 Socket 相关的更改,它会起作用。 任何人都可以指导添加 Socket Appender 的正确方法吗? 或者查找上述配置中的任何问题。

【问题讨论】:

    标签: java xml sockets log4j log4j2


    【解决方案1】:

    看来您的问题与 Log4j2 配置文件无关,而与 Spring 似乎使用的 Log4j (v1) 配置文件 (/apps/work/Catalina/example/loader/log4j.xml) 相关。我们可以在堆栈跟踪中看到org.apache.log4j,这显然是Log4j v1(Log4j v2 更像org.apache.logging.log4j)。

    您可能希望在此处发布您的 Log4j v1 文件 (/apps/work/Catalina/example/loader/log4j.xml),以便如果您无法修复此配置文件中的错误语法,我们可以为您提供帮助。

    PS:我试过你的log4j2.xml 文件,效果很好。您可能希望在 Log4j2 配置文件中将 status="INFO" 替换为 status="trace" 以在控制台中获取更多调试信息(例如套接字错误、错误的 log4j2 配置......)

    【讨论】:

    • 您好,感谢您注意到这一点!您认为我们需要将任何与 log4j2 相关的 jar 添加到 tomcat 的 /lib 文件夹吗?
    • 好吧,我不知道 log4j2 JAR 是否丢失(你不会冒险尝试添加这些 JAR),我只是说在你的情况下,Spring 没有设法记录由于错误的 Log4j (v1) 配置文件而导致的任何事情。从我所见,Log4j2 根本没有抱怨。也许 Log4j2 可以工作,但您认为这不是由于 Log4j v1 错误... .另外,请在应用启动前检查是否有人在监听 4712 端口,否则将无法正常工作
    • 这个答案刚刚被否决,我们能知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多