MST
星途 面试题库

面试题:Java异常日志记录:自定义日志格式与性能优化

假设你在一个高并发的Java应用中使用`log4j`进行异常日志记录,为了提高性能并自定义日志格式(例如包含时间、线程名、日志级别、异常信息),你会如何配置`log4j`以及在代码中进行相关设置?
18.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 配置log4j.properties文件

  1. 定义日志输出目的地及格式
    log4j.rootLogger=error,stdout
    # 定义输出到控制台的Appender
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    # 自定义日志格式,包含时间、线程名、日志级别、异常信息
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c{1} - %m%n
    
  2. 对于文件输出的配置(如果需要)
    # 定义输出到文件的Appender
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=logs/error.log
    log4j.appender.file.MaxFileSize=10MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c{1} - %m%n
    

2. 在Java代码中进行异常日志记录

  1. 获取Logger实例
    import org.apache.log4j.Logger;
    
    public class YourClass {
        private static final Logger logger = Logger.getLogger(YourClass.class);
    
        public void someMethod() {
            try {
                // 可能抛出异常的代码
                int result = 10 / 0;
            } catch (Exception e) {
                // 记录异常日志
                logger.error("发生异常", e);
            }
        }
    }
    

在高并发场景下,log4jPatternLayout已经经过优化,并且通过异步日志(如AsyncAppender)可以进一步提升性能。例如:

  1. 配置异步Appender
    log4j.rootLogger=error,async
    log4j.appender.async=org.apache.log4j.AsyncAppender
    log4j.appender.async.additivity=false
    log4j.appender.async.appender=stdout
    

这样,日志记录操作将在后台线程中执行,减少对高并发业务线程的影响。