目录
一、前言
二、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++;
}
}
}
运行结果:
将异常信息打印控制台——>存入一段缓存,缓存有大小——>当缓存满了,但是异常信息源源不断,则会将最先进入缓存的异常信息移除——>意味着无法全面的发现程序运行期间出现的问题——>为了全面收集系统运行期间出现的所有异常信息,log4j诞生了——>将都有异常信息输出到一个文件中——因为文件在硬盘上——>可以认为无限大
Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息格式及其输送目的地(控制台、文件、数据库等),方便后期查找系统运行期间出现的问题,进而便于维护系统。
1.右键点击项目名,新建Folder;
2.拷贝log4j.jar,右键点击新建的Folder,点击“paste”;
3.右键点击log4j,找到“Build Path”,点击“Add to Build Path”;
并在名为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
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++打开:
如图,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,打开:
log4j按时间产生了间歇性日志文件。