log4j用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wudinaniya/article/details/84305082

log4j可以通过配置文件的方式进行设置,目前支持两种格式的配置文件:

xml文件
properties文件(推荐)

下面是一个log4j.properties配置文件的完整内容:

###配置根logger###
log4j.rootLogger=DEBUG,logFile,stdout

###set package###
#log4j.logger.org.springframework=ERROR
#log4j.logger.org.apache=ERROR
#log4j.logger.httpclient=ERROR
#log4j.logger.com.mchange.v2=ERROR
#log4j.logger.java.sql=ERROR
#log4j.logger.org.apache.cxf=ERROR
#log4j.logger.org.hibernate=ERROR
#log4j.logger.org.exolab=ERROR
#log4j.logger.net.sf=ERROR
#log4j.logger.org.jboss=ERROR
#log4j.logger.org.aspectj=ERROR
#log4j.logger.org.mybatis=ERROR
#log4j.logger.org.hibernate.SQL=debug
#log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
#log4j.logger.org.mybatis.example.BlogMapper=TRACE
#
#log4j.logger.report=DEBUG
#log4j.logger.com.dc=DEBUG

###stdout###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%p] %d{ABSOLUTE} %c (%M:%L)%n%m%n%n

###logFile###
log4j.appender.logFile=org.apache.log4j.RollingFileAppender
log4j.appender.logFile.File=/usr/local/log/log4jweb.log
log4j.appender.logFile.MaxFileSize=5120KB
log4j.appender.logFile.MaxBackupIndex=1024
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} [%t] %c (%M:%L) %m%n

配置log4j.properties文件中的内容详解:

(1)配置rootLogger
rootLogger主要定义log4j支持的日志级别及输出目的地,其语法为:
log4j.rootLogger=[level],appenderName1,appenderName2,...
其中,level是日志输出级别,按照级别从高到低依次是:
FATAL、ERROR、WARN、INFO、DEBUG、自定义的级别。

(2)设置package输出级别
可以设置不同package的日志输出级别,语法为:
log4j.logger.packageName=level

(3)配置输出目的地appender
appender主要定义日志信息输出在什么位置,主要语法为:
log4j.appender.appenderName1=log4j提供的appender类名(注意:是全限定名)
log4j.appender.appenderName1.option1=value1
log4j.appender.appenderName1.option2=value2
    ......
log4j.appender.appenderName1.optionN=valueN

log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.RollingFileAppender(文件大小达到指定尺寸的时候产生一个新的文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

eg:

(3.1) 配置日志信息的布局layout
log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout (可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout  (包含日志信息的级别何信息字符串),
org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)

(4)log4j.appender.appenderName.layout.ConversionPatttern的value中的参数详解
以一个简单的maven war项目为例,没有集成spring,采用的servlet作为演示:
项目名log4jweb,其pom文件配置如下

新建一个servlet,起名Log4jTestServlet,Log4jTestServlet.java文件内容如下:

package com.test.logf4web.servlet;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

public class Log4jTestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final Logger logger=Logger.getLogger(Log4jTestServlet.class);

    /**
     * Default constructor. 
     */
    public Log4jTestServlet() {
        // TODO Auto-generated constructor stub
    }

	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		logger.debug("服务器启动了,log4j开始工作了");
	}

	public void destroy() {
		// TODO Auto-generated method stub
		logger.error("该servlet已经game over了!");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
		logger.error("log4j监测到一个get请求");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

创建Servlet时,会在web.xml文件中自动完成该servlet的配置,但若想使tomcat启动的时候就加载该servlet,还需要添加一句代码  <load-on-startup>1</load-on-startup> ,完整内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>log4jweb</display-name>

  <servlet>
    <description></description>
    <display-name>Log4jTestServlet</display-name>
    <servlet-name>Log4jTestServlet</servlet-name>
    <servlet-class>com.test.logf4web.servlet.Log4jTestServlet</servlet-class>

    <!-- 设置web服务器启动的时候就加载该servlet -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Log4jTestServlet</servlet-name>
    <url-pattern>/log4j</url-pattern>
  </servlet-mapping>
</web-app>

在src/main/resources下创建log4j.properties文件

文件内容如下:

log4j.rootLogger=DEBUG,logFile,stdout

#log4j.logger.org.springframework=ERROR
#log4j.logger.org.apache=ERROR
#log4j.logger.httpclient=ERROR
#log4j.logger.com.mchange.v2=ERROR
#log4j.logger.java.sql=ERROR
#log4j.logger.org.apache.cxf=ERROR
#log4j.logger.org.hibernate=ERROR
#log4j.logger.org.exolab=ERROR
#log4j.logger.net.sf=ERROR
#log4j.logger.org.jboss=ERROR
#log4j.logger.org.aspectj=ERROR
#log4j.logger.org.mybatis=ERROR
#log4j.logger.org.hibernate.SQL=debug
#log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
#log4j.logger.org.mybatis.example.BlogMapper=TRACE
#
#log4j.logger.report=DEBUG
#log4j.logger.com.dc=DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%p] %d{ABSOLUTE} %c (%M:%L)%n%m%n%n

log4j.appender.logFile=org.apache.log4j.RollingFileAppender
log4j.appender.logFile.File=/usr/local/log/log4jweb.log
log4j.appender.logFile.MaxFileSize=5120KB
log4j.appender.logFile.MaxBackupIndex=1024
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} [%t] %c (%M:%L) %m%n

有了pom.xml、log4jTestServlet.java、web.xml 、logj.properties这4个文件,该示例项目已完成:
在本地Eclipse上启动tomcat,控制台输出结果为:

浏览器中访问http://localhost:8080/log4jweb/log4j
则控制台追加日志:

当停止tomcat时,则会调用servlet的destroy方法,此时,控制台日志为

如果是在linux服务器上,启动tomcat时,会自动创建log文件夹和log4jweb.log文件,参见log4j.properties文件中的配置
,linux上的日志为:

再回过头来看log4j文件中的配置:

就好明白 log4j.appender.appenderName.layout.ConversionPattern的value中各参数的含义了,具体如下:

%p 输出日志级别
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss}, 输出类似 2018-11-21 10:22:57
%t 输出产生该日志事件的线程名
%c 输出所属的类目,通常就是所在类的全名
%M 输出该日志事件所在的方法名
%L 输出该条日志信息在代码文件中的第几行,即行号
%m 输出代码中指定的日志消息
%n 输出一个回车换行符

猜你喜欢

转载自blog.csdn.net/wudinaniya/article/details/84305082