Log4j 最简单内容
1. 右击src目录,new->file,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 = E://logs/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 =E://logs/error.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
2. 代码中使用:
import org.apache.log4j.Logger;
import org.testng.annotations.Test;
public class FirstTest {
private Logger log = Logger.getLogger(FirstTest.class);
/**第一个测试方法,测试了很多log
*
*/
@Test
public void f() {
log.info("Log.info");
log.debug("Log.debug");
}
}
跑多次之后,新的log会叠加在原有的log中
默认log位置
log4j.appender.D.File = ../log/log.txt
生成的文件在workspace/log/log.txt
log4j.appender.D.File = log.txt
生成的文件在workspace/project/log.txt
log4j.appender.D.File = /log/log.txt
生成的文件在当前盘符根目录下D:/log/log.txt
子logger
在log4j.properties文件中新增:
log4j.logger.outonly=debug,outonlyconsole
log4j.additivity.outonly=false
### 输出信息到控制台 ###
log4j.appender.outonlyconsole = org.apache.log4j.ConsoleAppender
log4j.appender.outonlyconsole.Target = System.err
log4j.appender.outonlyconsole.layout = org.apache.log4j.PatternLayout
log4j.appender.outonlyconsole.layout.ConversionPattern = [%-5p] [Console Only]%d{HH:mm:ss} Method:%m%n
代码中:
private Logger logConsole = Logger.getLogger("outonly");
...
logConsole.debug("console========");
生成的log不输出到父级,可单独配置
代码中配置log4j
//获取当前时间
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String time=format.format(date);
//配置Log4j
PatternLayout p = new PatternLayout("%-4r[%t]%-5p%c%x - %m%n");
FileAppender a = new FileAppender(p, "NewTest" + time);
BasicConfigurator.configure(a);
log.info("Log.info");
log.debug("Log.debug");
每次运行生成一个以时间为文件名的log文件
20170108更新:存储位置,DatePattern和layout
### 输出DEBUG 级别以上的日志到项目文件夹/log/log.log文件中,前一天的日志保存为后缀名为“yyyy-mm-dd”格式的文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${user.dir}/logs/log.log
###DailyRollingFileAppender的默认格式,写和没写一样
log4j.appender.D.DatePattern='.'yyyy-MM-dd
###Append=ture,每次运行追加信息###
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} [ %l ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到项目文件夹/log/log.log,DatePattern和上一个相同 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ${user.dir}/logs/error.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} [ %l ] - [ %p ] %m%n
20170108更新:输出Exception到log
catch (Exception e){
StringWriter sw = new StringWriter();//生成writer
e.printStackTrace(new PrintWriter(sw,true));//将错误信息写到writer
log.error(sw);//存入log
throw e;
}