如何在java中将错误日志或异常写入文件

ade*_*esh 15 java log4j error-log

有没有办法在java中的文件中写入错误日志或异常.我经历过Log4j.我搜索了一下,但diidnt找到了一个很好的解决方案.我写了一个简单的代码

catch (Exception e) {
    PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));     
    e.printStackTrace(pw);
} 
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来记录错误或异常?任何机构可以提供我与Log4j的示例?

Nis*_*ant 26

首先阅读log4j手册,很容易配置滚动日志文件.您不必执行任何显式文件操作.

#SET LEVEL of ROOT-LOGGER, you will like to have Debug in local, but in prod you may just want WARN and ABOVE. This setting is done here!
log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number. (basically, format of log)
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

# THIS IS WHERE YOU WILL HAVE ALL THE LOG WRITTEN
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=/var/log/applogs/example.log

# Maximum size of log file, usually we keep 10MB
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file, usually we keep 10
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Run Code Online (Sandbox Code Playgroud)

其次,无论何时捕获异常,都要这样做

public class MyClass{

  private static Logger logger = Logger.getLogger(MyClass.class);

  public ReturnType myMethod(Param p, Param2 p2) {
    ....
    ....
    try {
      ..    
    } catch(MyException e) {
       logger.log("Exceptions happen!", e); //this will put all the details in log file configured earlier
    }
    ....
  }

  ....
}
Run Code Online (Sandbox Code Playgroud)

值得一读的是手册.更好的阅读完整的log4j手册

  • 当出现未经检查的异常时我该怎么办?我如何确定所有内容都会发送到记录器? (2认同)

Bri*_*ian 8

您可以将异常作为参数添加到 log4j 语句中,例如

catch(Exception e)
{
    logger.error("Unexpected error", e);
}
Run Code Online (Sandbox Code Playgroud)

如果您的文件附加程序运行正常,这将输出异常的完整堆栈跟踪。


小智 5

使用log4j你可以很容易地记录异常:

try {
    ...
} catch(Exception e) {
    log.error("An exception! Oops!", e);
}
Run Code Online (Sandbox Code Playgroud)