`
liqita
  • 浏览: 287490 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Log4J.xml配置详解

 
阅读更多

Appender

Appender:日志输出器,配置日志的输出级别、输出位置等,包括以下几类:

 

ConsoleAppender: 日志输出到控制台;

FileAppender:输出到文件;

RollingFileAppender:输出到文件,文件达到一定阈值时,自动备份日志文件;

DailyRollingFileAppender:可定期备份日志文件,默认一天一个文件,也可设置为每分钟一个、每小时一个;

WriterAppender:可自定义日志输出位置。

配置日志信息输出目的地

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

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

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

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

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

 

日志级别

一般日志级别包括:ALL,DEBUG, INFO, WARN, ERROR,FATAL,OFF

Log4J推荐使用:DEBUG, INFO, WARN, ERROR

输出级别的种类:

OFF 为最高等级 关闭了日志信息  

FATAL  为可能导致应用中止的严重事件错误  

ERROR 为严重错误 主要是程序的错误  

WARN 为一般警告,比如session丢失  

INFO 为一般要显示的信息,比如登录登出  

DEBUG 为程序的调试信息  

TRACE 为比DEBUG更细粒度的事件信息  

ALL 为最低等级,将打开所有级别的日志 

输出格式

Log4J最常用的日志输出格式为:org.apache.log4j.PatternLayOut,其主要参数为:

 

%n - 换行

%m - 日志内容

%p - 日志级别(FATAL, ERROR,WARN, INFO,DEBUG or custom)

%r - 程序启动到现在的毫秒数

%t - 当前线程名

%d - 日期和时间, 一般使用格式 %d{yyyy-MM-dd HH:mm:ss, SSS}

%l - 输出日志事件的发生位置, 同 %F%L%C%M

%F - java 源文件名

%L - java 源码行数

%C - java 类名,%C{1} 输出最后一个元素

%M - java 方法名

配置日志信息的格式

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

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

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

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

日志信息格式中几个符号所代表的含义:

-X号: X信息输出时左对齐;  

%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,  

%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  

%r: 输出自应用启动到输出该log信息耗费的毫秒数  

%c: 输出日志信息所属的类目,通常就是所在类的全名  

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

%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)  

%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。  

%%: 输出一个"%"字符  

%F: 输出日志消息产生时所在的文件名称  

%L: 输出代码中的行号  

%m: 输出代码中指定的消息,产生的日志具体信息  

%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行  

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:  

1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。  

2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。  

3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。  

4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

 

代码示例

 

代码示例

示例一:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">

 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 

    <!-- 日志输出到控制台 -->

    <appender name="console" class="org.apache.log4j.ConsoleAppender">

        <!-- 日志输出格式 -->

        <layout class="org.apache.log4j.PatternLayout">

            <param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n"/>

        </layout>

 

        <!--过滤器设置输出的级别-->

        <filter class="org.apache.log4j.varia.LevelRangeFilter">

            <!-- 设置日志输出的最小级别 -->

            <param name="levelMin" value="INFO"/>

            <!-- 设置日志输出的最大级别 -->

            <param name="levelMax" value="ERROR"/>

        </filter>

    </appender>

 

 

    <!-- 输出日志到文件 -->

    <appender name="fileAppender" class="org.apache.log4j.FileAppender">

        <!-- 输出文件全路径名-->

        <param name="File" value="/data/applogs/own/fileAppender.log"/>

        <!--是否在已存在的文件追加写:默认时true,若为false则每次启动都会删除并重新新建文件-->

        <param name="Append" value="false"/>

        <param name="Threshold" value="INFO"/>

        <!--是否启用缓存,默认false-->

        <param name="BufferedIO" value="false"/>

        <!--缓存大小,依赖上一个参数(bufferedIO), 默认缓存大小8K  -->

        <param name="BufferSize" value="512"/>

        <!-- 日志输出格式 -->

        <layout class="org.apache.log4j.PatternLayout">

            <param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n"/>

        </layout>

    </appender>

 

 

    <!-- 输出日志到文件,当文件大小达到一定阈值时,自动备份 -->

    <!-- FileAppender子类 -->

    <appender name="rollingAppender" class="org.apache.log4j.RollingFileAppender">

        <!-- 日志文件全路径名 -->

        <param name="File" value="/data/applogs/RollingFileAppender.log" />

        <!--是否在已存在的文件追加写:默认时true,若为false则每次启动都会删除并重新新建文件-->

        <param name="Append" value="true" />

        <!-- 保存备份日志的最大个数,默认值是:1  -->

        <param name="MaxBackupIndex" value="10" />

        <!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB,默认值是:10MB -->

        <param name="MaxFileSize" value="10KB" />

        <!-- 设置日志输出的样式 -->`

        <layout class="org.apache.log4j.PatternLayout">

            <!-- 日志输出格式 -->

            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />

        </layout>

    </appender>

 

 

    <!-- 日志输出到文件,可以配置多久产生一个新的日志信息文件 -->

    <appender name="dailyRollingAppender" class="org.apache.log4j.DailyRollingFileAppender">

        <!-- 文件文件全路径名 -->

        <param name="File" value="/data/applogs/own/dailyRollingAppender.log"/>

        <param name="Append" value="true" />

        <!-- 设置日志备份频率,默认:为每天一个日志文件 -->

        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />

 

        <!--每分钟一个备份-->

        <!--<param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" />-->

        <layout class="org.apache.log4j.PatternLayout">

            <param name="ConversionPattern" value="[%p][%d{HH:mm:ss SSS}][%c]-[%m]%n"/>

        </layout>

    </appender>

 

 

 

    <!--

        1. 指定logger的设置,additivity是否遵循缺省的继承机制

        2. 当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制

        3. 代码中使用Logger.getLogger("logTest")获得此输出器,且不会使用根输出器

    -->

    <logger name="logTest" additivity="false">

        <level value ="INFO"/>

        <appender-ref ref="dailyRollingAppender"/>

    </logger>

 

 

    <!-- 根logger的设置,若代码中未找到指定的logger,则会根据继承机制,使用根logger-->

    <root>

        <appender-ref ref="console"/>

        <appender-ref ref="fileAppender"/>

        <appender-ref ref="rollingAppender"/>

        <appender-ref ref="dailyRollingAppender"/>

    </root>

 

</log4j:configuration>

测试代码:

package com.cas.test;

 

 

import org.apache.log4j.Logger;

import org.slf4j.LoggerFactory;

 

public class TestMain {

private static final Logger logger = Logger.getLogger(TestMain.class);

 

private static final org.slf4j.Logger log = LoggerFactory.getLogger(TestMain.class);

 

public static void main(String[] args) {

//PropertyConfigurator.configure("D:\\Program Files\\java\\Tomcat\\apache-tomcat-6.0.36.15\\webapps\\qymh_cas\\WEB-INF\\classes\\log4j.properties");

 

logger.info("DSFSDFSDF");

 

log.info("SSS");

log.error("Email send error", "PPPPPPPP");

}

}

@Component

public class LogTest {

    Logger logger = Logger.getLogger("logTest1");

 

    @PostConstruct

    public void test(){

        for (int i=0; i<1000; i++) {

            logger.info(i + "----Log.Info----");

            logger.info(i + "----Log.Info----");

            logger.info(i + "----Log.Info----");

        }

    }

}

测试结果:

控制台日志输出展示: 

 

 

 

日志输出文件:

 

 

 

示例二:

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 

<!-- Appenders 日志信息输出目的地 -->

 

<!-- ConsoleAppender -->

<!-- 每个ConsoleAppender都有一个target,表示它的输出目的地。 -->

<!-- 它可以是System.out,标准输出设备(缓冲显示屏) -->

<!-- 或者是System.err,标准错误设备(不缓冲显示屏) -->

<appender name="console" class="org.apache.log4j.ConsoleAppender">

<param name="Target" value="System.out" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d %-5p: %c - %m%n" />

</layout>

</appender>

 

<!-- RollingFileAppender 回滚文件 -->

<!-- Append true,默认每次启动系统,日志继续输出到原来的文件,而不是清空了再来 -->

<!-- MaxFileSize 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件 -->

<!-- MaxBackupIndex 最多20个 -->

<!-- PatternLayout 控制日志输出的格式化,参考上面的那些符合说明,自己怼自己想要的格式。 -->

<!-- filter 级别范围过滤器 -->

<!-- levelMin levelMax 范围 -->

<appender name="StreamOperateFile" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="f:/ezLog/streamOperate.log" />

<param name="Append" value="true"/>

<param name="MaxFileSize" value="10MB"/>

<param name="MaxBackupIndex" value="20"/>  

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="levelMin" value="INFO" />

<param name="levelMax" value="INFO" />

<param name="AcceptOnMatch" value="true" />

</filter>  

</appender>

 

<!-- 同上 回滚文件,有2个的原因就是演示,把不同的日志输出到不同的文件 -->

<appender name="File" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="f:/ezLog/production.log" />

<param name="Append" value="true"/>

<param name="MaxFileSize" value="10MB"/>

<param name="MaxBackupIndex" value="20"/>  

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d %-5p: %c - %m%n" />

</layout>

</appender>

 

<!-- 下面这些就是根据 这些路径来控制对应包下的文件的日志输出级别,基本上都是报错了,才输出日志-->

<logger name="org.springframework.core">

<level value="error" />

</logger>

 

<logger name="org.springframework.beans">

<level value="error" />

</logger>

 

<logger name="org.springframework.context">

<level value="error" />

</logger>

 

<logger name="org.springframework.http">

<level value="error" />

</logger>

 

<logger name="org.springframework.web">

<level value="error" />

</logger>

 

<logger name="org.elasticsearch.client.transport">

<level value="debug" />

</logger>

 

<logger name="org.springframework.data.mongodb">

<level value="error" />

</logger>

 

<!-- 这个就是自定义的一个logger -->

<!-- 输出级别是info级别及以上的日志,不要怕,StreamOperateFile已经过滤,只输出info级别的日志 -->

<!-- additivity 这个默认是true,即继承父类 root logger -->

<!-- 也就是说,你的这个日志也会在root的logger里面输出的,我这里配置false,就是不继承,各走各的。 -->

<!-- appender-ref 也就是说这个logger的输出目的地是哪里,ref就是关联到上面声明的一个file,一个console -->

<logger name="StreamOperateFile" additivity="false">

<level value="info" />

<appender-ref ref="StreamOperateFile" />

<appender-ref ref="console" />

</logger>

 

<!-- 传说中的根logger -->

<!-- 输出级别是info级别及以上的日志,下面的ref关联的两个appender没有filter设置,所以,info及以上的日志都是会输出到这2个appender的 -->

<root>

<priority value="info" />

<appender-ref ref="console" />

<appender-ref ref="File" />

</root>

 

</log4j:configuration>

测试代码:

private static final Logger STREAM_OPERATE_LOG = LoggerFactory.getLogger("StreamOperateFile");

STREAM_OPERATE_LOG.info("你要输出的日志信息");

getLogger("StreamOperateFile")的参数和你配置的那个要对应。

最后,真的在配置的地方生成了2个不同的日志文件,而且内容是不重叠的,各自是各自的。

 

分享到:
评论

相关推荐

    Log4j配置详解高清版

    Log4j配置详解 特别清晰,大家可以下载来参考学习,有问题可以反馈

    log4j2-所需jar包+配置详解(详细)

     log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".  系统选择配置文件的优先级(从先到后)如下:  (1).classpath下的名为log4j2-test.json...

    log4j.properties配置详解

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。

    log4j配置文件说明(完整版)

    log4j配置文件说明,让你轻松配置日志文件

    log4j入门到详解

    目录 ...................... 1. Log4j 简介 ........... 2. 下载与使用.............4.2 XML 配置文件详解 .... 4.3 properties 比较详细的例子 4.4 在代码中使用 Log4j .. 4.5 注意事项 . 5. Properties 文件实例说明

    log4j.properties详解与例子

    在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行...Log4j支持两种配置文件格式,一种是XML格式的文件,一种是java properties(key=value)【Java特性文件(键=值)】。(这里只说明properties文件)

    log4j常用配置详解

    log4j常用配置,properties 和.xml两种配置示例

    log4j2的配置案例,可直接使用

    配置日志记录器输出的状态为“fatal”,意味着只输出致命错误信息。 定义了一个名为“baseDir”的属性,其值为"./logs",用于配置日志文件的存储路径。 配置了三个日志输出器,分别是控制台输出器“Console”以及三...

    log4j,log4j2,logback 日志插件的使用例子

    2. log4j2 的配置详解,JDBC 配置,CloseableThreadContext 的使用(自定义输出日志文件 例如 logback MDC) 3.logback 的XML配置与使用,MDC的使用,SiftingAppender,DBAppender(c3p0,druid) 详细查看代码:README.md ...

    log4j配置详解.

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。

    常用log4j的配置详解

    log4j的配置详细介绍,xml和properties两种格式,同时有一个完整的文档

    log4j从入门到详解

    大部分内容摘自网络,整理:雪飘寒 目录 Log4j从入门到详解 目录 1. Log4j简介 ...4.2 XML配置文件详解 4.3 properties比较详细的例子 4.4 在代码中使用Log4j 4.5 注意事项 5. Properties文件实例说明

    Log4J配置详解

    详细讲解Log4j的配置问题,包括XML文件配置方法和利用配置文件配置方法。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 3.6 解析名称空间 96 3.6.1 dom和名称空间 96 3.6.2 sax和名称空间 97 3.6.3 jdom和名称空间 98 3.6.4 dom4j和...

    logback+self4j 进行日志记录

    关于logback-test.xml配置详解,包括简单项目demo解压运行

    mybatis 一对多多对多案例详解

    2、建立maven 工程 导入相关依赖 ,mybatis,mysql,junit,log4j; 3、建立实体类User和Role; 4、编写UserDao,RoleDao以及映射文件UserDaoMapping.xml ,RoleDaoMapping.xml和主配置文件SqlMapConfig.xml,下面上代码...

    java吐血精华大奉送,你要的都能找到(最新版本)

    技术人员也过个年吧,java_吐血奉献_超值大礼包(最新版本)_含struts,hibernate,spring,log4j,web.xml配置详解,java分页大全,cvs教程,tomcat,swing教程,jboss,及各种框架的配置文件范例

    吴天雄--SSM框架整合笔记.doc

    搭建整合环境、Spring整合SpringMVC(配置web.xml文件、配置springmvc.xml文件)、Spring整合Mybatis(配置applicationContext.xml文件、配置mybatis-config.xml文件、jdbc.properties、log4j.properties)附有项目...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 3.6 解析名称空间 96 3.6.1 dom和名称空间 96 3.6.2 sax和名称空间 97 3.6.3 jdom和名称空间 98 3.6.4 dom4j和...

Global site tag (gtag.js) - Google Analytics