zhallalxj
2017-07-21 03:23
采纳率: 42.9%
浏览 4.1k
已采纳

java中使用log4j输出错误日志的问题

在java中使用log4j输出日志,正常日志都可以输出到日志文件中,但是像一些没有被捕获的异常信息就没有到日志文件中,而是输出到了tomcat的catalina.out这个文件中,有没有什么办法让异常信息也输出到日志文件中,以下是我的log4j配置:

 log4j.rootLogger=info, stdout,ROLLING_FILE,DEBUG,warn


log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.File=${catalina.home}/logs/niuwan.log
log4j.appender.stdout.DatePattern=yyyy-MM-dd'.log'
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %5p %c{1}:%L - %m%n
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • 疯雪 2017-07-21 05:51
    已采纳

    System.err重定向到log4j的输出流

    打赏 评论
  • just_one_wk 2017-07-21 03:31

    我觉得是因为在捕捉异常信息时你没有调用log4j,你可以在catch时把捕捉到的异常输出到日志文件中!

    打赏 评论
  • 一点寒芒先至 2017-07-21 03:35

    也输出到日志文件中? 这个日志文件指输出到控制台?

    打赏 评论
  • 调用logger.info(getTrace(e));就可以了

    public String getTrace(Throwable t) {
            StringWriter stringWriter= new StringWriter();
            PrintWriter writer= new PrintWriter(stringWriter);
            t.printStackTrace(writer);
            StringBuffer buffer= stringWriter.getBuffer();
            return buffer.toString();
        } 
    
    打赏 评论
  • 从null到1 2017-07-21 03:43

    图片说明

    有异常就写入文件
    logger.error(e.getMessage()+":::"+Arrays.toString(e.getStackTrace()));

    打赏 评论
  • 搬运工木木 2017-07-21 04:59

    你这个其实是要做输出重定向,这样就能控制输出了

    打赏 评论
  • cloudyzhao 2017-07-21 07:10

    这里涉及到两种异常是运行时异常还是可捕获异常
    如果是运行时异常通过设置logger
    如果是可捕获异常就在catch中加上 logger.error(e.getMessage()+":::"+Arrays.toString(e.getStackTrace()));

    try{
    throw new Exception("my exception");
    }catch(Exception e){
    LogTool.error(TestLogTool.class, e);
    }

    打赏 评论
  • sinat_34881157 2017-07-21 09:23

    log4j.rootLogger=INFO,A1,DRF,stdout
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout

    log4j.appender.A1.layout.ConversionPattern=%d %5p %t - %m%n

    log4j.appender.A1.layout.ConversionPattern=%d %5p [%F:%L] : %m%n

    log4j.appender.DRF=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.DRF.Threshold=INFO
    log4j.appender.DRF.DatePattern='.'yyyy-MM-dd
    log4j.appender.DRF.File=logs/yl-service-code.log
    log4j.appender.DRF.Append=true
    log4j.appender.DRF.layout=org.apache.log4j.PatternLayout
    log4j.appender.DRF.layout.ConversionPattern=[%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n

    打赏 评论
  • Java狂魔 2017-07-21 10:02

    你未捕获的异常自然不是调用的log.error()打印日志,用的e.printStatkTrace()啊自然会到catalina.out 解决方案有俩个
    1.spring的异常捕获机制
    2.web.xml 500重定向到自己的controller 打印日志

    打赏 评论

相关推荐 更多相似问题