`
fogiguiuu
  • 浏览: 31053 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

commons-logging + log4j 了解与配置

    博客分类:
  • util
阅读更多

在很简单的情况下,一般通过System.out 来打印程序运行时的信息,在稍复杂点或正式运营的程序中我们往往需要个功能强大的可管理的日志系统。

 

commons-logging为日志实现提供一个统一的接口,它自身的日志功能比较弱,所以一般不会单独使用它。

 

commons-logging主要提供了一个Log接口,一个产生Log的LogFactory。

日志信息的优先级从低到高有,trace (the least serious),debug,info,warn,error,fatal。

 

SimpleLog是Log的一个简单实现,输出日志也只有System.err。

一. 简单使用commons-logging中SimpleLog的情况,简单配置优先级。

1.导入commons-logging包。

 

2.获得Log。

private static Log logger = LogFactory.getLog(Deal2.class);

这里Deal2为类名,传入此类的Class对象只为了个Log赋个名字。

LogFactory内部的默认实现为impl包中的LogFactoryImpl类。

在获得Log对象时根据以下数组获得:

package org.apache.commons.logging.impl;
......
private static final String[] classesToDiscover = {
            LOGGING_IMPL_LOG4J_LOGGER,
            "org.apache.commons.logging.impl.Jdk14Logger",
            "org.apache.commons.logging.impl.Jdk13LumberjackLogger",
            "org.apache.commons.logging.impl.SimpleLog"
    };
 

LOGGING_IMPL_LOG4J_LOGGER值为org.apache.commons.logging.impl.Log4JLogger

Log4JLogger类中含有变量org.apache.log4j.Logger,也就是说若commons-logging.properties配置文件中未指定Log实现类,你又导入了log4j包则返回Log4jLogger日志记录对象,若没导入log4j包跳到下一个Log实现。

这就实现了commons-logging与Log4j的融合

 

3.配置commons-logging.properties,simplelog.properties文件

 commons-logging.properties文件中指定Log实现类为SimpleLog:

 org.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog

 

 simplelog.properties中设定优先级:

 org.apache.commons.logging.simplelog.defaultlog = debug

 

 这里优先级比debug低的trace将不会打印出来。

 两个文件放到classpath的根目录。

 

4.在方法中打印信息

        logger.trace("trace log--------");
        logger.debug("debug log----------");
        logger.info("info log----------");

 

二.log4j使用

 

转自:http://kdboy.iteye.com/blog/208851 写的很详细

 

一、介绍
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接 口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、 WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。

二、配置文件
其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件。下面我们介绍使用properties格式做为配置文件的方法:
示例:
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

1. 配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

2. 配置日志信息输出目的地Appender,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
(1).ConsoleAppender选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
(2).FileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
(3).DailyRollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern=’.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
  1)’.'yyyy-MM: 每月
  2)’.'yyyy-ww: 每周
  3)’.'yyyy-MM-dd: 每天
  4)’.'yyyy-MM-dd-a: 每天两次
  5)’.'yyyy-MM-dd-HH: 每小时
  6)’.'yyyy-MM-dd-HH-mm: 每分钟
(4).RollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

3. 配置日志信息的布局,其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

4、输出格式设置
在配置文件中可以通过log4j.appender.A1.layout.ConversionPattern设置日志输出格式。
参数:
%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字符,就从左边交远销出的字符截掉。

三、在程序中的使用
在程序中使用Log4j之前,首先要将commons-logging.jar和logging-log4j-1.2.9.jar导入到classpath中,并将log4j.properties放于src根目录中。接下来就可以使用了。

1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static Logger getLogger( String name),
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;
注:推荐使用commons-logging结合log4j进行日志记录
private static Log logger = LogFactory.getLog(Yourclass.class);


2.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;

四、Log4j比较全面的配置
LOG4J的配置之简单使它遍及于越来越多的应用中了:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。

Java代码
  1. log4j.rootLogger=DEBUG,CONSOLE,A1,im  
  2. log4j.addivity.org.apache=true   
  3. # 应用于控制台  
  4. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.Threshold=DEBUG  
  6. log4j.appender.CONSOLE.Target=System.out  
  7. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
  8. log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
  9. #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%n  
  10. #应用于文件  
  11. log4j.appender.FILE=org.apache.log4j.FileAppender  
  12. log4j.appender.FILE.File=file.log  
  13. log4j.appender.FILE.Append=false   
  14. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
  15. log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
  16. # Use this  layout  for  LogFactor  5  analysis  
  17. # 应用于文件回滚  
  18. log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender  
  19. log4j.appender.ROLLING_FILE.Threshold=ERROR  
  20. log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log   
  21. log4j.appender.ROLLING_FILE.Append=true   //true:添加 false:覆盖   
  22. log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸   
  23. log4j.appender.ROLLING_FILE.MaxBackupIndex=1   //备份数   
  24. log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout  
  25. log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
  26.   
  27. #应用于socket  
  28. log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender  
  29. log4j.appender.SOCKET.RemoteHost=localhost  
  30. log4j.appender.SOCKET.Port=5001   
  31. log4j.appender.SOCKET.LocationInfo=true   
  32. # Set up for  Log Facter  5   
  33. log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout  
  34. log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n  
  35.   
  36. # Log Factor 5  Appender  
  37. log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender  
  38. log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000   
  39. # 发送日志给邮件  
  40. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender  
  41. log4j.appender.MAIL.Threshold=FATAL  
  42. log4j.appender.MAIL.BufferSize=10   
  43. log4j.appender.MAIL.From=web@www .wuset.com  
  44. log4j.appender.MAIL.SMTPHost=www.wusetu.com  
  45. log4j.appender.MAIL.Subject=Log4J Message  
  46. log4j.appender.MAIL.To=web@www .wusetu.com  
  47. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout  
  48. log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
  49. # 用于数据库  
  50. log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender  
  51. log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test   
  52. log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver  
  53. log4j.appender.DATABASE.user=root  
  54. log4j.appender.DATABASE.password=  
  55. log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (’[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n’)  
  56. log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout  
  57. log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n  
  58.   
  59. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender  
  60. log4j.appender.A1.File=SampleMessages.log4j  
  61. log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’  
  62. log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout  
  63. #自定义Appender  
  64. log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender  
  65. log4j.appender.im.host = mail.cybercorlin.net  
  66. log4j.appender.im.username = username  
  67. log4j.appender.im.password = password  
  68. log4j.appender.im.recipient = corlin@cybercorlin .net  
  69. log4j.appender.im.layout=org.apache.log4j.PatternLayout  
  70. log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
分享到:
评论

相关推荐

    (zt)Commons-logging + Log4j 入门指南

    《Commons-Logging + Log4j 入门...总之,Commons-Logging与Log4j的组合提供了强大且灵活的日志解决方案,能够满足各种规模和类型的Java应用的需求。正确理解和使用这两个工具,将大大提升你的开发效率和问题排查能力。

    Commons-logging + Log4j 使用

    `commons-logging`会自动检测并选择可用的日志实现,优先级通常是:已配置的`commons-logging.properties`、系统环境变量`org.apache.commons.logging.Log`、`log4j`库、JDK内置日志、最后是`commons-logging`自带的...

    日志框架学习之一:commons-logging+log4j

    1. **安装与配置**:介绍如何在项目中引入commons-logging和log4j的依赖,并设置相应的配置文件,如log4j.properties或log4j.xml。 2. **使用API**:讲解如何在代码中通过commons-logging接口来调用log4j的记录方法...

    apache-log4j-2.3-bin和commons-logging-1.2

    Apache Log4j 2.3 和 Commons Logging 1.2 是两个在Java Web开发中广泛使用的日志处理库。这两个库对于记录应用程序的运行时信息、调试错误和监控系统状态至关重要。 **Apache Log4j 2.3** Log4j 是 Apache 组织...

    commons-logging和Log4j的关系

    在实际应用中,如果你的项目引用了Commons Logging,那么你可以通过配置来选择使用Log4j作为底层的日志处理工具。这样做的好处在于,即使你想更换日志系统,只需更改配置,而无需修改代码,这提高了项目的可维护性...

    log4j.jar和commons-logging.jar

    由于commons-logging的存在,你无需直接使用log4j的类,而是通过`java.util.logging.Logger`的接口来实现日志记录,commons-logging会自动找到log4j作为底层实现。 总之,log4j.jar和commons-logging.jar是Java开发...

    commons-logging-1.2-bin.zip下载

    Commons Logging 提供了一组接口和辅助类,使得应用程序可以透明地使用任何兼容的日志实现,如Log4j、Java内置的日志API(java.util.logging)或者简单的控制台输出。这个库的主要优点是灵活性和可插拔性,开发者...

    commons-dbcp-2-2.50+commons-pool2-2.6.0+commons-logging-1.2

    - Commons Logging是一个轻量级的日志记录API,允许开发者在不修改代码的情况下切换不同的日志实现,如Log4j、Java Util Logging或SLF4J。 - 版本 1.2 是一个稳定版本,虽然较旧但广泛兼容,为各种Java项目提供...

    commons-logging-1.1.3.jar

    用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的...

    commons-logging-1.2_commonslogging_

    2. 配置日志实现,可以通过设置`java.util.logging.config.file`、`log4j.configuration`等系统属性,或者在类路径下放置适当的配置文件(如log4j.properties)。 3. 在代码中获取并使用Logger,如`Logger logger = ...

    commons-logging.jar log4j.jar

    "commons-logging.jar" 和 "log4j.jar" 是两个广泛使用的Java日志框架,它们在Java应用开发中扮演着至关重要的角色。 **commons-logging.jar** 是Apache Commons Logging库,它提供了一个统一的日志接口,允许...

    log4j-1.2.14和commons-logging-1.1

    为了使两者协同工作,需要确保在项目的类路径中正确包含这两个库,并且在Commons Logging的配置中指定使用Log4j。这可以通过设置系统属性`org.apache.commons.logging.Log`为`org.apache.log4j.Logger`来实现。 总...

    commons-logging-1.1.1

    Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog?...另外一个我能想到的“同时使用commons-logging和Log4j”的原因是,简化使用和配置

    log4j.jar\commons-logging-1.1.1.jar

    log4j日志包 log4j.jar\commons-logging-1.1.1.jar private static final Log log = LogFactory.getLog(xxxxxx.class); 下载后解压就能得到这两个包

    slf4j+logback 于log4j+commons-logging大PK

    今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...

    commons-logging-1.2.jar

    这个库允许开发者选择底层的日志实现,如Log4j、Java内置的日志API(java.util.logging)或者其他第三方日志系统,而无需修改代码。它的核心概念是提供一种抽象,使得应用代码与特定的日志实现解耦,从而增强了灵活...

    log4j与commons-logging-1.0.4.jar

    在提供的压缩文件`log4j与commenlog`中,可能包含了Log4j的相关配置文件和Commons Logging的JAR包,这使得开发者可以直接在项目中使用这两个库。通过这样的集成,开发者可以轻松地实现日志记录,同时保持系统的可...

    commons-logging-1.2.JAR开源包

    Apache Commons Logging,简称为Commons Logging,是Apache软件基金会开发的一个开源日志框架,主要用于提供一个统一的日志API,让开发者能够在不改变代码的情况下,自由切换不同的日志实现库,如Log4j、Java内置的...

    commons-logging-1.0.4.jar 免费下载

    Spring 框架广泛使用 Commons Logging 进行日志记录,因为它允许 Spring 与多种日志实现(如 log4j、java.util.logging 或 logback)无缝集成。 描述中提到的 "java spring 中打印信息的jar包" 指的是 Commons ...

Global site tag (gtag.js) - Google Analytics