1、首先新建一个测试类Log4jTest:
import org.apache.log4j.Logger;
public class Log4jTest {
private static final Logger LOG = Logger.getLogger(Log4jTest.class);
public static void main(String[] args) {
LOG.debug("DEBUG信息");
LOG.info("INFO信息");
LOG.warn("WARN信息");
LOG.error("ERROR信息");
LOG.error("ERROR信息显示",new IllegalArgumentException("非法参数输入"));
}
}
加入log4j-1.2.17.jar到lib下。
如果使用maven项目,也可以选择在pom.xml中新增依赖:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2、新建一个log4j.properties文件:
#you can save "test" as the file you want to save .
test1.logs.dir=D:/logFile/test1
test2.logs.dir=D:/logFile/test2
test3.logs.dir=D:/logFile/test3
test4.logs.dir=D:/logFile/test4
#first : output log level.
#after : name of the output type.(can be customized according to the needs)
log4j.rootLogger=INFO, console, File, kafkaAppender, RollingFile
#output Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#output File
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = ${test1.logs.dir}/test1.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#output DailyRollingFile
log4j.appender.kafkaAppender = org.apache.log4j.DailyRollingFileAppender
log4j.appender.kafkaAppender.File = ${test2.logs.dir}/test2.log
log4j.appender.kafkaAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#output RollingFile
#MaxFileSize : save file maximum
#MaxBackupIndex : maximum number of files to save,delete the old file if exceed.
log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File = ${test3.logs.dir}/test3.log
log4j.appender.RollingFile.MaxFileSize=1KB
log4j.appender.RollingFile.MaxBackupIndex=3
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#define log output categories under custom classes.
log4j.logger.com.log.log4jtest=ERROR, customClass
log4j.appender.customClass = org.apache.log4j.FileAppender
log4j.appender.customClass.File = ${test4.logs.dir}/test4.log
log4j.appender.customClass.layout = org.apache.log4j.PatternLayout
log4j.appender.customClass.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
3、配置文件介绍:
1、Threshold属性指定输出等级
log4j.rootLogger = [ level ] , appenderName, appenderName, …
log4j根据日志信息的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL等级。
一版绝大多数情况下只会用到ERROR、WARN、INFO、DEBUG这四种等级。
例如:
假如我们指定的输出级别是WARN,那么日志输出的时候只会打印FATAL、ERROR、WARN三种信息。
假如我们指定的输出级别是DEBUG,那么日志输出的时候只会打印FATAL、ERROR、WARN、INFO、DEBUG五种信息。
2、appender输出类型配置
Log4j官方的appender给出了一下几种实现:
org.apache.log4j.ConsoleAppender (输出到控制台)
org.apache.log4j.FileAppender (打印出文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),针对日志每天日质量不大的情况
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件), 针对日志量较大情况
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)这种不常用。
org.apache.log4j.RollingFileAppender有两个重要的配额:
MaxFileSize :是日志文件的最大尺寸;根据实际需求来定 10KB 100KB也行
MaxBackupIndex:是日志文件的个数,假如超过了,考虑到的是硬盘的容量问题则覆盖掉最旧的,根据需求来定。
3、Append属性指定是否追加内容
Log4j默认是不断的把日志内容追加到日志文件;
例如:log4j.appender.File.Append = true (默认是true)
假如我们设置成false 就不追加了直接覆盖前面的内容;
4、layout输出日志信息格式
Log4j提供的layout有以下几种
org.apache.log4j.HTMLLayout (以HTML表格形式布局),
org.apache.log4j.PatternLayout (可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)
这里重点掌握PatternLayout形式的即可,其他的作为了解。
5、指定的打印信息的具体格式ConversionPattern
%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO , WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,默认:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
%l 输出日志事件的发生位置,及在代码中的行数;
6、定义自定义类下的日志输出类别
#define log output categories under custom classes.
log4j.logger.com.log.log4jtest=ERROR, customClass
log4j.appender.customClass = org.apache.log4j.FileAppender
log4j.appender.customClass.File = ${test4.logs.dir}/test4.log
log4j.appender.customClass.layout = org.apache.log4j.PatternLayout
log4j.appender.customClass.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
指定com.log.log4jtest包下的所有类的等级为ERROR。可以把com.log.log4jtest改为自己项目所用的包名。
注意:该类下面的代码运行打印出的日志,会影响到前面几项设置的输出结果。不在该类的代码不受影响。
例如:下面相同代码在不同的类下运行时,控制台打印输出的内容。
由于指定com.log.log4jtest类下面的输出级别是ERROR,所以前面设置控制台输出级别是INFO的信息受到影响 。
这里要引起注意!!!!