在不使用框架的时候,一般使用监听器或者Servlet来初始化log4j进行启动,这里我使用Servlet,代码入下:
import java.io.File; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.PropertyConfigurator; public class Log4JInitServlet extends HttpServlet { private static final long serialVersionUID = 1L; public Log4JInitServlet() { super(); } public void init(ServletConfig config) throws ServletException { System.out.println("正在初始化 log4j日志设置信息"); String log4jLocation = config.getInitParameter("log4j-properties-location"); ServletContext sc = config.getServletContext(); if (log4jLocation == null) { System.err.println("没有找到log4j-properties-location, 所以使用 BasicConfigurator初始化"); BasicConfigurator.configure(); } else { String webAppPath = sc.getRealPath("/"); String log4jProp = webAppPath + log4jLocation; File yoMamaYesThisSaysYoMama = new File(log4jProp); if (yoMamaYesThisSaysYoMama.exists()) { System.out.println(log4jProp + "初始化日志设置信息"); PropertyConfigurator.configure(log4jProp); } else { System.err.println(log4jProp+ " 文件没有找到, 所以使用 BasicConfigurator初始化"); BasicConfigurator.configure(); } } super.init(config); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
在web.xml中修改一下:
<servlet> <servlet-name>Log4JInitServlet</servlet-name> <servlet-class>com.scme.filter.Log4JInitServlet</servlet-class> <init-param> <param-name>log4j-properties-location</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> <!-- 设置加载顺序--> </servlet>
在 WEB-INF/ 目录下添加log4j.properties文件,例子如下:
log4j.rootLogger = INFO,stdout,D log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out //设置为控制台输出,级别为默认的INFO 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 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File =../jump_log/logs.log //输出到文件 log4j.appender.D.DatePattern ='_'yyyy-WW'.log' //每周产生一个新文件 log4j.appender.D.Append = true log4j.appender.D.Encoding=UTF-8 //设置日志文件编码 log4j.appender.D.Threshold = INFO 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
附:打印参数信息
%m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )