一、Log4j配置
1 在程序中导入jar:log4j-1.2.15.jar
2 在CLASSPATH下建立log4j.properties(放在根目录下的话就不用配置,否则得去web.xml里面配置一个Listener),内容如下:
log4j.rootLogger=INFO,CONSOLE,FileServer
#console
log4j.appender.Threshold=INFO
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %x - %m%n
# FileServer
log4j.appender.FileServer=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FileServer.file=D:/fileServerLog/fileServer_
log4j.appender.FileServer.DatePattern=yyyyMMdd'.log'
log4j.appender.FileServer.layout=org.apache.log4j.PatternLayout
log4j.appender.FileServer.layout.ConversionPattern=/n/n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
3 日志基类代码:
public class Log {
/**
* 输出debug日志信息
* @param info
*/
public static void debug(String info){
Logger logger = Logger.getLogger("fileserver");
logger.info(info);
PropertyConfigurator.configure("log4j.properties");
}
/**
* 输出debug日志信息
* @param cl
* @param info
*/
public static void debug(Class cl,String info){
Logger logger = Logger.getLogger(cl);
logger.info(info);
PropertyConfigurator.configure("log4j.properties");
}
/**
* 输出error日志信息,包括异常堆栈信息
* @param e
*/
public static void error(Exception e){
Logger logger = Logger.getLogger("fileserver");
String info = e.getMessage() + "\n";
logger.info(info);
logger.info(getStackTrace(e));
PropertyConfigurator.configure("log4j.properties");
}
/**
* 输出error日志信息,包括异常堆栈信息
* @param cl
* @param e
*/
public static void error(Class cl,Exception e){
Logger logger = Logger.getLogger(cl);
String info = e.getMessage() + "\n";
logger.info(info);
logger.info(getStackTrace(e));
PropertyConfigurator.configure("log4j.properties");
}
/**
* 将异常堆栈转换为字符串
* @param aThrowable 异常
* @return String
*/
public static String getStackTrace(Throwable aThrowable) {
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
aThrowable.printStackTrace(printWriter);
return result.toString();
}
}
此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名。等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示,具体讲解可参照第三部分定义配置文件中的logger。
2 日志输出级别,这些级别可以分别定义,也可以自己设置。
log4j.rootLogger=info,stdout,info,debug,error
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = INFO
log4j.appender.info.append=true
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log
log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = ERROR
log4j.appender.error.append=true
log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log
3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
此句为定义名为stdout的输出端是哪种类型,可以是
输出的信息
[TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'8 log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log
此句为定义名为R的输出端的文件名为D:\\Tomcat 5.5\\logs\\qc.log可以自行修改。