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

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

catch (Exception e) { PrintWriter pw = new PrintWriter(new FileOutputStream("Log")); e.printStackTrace(pw); } 

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

首先阅读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 

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

 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 } .... } .... } 

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

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

 catch(Exception e) { logger.error("Unexpected error", e); } 

如果你有一个运行正常的文件appender,这将输出exception的完整堆栈跟踪。

 try { System.setErr(new PrintStream(new FileOutputStream(System.getProperty("user.home")+"/error.log"))); } catch (FileNotFoundException ex) { ex.printStackTrace(); } 

现在所有错误输出都写入此文件

使用log4j您可以非常轻松地记录exceptios:

 try { ... } catch(Exception e) { log.error("An exception! Oops!", e); } 

看看这个关于“File Appender”的教程

请参阅官方Log4j简介和“配置”部分。

您还可以搜索“RollingFileAppender”或“File appender”。

您将记录器配置为将其消息发送到appender。 这个appender可以向控制台(stdin)转发消息,转向文件(FileAppender,RollingFileAppender ……)……

使用它来执行错误日志:

 try{ throw new Exception("bla bla bla..."); } catch( Exception e ){ // log without stack trace mLogger.error("Your log message"); // log with stack trace mLogger.error("Your log message", e); }