详述log4j
log4j概述
Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息格式及其输送目的地(控制台、文件、数据库等),方便后期查找系统运行期间出现的问题,进而便于维护系统。
为什么要使用log4j
由于控制台可以显示的日志信息有限,如果出现太多的错误信息,控制台的的错误信息将会被覆盖,无法完全显示所有的异常信息。所以使用log4j把出现的所有异常信息保存在文件中日志信息就可以完全保存下来,便于查看日志信息。
配置log4j,以及log4j的使用
步骤:
第一步:导入log4j-1.2.15.jar依赖包
第二步:在src根目录下创建名为log4j.properties的文件
- 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
第三步:src目录创建Test类
- 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());//简单日报信息
}
}
}
出现异常的时候会生成一个在D盘根目录生成一个log.log文件
间歇性产生新日志文件
上例配置文件是将所有的日志信息都收集到了一个文件中,那么随着时间的推移,该文件会越来越大,内容也会越来越多,这不利于后期对日志文件进行分析。
为了解决该问题可以这样配置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'
自定义properties的文件
Log4j默认使用src根目录中名为log4j.properties的文件,实际开发中有可能需要使用特定目录中的特定名字的properties文件
把Log4j的相关配置信息保存在config包内log.properties文件,如何得到该文件呢,如下代码:
import java.net.URL;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Test {
static {
// 获取src目录config包中log.properties文件对应的URL对象
URL url = Test.class.getResource("/config/log.properties");
PropertyConfigurator.configure(url);
}
static Logger logger = Logger.getLogger(Test.class);
public static void main(String[] args) {
try {
System.out.println(1 / 0);
} catch (Exception e) {
logger.debug(e.getMessage(), e);
}
}
}