文章标题

需要导入包:

log包:log4j-12.17.jar

第一步:web.xml配置

<!-- log4j配置,文件路径,因为是跟随项目启动 -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>
    <!-- 配置log4j.xml变量,如果需要动态的就使用下面方式,使用方法${name} -->
    <context-param>
        <param-name>controller</param-name>
        <param-value>controller-log</param-value>
    </context-param>

    <context-param>
        <param-name>loggingLevel</param-name>
        <param-value>info</param-value>
    </context-param>
    <!-- 加载log4j配置文件 -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

第二步log4j.xml配置
先讲解一下核心对象:

logger对象: Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。

Appender对象:下位层提供Appender对象。Appender对象负责发布日志信息,以不同的首选目的地,如数据库,文件,控制台,UNIX系统日志等。

layout对象: 该层提供其用于格式化不同风格的日志信息的对象。布局层提供支持Appender对象到发布日志信息之前。

打个比方:logger是个情报站,负责收集他 所在地方(用name=”xxx包”指定)下的所有信息。appender是发送出去的方式,如写信(FileAppender)、电报(SMTPAppender)等多种。layout就是发送内容以什么格式书写,如自定义格式(PatternLayout),html(HTMLLayout)格式。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <!-- ===================================================================== -->
    <!-- 以下是appender的定义,定义日志输出的目的地、输出方式及过滤级别        -->
    <!-- ===================================================================== -->
    <appender name="root-log" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="d://logs/log4j-study.log"/>
        <param name="append" value="true"/>
        <param name="encoding" value="GBK"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p %l - %m%n"/>
        </layout>
    </appender>

    <appender name="info-log" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="d://logs/info.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> 
        <param name="append" value="true"/>
        <param name="encoding" value="GBK"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %m%n"/>
        </layout>
    </appender>

    <appender name="info-log-console" class="org.apache.log4j.ConsoleAppender">
        <param name="encoding" value="GBK"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n"/>
        </layout>
    </appender>
    <!-- 过滤出我们想要的日志信息,实现按照日志等级把日志输出到不同地方的目的 -->
    <appender name="error-log" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="d://logs/error.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> 
        <param name="append" value="true"/>
        <param name="encoding" value="GBK"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p %l - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
        <param name="LevelMin" value="ERROR" /> 
        <param name="LevelMax" value="ERROR" /> 
    </filter>
    </appender>

    <!-- ===================================================================== -->
    <!-- 日志写出器:每一个logger可以有多个输出目的地和输出方式                -->
    <!-- ===================================================================== -->
    <logger name="info-logger" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="info-log"/>
        <appender-ref ref="info-log-console"/>
    </logger>

    <logger name="error-logger" additivity="false">
        <appender-ref ref="error-log"/>
    </logger>

    <!-- ===================================================================== -->
    <!-- Root logger 所有logger的基类,没有定义的logger将会使用root logger     -->
    <!-- ===================================================================== -->
   <!--  <root>
        <level value="INFO"/>
        <appender-ref ref="root-log"/>
    </root> -->
</log4j:configuration>

controller中的代码:

Logger log2 = Logger.getLogger("error-logger");
log2.error("带过滤功能的日志写出器,用于过滤error信息。。。");

Logger log3 = Logger.getLogger("info-logger");
log3.info("info信息。。。");

(1). 输出方式appender一般有5种:

  org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)

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

  org.apache.log4j.FileAppender (文件)

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

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

(2). 日记记录的优先级priority,优先级由高到低分为

 OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。

 Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。

(3). 格式说明layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):

 %c    输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)

 %d    输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}

 %l    输出日志事件发生位置,包括类目名、发生线程,在代码中的行数

 %n    换行符

 %m    输出代码指定信息,如info(“message”),输出message

 %p    输出优先级,即 FATAL ,ERROR 等

 %r    输出从启动到显示该log信息所耗费的毫秒数

 %t    输出产生该日志事件的线程名

og4j:configuration (root element)

xmlns:log4j [#FIXED attribute] : 定义log4j的名字空间,取定值”http://jakarta.apache.org/log4j/

appender [* child] : 一个appender子元素定义一个日志输出目的地

logger [* child] : 一个logger子元素定义一个日志写出器

root [? child] : root子元素定义了root logger

appender

appender元素定义一个日志输出目的地。

name [#REQUIRED attribute] : 定义appender的名字,以便被后文引用

class [#REQUIRED attribute] : 定义appender对象所属的类的全名

param [* child] : 创建appender对象时传递给类构造方法的参数

layout [? child] : 该appender使用的layout对象

layout

layout元素定义与某一个appender相联系的日志格式化器。

class [#REQUIRED attribute] : 定义layout对象所属的类的全名

param [* child] : 创建layout对象时传递给类构造方法的参数

logger

logger元素定义一个日志输出器。

name [#REQUIRED attribute] : 定义logger的名字,以便被后文引用

additivity [#ENUM attribute] : 取值为”true”(默认)或者”false”,是否继承父logger的属性

level [? child] : 定义该logger的日志级别

appender-ref [* child] : 定义该logger的输出目的地

root

root元素定义根日志输出器root logger。

param [* child] : 创建root logger对象时传递给类构造方法的参数

level [? child] : 定义root logger的日志级别

appender-ref [* child] : 定义root logger的输出目的地

level

level元素定义logger对象的日志级别。

class [#IMPLIED attribute] : 定义level对象所属的类,默认情况下是”org.apache.log4j.Level类

value [#REQUIRED attribute] : 为level对象赋值。可能的取值从小到大依次为”all”、”debug”、”info”、”warn”、”error”、”fatal”和”off”。当值为”off”时表示没有任何日志信息被输出

param [* child] : 创建level对象时传递给类构造方法的参数

appender-ref

appender-ref元素引用一个appender元素的名字,为logger对象增加一个appender。

ref [#REQUIRED attribute] : 一个appender元素的名字的引用

appender-ref元素没有子元素

param

param元素在创建对象时为类的构造方法提供参数。它可以成为appender、layout、filter、errorHandler、level、categoryFactory和root等元素的子元素。

name and value [#REQUIRED attributes] : 提供参数的一组名值对

param元素没有子元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值