博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
log4j使用
阅读量:5265 次
发布时间:2019-06-14

本文共 5015 字,大约阅读时间需要 16 分钟。

                           

  类图镇楼

 

                          

 

 

1.先谈部署

  别怕,这可不是部署Tomcat。把log4j的包和commons-logging的包(加在一起才两个)放到classpath下面。然后把配置文件保存为log4j.properties,也放在classpath下面(如果用Eclipse的话,放在src目录下即可)。然后你就可以跑了。

 

2.再谈配置

  虽然可以用xml或者在运行时用Java来配置Log4j,但还是properties文件好用啊!

  样例:

#日志级别DEBUG,目的地consoleAppender1,这是根日志组件,经测试,mybatis的SQL输出收这个影响log4j.rootLogger=DEBUG,consoleAppender1,debugfile#--------------配置  输出对象的目的  格式 -----------------#目的地consoleAppender1输出到控制台log4j.appender.consoleAppender1=org.apache.log4j.ConsoleAppender#目的地consoleAppender1输出格式log4j.appender.consoleAppender1.layout=org.apache.log4j.PatternLayoutlog4j.appender.consoleAppender1.layout.ConversionPattern=%5p %d  %C: %m%n#debug 输出错误日志文件log4j.appender.errorfile=org.apache.log4j.RollingFileAppenderlog4j.appender.errorfile.File=${catalina.home}/logs/outside-error.log //${catalina.home} : tomcat服务器文件夹目录log4j.appender.errorfile.MaxFileSize=10240KB# Keep three backup files.log4j.appender.errorfile.MaxBackupIndex=3# Pattern to output: date priority [category] - messagelog4j.appender.errorfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.errorfile.layout.ConversionPattern=%d %p - %m%nlog4j.additivity.errorfile = false#debug 输出其他日志文件log4j.appender.debugfile=org.apache.log4j.RollingFileAppenderlog4j.appender.debugfile.File=${catalina.home}/logs/outside-debug.loglog4j.appender.debugfile.MaxFileSize=10240KB# Keep three backup files.log4j.appender.debugfile.MaxBackupIndex=10# Pattern to output: date priority [category] - messagelog4j.appender.debugfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.debugfile.layout.ConversionPattern=%d %p - %m%nlog4j.additivity.debugfile = false#--------------配置  具体内容输出到  输出对象------------------------------#日志级别DEBUG,目的地consoleAppender2,和debugfilelog4j.logger.service=DEBUG,debugfile#spring统一异常处理,日志级别ERROE,目的地consoleAppender2,和errorfilelog4j.logger.util.web.CustomSimpleMappingExceptionResolver=info,errorfile#spring统一异常处理,日志级别ERROE,目的地consoleAppender2,和errorfilelog4j.logger.util.web.ExceptionAdvisor=info,errorfile#mongodb,日志级别DEBUG,目的地consoleAppender1,和debugfilelog4j.logger.common.mongodb.service.FileOptService=DEBUG,consoleAppender1,debugfile#指定SQL 输出#log4j.logger.java.sql.ResultSet=INFO,consoleAppender1log4j.logger.org.apache=ERROR,errorfile#log4j.logger.java.sql.Connection=DEBUG,debugfile#log4j.logger.java.sql.Statement=DEBUG,consoleAppender2#log4j.logger.java.sql.PreparedStatement=DEBUG,debugfile#输出sql到文件#处理Spring,mybatis错误级别日志的写到异常文件log4j.logger.org.springframework=ERROR,errorfilelog4j.logger.org.mybatis=ERROR,errorfile#cxflog4j.logger.org.apache.cxf=info,consoleAppender1,debugfile#不附加,作用就是 避免重复打印log4j.additivity.controller=falselog4j.additivity.service=falselog4j.additivity.dao=falselog4j.additivity.org.apache.cxf=falselog4j.additivity.common.mongodb.service.FileOptService=false

 

  配置分析:

  1>. 最最重要的两个概念:Logger(继承层次)和Appender(输出控制);

  2>. rootLogger 总是存在于log4j中,即使没有显示配置也是存在的,并且默认输出级别为DEBUG;

  3>. ConsoleAppender 输出到控制台;RollingFileAppender 输出到指定路径下的文件中;两者为log4j中的类,都实现了Appender类;

  4>. File,MaxBackupIndex(保留文件数量),layout,MaxFileSize 皆为设置的属性;

  5>. additivity 限制appender的叠加性,使同一输出不至于多次输出;

  6>. logger 为 rootLogger 的子集,可以自定义子集的输出级别。

  7>.输出级别越低,输出的数量更多;级别更高,就不会输出低级别的日志;

 

  日志级别:

    TRACE->DEBUG-> INFO-> WARN->ERROR->FATAL

 

  图一:

  log4j使用手册介绍

 

  图二:

  

 

  输出格式:

    

 

 

3.谈下思想

  思想:Log4j真的很简单,简单到令人发指的地步。不是要记录日志吗?那就给你一个Log,然后你用Log来写东西就行了;

 

  Log.class中输出级别对应的方法

    

 

  样例

package test;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class Test {        static Log log = LogFactory.getLog(Test.class);//这里的“Test.class”事实上传进去的是Test这个类的完整路径(包名+类名),“test.Test” 这样如果存在“test”这个Log那么Test这个Log就继承它,否则就继承rootLogger        public void log(){           log.debug("Debug info.");           log.info("Info info");           log.warn("Warn info");           log.error("Error info");           log.fatal("Fatal info");        }        /**         * @param args         */        public static void main(String[] args) {           Test test = new Test();           test.log();        }}

 

  

 

4.默认的log4j初始化过程

  Logger类的静态初始化块(static initialization block)中对log4j的环境做默认的初始化。

  如果程序员已经通过设置系统属性的方法来配置了log4j环境,则不需要再显式地调用XXXConfigurator.configure()方法来配置log4j环境了。

 

  Logger的静态初始化块在完成初始化过程时将检查一系列log4j定义的系统属性。它所做的事情如下:

    1>. 检查系统属性log4j.defaultInitOverride,如果该属性被设置为false,则执行初始化;否则(只要不是false,无论是什么值,甚至没有值,都是否则),跳过初始化。

    2>. 把系统属性log4j.configuration的值赋给变量resource。如果该系统变量没有被定义,则把resource赋值为"log4j.properties"。注意:在apache的log4j文档中建议使用定义log4j.configuration系统属性的方法来设置默认的初始化文件是一个好方法。

    3>. 试图把resource变量转化成为一个URL对象url。如果一般的转化方法行不通,就调用org.apache.log4j.helpers.Loader.getResource(resource, Logger.class)方法来完成转化。

    4>. 如果url以".xml"结尾,则调用方法DOMConfigurator.configure(url)来完成初始化;否则,则调用方法PropertyConfigurator.configure(url)来完成初始化。如果url指定的资源不能被获得,则跳出初始化过程。

 

 5.Logger 两点说明

  1>. 用同名参数调用Logger.getLogger(String name)将返回同一个logger的引用。故可以在一个地方配置logger,在另外一个地方获得配置好的logger,而无须相互间传递logger的引用。

  2>. logger的创建可以按照任意的顺序,即,父logger可以后于子logger被创建。log4j将自动维护logger的继承树。

 

 

参考资料:

1>.  

2>.  

3>.  

转载于:https://www.cnblogs.com/springlight/p/5957122.html

你可能感兴趣的文章
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
卷积中的参数
查看>>
51nod1076 (边双连通)
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
2019春 软件工程实践 助教总结
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
java实现哈弗曼树
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
python常用模块之sys, os, random
查看>>