今天遇到了一个新问题,在java程序中,写入一个抛出异常的语句,当有错误的时候,系统会把错误输出到控制台,那么我们怎么把控制台上的错误信息当做日志输出到我们特定的日志当中呢。
这个问题需要借助log4j神器,我们在程序中导入以下两个包:
http://120.52.51.14/repo.spring.io/plugins-release/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar
org.apache.log4j.PropertyConfigurator;
org.apache.log4j.Logger;
第一包的作用是读取你的配置文件,第二个包的作用是对信息进行写入。
对日志文件进行写入特定的文件,主要有三个方法:
private static Logger logger = Logger.getLogger(NAME.class);
上面的方法主要是对自己的类进行监听,通过监听该类,对类中抛出的信息进行捕获,从而进行写入文件。
PropertyConfigurator.configure("log4j.properties");
上面的方法主要是对log4j配置文件读取,按照已经写好的内容对异常信息进行处理。
try {
需要运行的代码
} catch (Exception e) {
logger.debug(e.toString());
}
以上代码是通过try catch方法对异常信息进行抛出,然后通过e.toString()方法对异常信息进行字符串转换,然后通过logger方法进行写入文档。
首先,我们配置log4j.properties文件,如下所示:
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = log/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =log/log.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
在配置文件中,我们指定了将DEBUG和ERROR的信息输出到log/log.log文件中。
然后附上完整的程序代码:
//导入相关的包
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class test {
//对test类进行监听
private static Logger logger = Logger.getLogger(test.class);
/**
* @param args
*/
private static int m = 0;
public static void main(String[] args) {
//读取配置文件
PropertyConfigurator.configure("log4j.properties");
try {
m = 899/0;
} catch (Exception e) {
//对抛出的异常信息写入文件
logger.debug(e.toString());
}
}
}