Log4j学习

Log4j

Log4j介绍

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

使用

添加JAR包

添加Log4j需要的JAR包,包括log4j和commons-loggingJAR包,如果是使用maven开发工具,则在pom.xml文件中添加如下配置即可

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
写配置文件

log4j可以使用xml文件来配置,也可以使用properties这种键值对的文件来配置,但我们大多使用后者。一般来说我们将配置文件直接放在src目录下,如果是maven工厂,则放在 src/main/resources 目录下。

例如,下面是一个Log4j的配置文件

log4j.rootCategory=INFO, file, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=target/test.log
log4j.appender.file.MaxFileSize=5120KB
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

##SPRING\u6539\u4E3AWARN\u7EA7\u522B
log4j.logger.org.springframework=DEBUG
log4j.logger.org.mybatis=WARN
log4j.logger.org.apache.velocity=WARN
log4j.logger.org.apache.commons=WARN

##\u663E\u793ASQL\u8BED\u53E5\u90E8\u5206,\u751F\u4EA7\u73AF\u5883\u8BF7\u8C03\u6574\u4E3AERROR
log4j.logger.com.mybatis=DEBUG 
log4j.logger.com.mybatis.common.jdbc.SimpleDataSource=DEBUG 
log4j.logger.com.mybatis.common.jdbc.ScriptRunner=DEBUG 
log4j.logger.com.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
Log4j三大组件
Logger(日志类别)
  • ERROR

  • WANR

  • INFO

  • DEBUG

  • FATAL

Log4j建议只使用前四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为WANR,则优先级高于等于WANR级别(如:IWARN、 ERROR)的日志信息将可以被输出,小于该级别的日志,如DEBUG,将不会被输出。

log4j.rootCategory=INFO, file, stdout

上面这段配置信息表示了日志的级别以及输出目的地

我们也可以通过配置Logger来配置Log4j

log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中level 是日志记录的优先级:ERROR、WARN、INFO、DEBUG (由高到低)
Appender(日志输出目的地)

Appender配置了日志的输出目的地。下面中,appenderName是自己取的。在我们最上面的配置模板中,定义stuout配置为标准输出,也就是输出到控制台,定义file配置为输出到文件。

  • log4j.appender.appenderName = 属性值

    • org.apache.log4j.ConsoleAppender(控制台)

    • org.apache.log4j.FileAppender(文件)

    • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

    • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

    • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  • log4j.appender.appenderName.option1 = value

    value可为:Threshold、ImmediateFlush、Append、File(指示文件路径)、DatePattern(日期格式)、MaxFileSize(一个文件的最大容量)、MaxBackupIndex

Layout(格式化输出日志信息)

Layout配置输出信息的格式

  • log4j.appender.appenderName.layout = 属性值

    • org.apache.log4j.HTMLLayout(以HTML表格形式布局),

    • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

    • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

    • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

  • log4j.appender.appenderName.layout.option1 = value1

    • ConversionPattern (举例:%d-[ZZXTIT] %p %t %c - %m%n)

测试

package com.li.common.servlet;

import java.io.IOException;
import java.lang.reflect.Method;

import javax.persistence.Basic;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;


public class BasicServlet extends HttpServlet {

    private static final long serialVersionUID = 8780356163185352965L;

    private static final Log log=LogFactory.getLog(Basic.class);

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /* 获取传入进来要调用的方法名称 */
        String handler = req.getParameter("handler");

        log.debug("方法:"+handler+" 将要被执行");

        try {
            /* 通过此对象获取类,再获取类中指定名称以及参数类型的方法 */
            Method method = this.getClass().getDeclaredMethod(handler, HttpServletRequest.class, HttpServletResponse.class);
            /* 执行方法 */
            method.invoke(this, req, resp);
            log.info("已经执行");

        } catch (Exception e) {
            log.error("出现错误");
            throw new RuntimeException(e);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值