用Spring配置Log4j比较简单。但是servlet配置的时候会因为项目启动后没加载log4j而报错
这篇随笔就主要处理这些。
第一步:导入jar包,在src目录下创建src/log4J.properties 文件。
文件内容如下:
###设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E\://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
该配置可以在控制台或者后台文件中输出日志记录。info,error,debug都可以输出。导出文件路径自己可以修改,格式内容自己也可以修改。
上方格式输出如下:[INFO ] 2017-10-25 15:21:24,025 method:com.dhh.day1.HelloServlet.doGet(HelloServlet.java:29)
在类中创建日志对象如下:
publicLogger log=Logger.getLogger(HelloServlet.class);
但是单单靠这些会产生一个错误:
log4j:WARN No appenders could be found for logger (com.dhh.day1.HelloServlet).
log4j:WARN Please initialize the log4j system properly.
第二步:这个错误的核心在于项目启动之后log4j并没有与配置文件产生关联,所以这个时候需要再servlet增加配置信息让log4J加载
代码如下如下:
加载的类文件是一个servlet:核心在于log4j的一个静态类方法
PropertyConfigurator.configure(String URL);
package com.dhh.Util;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.PropertyConfigurator;publicclassLog4jInitextends HttpServlet {
privatestaticfinallongserialVersionUID = 1L;
@Override
protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub super.doGet(req, resp);
}
@Override
protectedvoid doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub super.doPost(req, resp);
}
@Override
publicvoidinit()throws ServletException {
// TODO Auto-generated method stub super.init();
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
if(file !=null) {
System.out.println("read log4j.properties:"+prefix + file);
PropertyConfigurator.configure(prefix + file);
}
}
}
https://www.cnblogs.com/blackdeng/p/7729456.html