log4j2无法在日志文件中写入异常跟踪

时间:2018-08-22 18:59:48

标签: java log4j2

我正在尝试在日志文件中打印异常的堆栈跟踪,但无济于事。配置文件是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{dd-MM-YYYY HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.zip">
            <PatternLayout>
                <alwaysWriteExceptions>false</alwaysWriteExceptions>
                <pattern>%d{dd-MM-YYYY HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg %n %ex</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="WARN">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile" />
        </Root>
    </Loggers>
</Configuration>

%ex被忽略

这是会产生错误的代码。

    public void getSingle(){
        try{
            //cut
        }catch (Exception e){
            //program enter in this exception
            e.printStackTrace();
            UtilsService.openAlertDialog(resources.getString("title.error"),null,UtilsService.getExceptionMessage(e),Alert.AlertType.ERROR);
            logger.error("Class exception: " + e);
        }
    }

1 个答案:

答案 0 :(得分:1)

logger.error("Class exception: " + e);

您仅构建一个要打印的字符串。 toString的Exception继承自Throwable,在其中打印Exception类的名称和消息。将其添加到字符串“ Class exception:”中以形成一个要打印的字符串。

您要将异常作为参数传递给logger.error

logger.error("Class exception: " + e, e);