首页 > 解决方案 > 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);
        }
    }

标签: javalog4j2

解决方案


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

您正在构建一个被打印的字符串。toStringException 继承自它Throwable打印 Exception 类名称和消息的位置。这被添加到字符串“Class exception:”中以形成一个正在打印的字符串。

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

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

推荐阅读