账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    log4j2如何输出异常信息到日志文件中?
    53
    0

    问题描述

    原项目使用log4j管理日志,现在升级为log4j2后无法自动输出异常信息到日志文件内。

    问题出现的环境背景及自己尝试过哪些方法

    现在可以手动捕获异常然后通过logger.error("", e);打印异常信息到控制台和日志文件,但是项目太大全部修改花费时间太多了,想实现像log4j一样自动捕获后输出到日志文件内。

    相关代码

    log4j2配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- log4j2 配置文件 -->
    <!-- 日志级别 trace<debug<info<warn<error<fatal -->
    <configuration status="debug">
        <!-- 自定义属性 -->
        <Properties>
            <!-- 日志格式 -->
            <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} (%F:%L) %5p %m%n</Property>
            <!-- 日志文件路径 -->
            <Property name="filePath">D:/Tomcat 6.0/log4j/equipmentLease/</Property>
            <!-- debug级别日志文件名称 -->
            <Property name="debugFileName">${filePath}/debug.log</Property>
            <!-- info级别日志文件名称 -->
            <Property name="infoFileName">${filePath}/info.log</Property>
            <!-- error级别日志文件名称 -->
            <Property name="errorFileName">${filePath}/error.log</Property>
        </Properties>
        
        <!-- 定义输出器 -->
        <appenders>
            <!-- 控制台输出 -->
            <Console name="console" target="SYSTEM_OUT">
                <!-- 日志格式 -->
                <PatternLayout pattern="${pattern}"/>
            </Console>
            
            <!-- debug级别日志文件输出 -->
            <RollingFile name="debug_appender" fileName="${debugFileName}"
                    filePattern="${filePath}/%d{yyyy-MM-dd}/debug_%i.log">
                <!-- 过滤器 -->
                <Filters>
                    <!-- 限制日志级别在debug及以上在info以下 -->
                    <ThresholdFilter level="debug"/>
                    <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                </Filters>
                <!-- 日志格式 -->
                <PatternLayout pattern="${pattern}"/>
                <!-- 策略 -->
                <Policies>
                    <!-- 每隔一天转存 -->
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                    <!-- 文件大小 -->
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
            </RollingFile>
            
            <!-- info级别日志文件输出 -->
            <RollingFile name="info_appender" fileName="${infoFileName}"
                    filePattern="${filePath}/%d{yyyy-MM-dd}/info_%i.log">
                <!-- 过滤器 -->
                <Filters>
                    <!-- 限制日志级别在info及以上在error以下 -->
                    <ThresholdFilter level="info"/>
                    <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                </Filters>
                <!-- 日志格式 -->
                <PatternLayout pattern="${pattern}"/>
                <!-- 策略 -->
                <Policies>
                    <!-- 每隔一天转存 -->
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                    <!-- 文件大小 -->
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
            </RollingFile>
            
            <!-- error级别日志文件输出 -->
            <RollingFile name="error_appender" fileName="${errorFileName}"
                    filePattern="${filePath}/%d{yyyy-MM-dd}/error_%i.log">
                <!-- 过滤器 -->
                <Filters>
                    <!-- 限制日志级别在error及以上 -->
                    <ThresholdFilter level="error"/>
                </Filters>
                <!-- 日志格式 -->
                <PatternLayout pattern="${pattern}"/>
                <Policies>
                    <!-- 每隔一天转存 -->
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                    <!-- 文件大小 -->
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
            </RollingFile>
        </appenders>
        
        <!-- 定义logger -->
        <loggers>
            
            <!-- 定义根logger -->
            <!-- 日志级别设备为debug 具体日志级别由appender限制 -->
            <Root level="debug">
                <!-- 输出控制台 -->
                <AppenderRef ref="console"/>
                <!-- 输出debug级别日志文件 -->
                <AppenderRef ref="debug_appender"/>
                <!-- 输出info级别日志文件 -->
                <AppenderRef ref="info_appender"/>
                <!-- 输出error级别日志文件 -->
                <AppenderRef ref="error_appender"/>
            </Root>
        </loggers>
    </configuration>
    1
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 核桃奶 普通会员 1楼

      在Log4j2中,你可以使用"error"和"info"级别的日志来输出异常信息。以下是一个示例:

      ```java import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout;

      public class LoggerExample { private static final Logger logger = Logger.getLogger(LoggerExample.class);

      public static void main(String[] args) {
          try {
              logger.error("An error occurred", new Exception("This is an error message"));
      
              // 输出到控制台
              logger.info("This is an info message");
      
              // 输出到日志文件
              logger.error("An error occurred", new Exception("This is an error message"), PatternLayout.PARSING构造函数参数为"[{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}][{+}
      
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部