详述Java中log4j包的使用

目录

一、前言

二、log4j包

三、如何使用log4j包

第一步:导入log4j-1.2.15.jar依赖包

第二步:在src根目录下创建名为log4j.properties的文件

第三步:改写代码示例1

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


 

一、前言

在Java中的异常处理中,因为无论是对于检查时异常还是运行时异常,try-catch一次只能捕获一个异常,而且只有当程序运行时,程序员才能知道异常出现的位置,而且当一个项目的异常的量比较大时,无法记录全部异常,不利于程序员对项目中异常的处理。

举代码为例 :

package moon;

public class Test { // 示例代码块1

	public static void main(String[] args) {

		int i = 0;

		while (true) { // 写一个死循环,模拟程序中异常较多的情况
			try {
				String name = null;
				System.out.println(name.length()); // 空地址异常
			} catch (ArithmeticException e) {
				System.out.println(i);
				e.printStackTrace();
			}

			i++;

		}

	}

}

运行结果:

详述Java中log4j包的使用_第1张图片

 将异常信息打印控制台——>存入一段缓存,缓存有大小——>当缓存满了,但是异常信息源源不断,则会将最先进入缓存的异常信息移除——>意味着无法全面的发现程序运行期间出现的问题——>为了全面收集系统运行期间出现的所有异常信息,log4j诞生了——>将都有异常信息输出到一个文件中——因为文件在硬盘上——>可以认为无限大

二、log4j包

Log4jApache的一个开源项目,通过使用Log4j,可以控制日志信息格式及其输送目的地(控制台、文件、数据库等),方便后期查找系统运行期间出现的问题,进而便于维护系统。

三、如何使用log4j包

第一步:导入log4j-1.2.15.jar依赖

1.右键点击项目名,新建Folder;

详述Java中log4j包的使用_第2张图片

2.拷贝log4j.jar,右键点击新建的Folder,点击“paste”;

 

详述Java中log4j包的使用_第3张图片

3.右键点击log4j,找到“Build Path”,点击“Add to Build Path”;

 

 

详述Java中log4j包的使用_第4张图片

 

第二步:在src根目录下创建名为log4j.properties的文件

并在名为log4j.properties的File文件写入代码:

# 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

第三步:改写代码示例1

package moon;

import org.apache.log4j.Logger;

public class Test { // 示例代码块1
	
	private static final Logger logger = Logger.getLogger(Test.class);
	
	public static void main(String[] args) {

		int i = 0;

		while (true) { // 写一个死循环,模拟程序中异常较多的情况
			try {
				String name = null;
				System.out.println(name.length()); // 空地址异常
			} catch (Exception e) {
				logger.debug(e.getMessage(),e);
			}

			i++;

		}

	}

}

运行程序后,找到“D://log.log”,用Notepad++打开:

详述Java中log4j包的使用_第5张图片

如图,log4j详细记录了程序中的异常。

思考:如果所有异常都写入一个文件,一方面导致单个文件过大,另一方面不方便异常信息查找,这就引入下一项:

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

间歇性产生新日志文件能将异常信息依据时间分包,只需改写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中不用处理的文字要放到单引号(')中,如上面的(.)。

再次运行,找到d:/logs,打开:

详述Java中log4j包的使用_第6张图片

log4j按时间产生了间歇性日志文件。 

你可能感兴趣的:(Java课程)