如何使 log4j syslog Appender 在一行中写入堆栈跟踪?

Jol*_*oly 10 java log4j syslog

我正在使用 log4j syslog 附加程序,并注意到当发生异常时,附加程序将堆栈跟踪中的每个条目写入新行。

有没有一种方法可以对其进行配置,以便整个堆栈跟踪将作为一行而不是多行?

jam*_*mes 10

我正在使用以下 log4j2 配置,该配置可以很好地发送到 syslog,并且不需要更改代码即可将所有这些异常转换为字符串。它只是用异常情况下的管道替换默认的linesep。

    <Syslog name="SYSLOG" host="127.0.0.1" port="515" protocol="TCP" charset="UTF-8"
            immediateFail="false" ignoreExceptions="true" reconnectionDelayMillis="250">
        <PatternLayout pattern="[%d] %-5p %m%n %throwable{separator(|)}"></PatternLayout>
    </Syslog>
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案。也许您应该考虑更换恰好为此设计的管道。 (2认同)

dav*_*xxx 0

您可以自定义堆栈跟踪的渲染器。ThrowableRendererLog4J 中有两种可用(org.apache.log4j.spi.ThrowableRenderer接口),其中一种是默认使用的。因此,使用所需的格式实现您自己的 ThrowableRenderer,然后在您的配置中进行设置。

在 Log4j 1 中,它可以工作。切勿在 Log42 中尝试。 https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html

ThrowableRenderer 您可以自定义 Throwable 实例在记录之前转换为字符串的方式。这是通过指定 ThrowableRenderer 来完成的。语法为: log4j.throwableRenderer=fully.qualified.name.of.rendering.class log4j.throwableRenderer.paramName=paramValue 如, log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer