`
jy03100000
  • 浏览: 34183 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

log4j的配置

 
阅读更多

本文主要目的是理清log4j.properties的结构,以及对于一些常见配置场景的说明。

 

#logger level and appender

log4j.rootLogger=info,console,file

 

#append to console

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=%d %p - %m%n

 

#append to file

log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=${MyProject.root}WEB-INF/logs/web.log

log4j.appender.file.MaxFileSize=1MB

log4j.appender.file.MaxBackupIndex=10000

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%d %p - %m%n

 

#children log

log4j.logger.tect.luoyu.merchant.mapper=debug

log4j.logger.org.apache.shiro=debug

 

 

基本配置

         以上是一个精简的log4j配置文件,首先说明下一下log4j.rootLogger,这个属性可以看成是对整个配置文件的一种声明,之后配置的细节要么是在补充说明这个属性,要么是在扩展这个属性。其值的标准配置格式为:log4j.rootLogger = [ level ] , appenderName1, appenderName2, …配置文件中实际值info,console,fileinfo的意思是指定日志输出级别为info级别consolefile则是自己定义的appender的名字。但是appender到底是什么呢?要怎么理解这个appender

         我们知道log4j日志框架的作用就是能让我们进行细粒度的日志管理。 appender的概念我们可以把每一个appender看成是一套日志镜像,这套镜像的输出格式可以被随意定制。定义多少个appender就有多少个镜像。为什么我们需要多套镜像呢?最简单的实际情况,开发时我们需要日志打印在控制台,而项目上线后,我们需要日志存放到文件系统,用于我们运维。这不就是2套镜像么?

         理解了appender的概念后,我们回到配置文件本身。每个appender中,都有2个基本配置:输出目的地和输出格式(此配置文件里为便于理解,只做了基本配置)。

         先以红色字体的consoleappender的名字定义为console)这个appender的配置为例,第一个需要配置的是日志输出目的地,即控制台还是文件系统,其配置格式为:log4j.appender.appenderName = className

log4j.appender.console=org.apache.log4j.ConsoleAppender

注: consoleappender的名字,ConsoleAppender是指定输出到控制台

然后就是日志输出格式,其配置格式为:log4j.appender.appenderName.layout

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=%d %p - %m%n

注:表示console这个appender输出日志的格式为灵活指定布局格式,ConversionPattern指定了具体的输出格式

         再来看看蓝色字体的fileappender的名字定义为file)这个appender的配置。log4j.appender.file=org.apache.log4j.RollingFileAppender

注:指定file appender的输出目的地为RollingFileAppenderRollingFileAppender表示文件到达指定大小时,产生一个新的日志文件

log4j.appender.file.File=${MyProject.root}WEB-INF/logs/web.log

注:指定日志输出路径

log4j.appender.file.MaxFileSize=1MB

注:指定日志文件的大小

log4j.appender.file.MaxBackupIndex=10000

注:指定日志文件的最大个数,超过该个数会自动删除最旧的

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%d %p - %m%n

注:同colole,表示file这个appender输出日志的格式为灵活指定布局格式,ConversionPattern指定了具体的输出格式

 

进阶配置场景1:配置指定模块日志输出级别

         到这里,相信对log4j的配置有了基本了解。接下来说一说一些更精细的配置。先来说说上述配置文件中最后2行的意思。刚才已经说明过,log4j.rootLogger = info,console,file将所有的日志的输出格式配置infoinfo级别是不显示debug信息的,而我们开发的时候显然是需要debug信息的,那要怎么办呢?最简单粗暴的方法当然是,直接把输出级别改为debug?但是,那真的是我们想要的吗?我们现在开发会整合各种框架,就比如spring+mybatis+shiro,程序中时时刻刻都在和spring容器做交互,如果日志级别直接改成debug,会发生什么呢?大量spring的日志就会被打出来,日志太多有成了影响我们开发效率的问题。那我们自然就想到是不是可以开启某个具体模块的debug。是的,log4j是允许指定具体java包下面的输出级别,格式为:log4j.logger.包名 = [level],appender1, appender2...,上述示例配置文件中的最后2

log4j.logger.tect.luoyu.merchant.mapper=debug

注:开启mybatis的打印

log4j.logger.org.apache.shiro=debug

注:开始shiro的打印

看到log4j.logger.包名 = [level],appender1, appender2...这个配置有没有觉得跟上面配置log4j.rootLogger一样?没错实际上log4j.logger.包名是log4j.rootLogger的子类,在rootLogger里配置的appender会自动应用于log4j.logger.包名,这也是为什么上述配置没有再额外配置appender的原因,也就是说我们刚才已经配置了在控制台打印的console这个appenderfile appender,在增加log4j.logger.tect.luoyu.merchant.mapperlog4j.logger.org.apache.shiro=debug

2个子类配置的时候,他们打印的debug信息也会继承log4j.rootLoggerconsolefile的配置。

进阶配置场景2:logger不继承父loggerappender

         这个是上一个配置情况的更进一步配置,上面的配置中,说我们把mybatisshiro的相关debug信息打印到了全局日志输出中(父loggerappender)。但有时我们也会遇到这样的需求是,我们希望把mybatis或者shirodebug信息单独输出到某个指定文件,并且不输出到全局日志(父loggerappender)中。这种情况下我们需要用到的配置属性是:log4j.additivity,以shiro为例,我们需要把下面这一行

log4j.logger.org.apache.shiro=debug

改为:

log4j.logger.mobileLogger=debug,shiroLogger

log4j.additivity. shiroLogger =false

log4j.appender. shiroLogger =org.apache.log4j.DailyRollingFileAppender

log4j.appender. shiroLogger.layout=org.apache.log4j.PatternLayout

log4j.appender. shiroLogger.layout.ConversionPattern=%m%n

log4j.appender. shiroLogger.file=shiroLog.log

 

进阶配置场景3:为某个特定appender指定输出级别

需要用到的属性是log4j.appender.appenderName.Threshold = [Level],直接上配置用例:

 

### set log levels ### 

log4j.rootLogger = debug ,stdout,D,E 

 

### 输出到控制台 ### 

log4j.appender.stdout = org.apache.log4j.ConsoleAppender 

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 

log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n 

 

### 输出到日志文件 ### 

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 

log4j.appender.D.File = logs/log.log 

log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志 

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 

 

### 保存异常信息到单独文件 ### 

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 

log4j.appender.E.File = logs/error.log ## 异常日志文件名 

log4j.appender.E.Threshold = ERROR ## 只输出ERROR级别以上的日志

log4j.appender.E.layout = org.apache.log4j.PatternLayout 

log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 

进阶配置场景4:自定义logger

上述配置如果还不能完全满足你的要求,你希望把error信息就只输出到error.log,而不是errorerror级以上。那log4j提供的基本配置就无法完全满足你的要求了,需要在代码级别做更进一步的配置:自定义logger。本文不做详细解释,只给出参考示例:

 

log4j.properties

log4j.rootLogger=debug,stdout   

#Console appender   

log4j.appender.stdout=org.apache.log4j.ConsoleAppender   

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n   

#infofile   

log4j.logger.infofile = info,infofile    

log4j.appender.infofile =org.apache.log4j.DailyRollingFileAppender   

log4j.appender.infofile.layout=org.apache.log4j.PatternLayout   

log4j.appender.infofile.layout.ConversionPattern=%d %p [%c] - %m%n   

log4j.appender.infofile.File=info.log   

log4j.appender.infofile.DatePattern='.'yyyy-MM-dd'.log'   

#errorfile   

log4j.logger.errorfile = error,errorfile    

log4j.appender.errorfile =org.apache.log4j.DailyRollingFileAppender   

log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout   

log4j.appender.errorfile.layout.ConversionPattern=%d %p [%c] - %m%n   

log4j.appender.errorfile.File=error.log   

log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd'.log'   

java代码

public class Log4jDemo    
{   
    static Logger infoLogger = Logger.getLogger("infofile");   
    static Logger errorLogger = Logger.getLogger("errorfile");   
       
    public static void main(String[] args)    
    {   
        try   
        {   
            infoLogger.info("run division..");   
            int result = 7/0;   
        }   
        catch(ArithmeticException e)   
        {   
            errorLogger.error("Can not divide by zero");   
        }   
    }   
}  

 

常用基本配置属性速查

日志输出级别

输出目的地:

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

org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender
(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

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

org.apache.log4j.net.SMTPAppender (发送日志到指定邮件

org.apache.log4j.jdbc.JDBCAppender (应用于数据库

日志布局(Layout

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

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

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

 

分享到:
评论

相关推荐

    log4j配置和加载方法

    ### Log4j配置与加载方法详解 Log4j是一款由Apache出品的日志记录工具,它提供了灵活的日志级别控制和多样化的日志输出方式,广泛应用于Java应用的开发中。本文将深入解析log4j的配置与加载机制,帮助开发者更好地...

    Log4j配置说明.rar,Log4j配置说明.rar

    Log4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rar,Log4j配置,Log4j Log4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rarLog4j配置说明.rar,Log4j配置,Log4j

    log4j配置与使用方法

    ### log4j配置与使用方法 #### 一、log4j简介 log4j是Apache的一个开源项目,通过使用log4j,开发者能够控制日志信息的生成、等级以及输出的目的地。它允许用户根据不同的环境调整日志的级别,从而帮助开发者在...

    Log4j配置文件详细说明

    在`Log4j配置文件详细说明[转].htm`和`Log4j配置文件详细说明[转]_files`这两个文件中,应包含了更详细的实例和说明,可以帮助深入理解每个属性的实际作用和配置方法。在实践中,不断试验和调整,你会发现Log4j是一...

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

    Log4j 配置文件说明 Log4j 是一种流行的日志记录工具,用于记录和管理应用程序中的日志信息。配置文件是 Log4j 的核心组件之一,通过配置文件可以控制日志记录的级别、输出目的地和格式。在本文中,我们将详细介绍 ...

    Log4j配置实例

    **Log4j配置实例** Log4j是一款广泛使用的Java日志框架,它为应用程序提供了灵活的日志记录功能。本文将深入探讨Log4j的配置及其实际应用,帮助开发者更好地理解和利用这一工具。 **1. Log4j概述** Log4j是由...

    log4j配置使用,描述了log4j的配置实用

    ### log4j配置详解 #### 一、log4j简介 Log4j 是一个开源的日志记录工具,它允许开发者自定义日志级别并能够输出丰富的日志信息。本篇文章将详细解读 log4j 的基本配置及使用方法,非常适合初学者理解和掌握。 ##...

    tomcat下的log4j日志配置

    ### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...

    log4j配置使用说明及JAR包

    压缩包中的"**log4j配置说明及所需jar包**"包含了Log4j的库文件,包括`log4j.jar`和其他可能的依赖。确保将这些JAR包添加到项目的类路径(Classpath)中,这样你的程序才能正确识别并使用Log4j。 **四、代码示例** ...

    log4j配置

    Log4j的配置通常通过一个XML或properties格式的配置文件完成,例如`log4j.properties`或`log4j.xml`。以下是一个基本的`log4j.properties`配置示例: ```properties # 设置根日志器的级别为INFO log4j.rootLogger=...

    log4j配置文件

    完整的log4j配置文件

    log4j 配置mysql 数据库 demo

    在项目资源目录下创建`log4j.properties`配置文件,这是Log4j读取配置信息的地方。我们需要添加以下内容: ```properties # 设置根logger级别 log4j.rootLogger=DEBUG, DB # 配置DB Appender log4j.appender...

    log4j配置文件例子

    log4j配置文件例子,可以让你轻松配置log4j

    java程序log4j配置

    Java程序log4j配置详解 log4j是一个流行的Java日志记录工具,提供了灵活的日志记录和管理功能。在Java程序中,log4j配置正确是非常重要的,本文将详细介绍log4j配置的各个方面。 一、log4j配置文件 log4j的配置...

    Log4j配置文件

    ### Log4j配置文件详解 #### 一、概述 Log4j是一款开源的日志记录工具,广泛应用于Java应用程序中。其强大的配置灵活性使得开发者能够轻松地定制日志记录的细节,如日志级别、输出目的地及日志信息的格式等。本文...

    Log4J配置实例(xml格式)

    **Log4J配置实例(XML格式)** Log4J是一款广泛应用的日志记录框架,它为Java应用程序提供了灵活的日志记录功能。在Java开发中,日志记录是必不可少的一部分,可以帮助开发者跟踪程序运行状态,定位错误和调试代码...

    log4j配置及使用

    《深入理解log4j:配置与实践》 在Java开发中,日志记录是不可或缺的一部分,它帮助开发者追踪程序运行状态,定位问题。Log4j是Apache的一个开源项目,提供了一种灵活且强大的日志记录解决方案。然而,值得注意的是...

    一个Log4j配置文件,感觉还不错

    《深入理解Log4j配置文件》 在Java开发中,日志记录是不可或缺的一部分,而Log4j作为一款广泛使用的日志框架,以其强大的功能和灵活性深受开发者喜爱。本篇文章将详细探讨一个感觉还不错的Log4j配置文件,旨在帮助...

    常用log4j配置常用log4j配置

    本文将深入解析《常用log4j配置》中的关键知识点,包括配置文件的格式、基本配置项的含义及其应用场景。 ### 标题:常用log4j配置 #### 配置文件格式 Log4j支持多种配置文件格式,包括.properties和.xml,其中....

Global site tag (gtag.js) - Google Analytics