详述Log4j

一、什么是Log4j

Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;可以控制每一条日志的输出格式;也可以通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

二、为什么使用Log4j

1、Log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就是可以配置文件,灵活地设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。
2、Log4j除了可以记录程序运行日志信息外还有一个重要的功能就是用来显示调试信息。
3、程序员经常会遇到脱离JAVA IDE环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不需要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需要调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句。使用Log4j可以很好的处理类似情况。
4、请看下例:

public static void main(String[] args) {
	while (true) {
		try {
			System.out.println(1/0);	
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行上面代码,控制台会不断打印错误信息。但是由于JVM内存是有限的,不可能将所有的错误信息都打印到控制台上,当错误信息超出内存的时候,新产生的错误信息会覆盖掉之前的错误信息,导致程序员不能够看到完整的错误信息。使用Log4j就可以很好的处理类似情况。

三、如何使用Log4j

第一步:导入log4j-1.2.15.jar依赖包。
第二步:在src根目录下创建名为log4j.properties的文件,文件内容如下:
  #DEBUG设置输出日志级别,由于为DEBUG,所以ERROR、WARN和INFO 级别日志信息也会显示出来
  log4j.rootLogger=DEBUG,Console,RollingFile
  #将日志信息输出到控制台
  log4j.appender.Console=org.apache.log4j.ConsoleAppender
  log4j.appender.Console.layout=org.apache.log4j.PatternLayout
  log4j.appender.Console.layout.ConversionPattern= [%-5p]-[%d{yyyy-MM-dd   HH:mm:ss}] -%l -%m%n
  #将日志信息输出到操作系统D盘根目录下的log.log文件中
  log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.RollingFile.File=D://log.log
  log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
  log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c %X{traceId}-%m%n
  
   Log4j配置文件详解:https://blog.csdn.net/gaohuanjie/article/details/44077551
第三步:src目录创建Test类,代码如下:

import org.apache.log4j.Logger;
 
public class Test {
	private static final Logger logger = Logger.getLogger(Test.class);
	public static void main(String[] args) {
		try {
			Class.forName("ErrorClassName");
		} catch (ClassNotFoundException e) {
			logger.debug(e.getMessage(),e);//详细日报信息
			logger.info(e.getMessage(),e);//详细日报信息
			logger.warn(e.getMessage());//简单日报信息
			logger.error(e.getMessage());//简单日报信息
		}
    }
}

经过上述三步,最终Java工程结构如下:
在这里插入图片描述
运行Test类方法,打开D盘根目录中log.log文件可以看到相应的日志信息,此时的日志信息都会显示出来。Log4j常用日志级别从高到低依次为:ERROR、WARN、INFO和DEBUG,由于上例所设置的Log4j日志级别为DEBUG,所以ERROR、WARN和INFO级别的日志信息也会显示出来。

四、间歇性产生新日志文件

上例配置文件是将所有的日志信息都收集到了一个文件中,那么随着时间的推移,该文件会越来越大,内容也会越来越多,这不利于后期对日志文件进行分析,为了解决该问题可以这样配置log4j.properties文件:
  #DEBUG设置输出日志级别,由于为DEBUG,所以ERROR、WARN和INFO 级别日志信息也会显示出来
  log4j.rootLogger=DEBUG,RollingFile
  #每天产生一个日志文件(RollingFile)
  log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
  #当天的日志文件全路径
  log4j.appender.RollingFile.File=d:/logs/sirius.log
  #服务器启动日志是追加,false:服务器启动后会生成日志文件把老的覆盖掉
  log4j.appender.RollingFile.Append=true
  #日志文件格式
  log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
  log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c %X{traceId}-%m%n
  log4j.appender.RollingFile.Threshold=DEBUG
  #设置每天生成一个文件名后添加的名称,备份名称:sirius.log.年月日时分.log
  log4j.appender.RollingFile.DatePattern=’.‘yyyy-MM-dd-HH-mm’.log’
  DatePattern选项的有效值为:
  '.'yyyy-MM,对应monthly(每月)
  '.'yyyy-ww,对应weekly(每周)
  '.'yyyy-MM-dd,对应daily(每天)
  '.'yyyy-MM-dd-a,对应half-daily(每半天)
  '.'yyyy-MM-dd-HH,对应hourly(每小时)
  '.‘yyyy-MM-dd-HH-mm,对应minutely(每分钟)
  DatePattern中不用处理的文字要放到单引号(’)中,如上面的(.)。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值