java 日志体系(三)log4j从入门到详解

一、Log4j 简介

在应用程序中添加日志记录总的来说基于三个目的:

  • 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;
  • 跟踪代码运行时轨迹,作为日后审计的依据;
  • 担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。

在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache 为我们提供了一个强有力的日志操作包 Log4j。

官方站点:http://logging.apache.org/log4j/1.2/manual.html

Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

此外,通过 Log4j 其他语言接口,您可以在 C、C+ +、.Net、PL/SQL 程序中使用 Log4j,其语法和用法与在 Java 程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将 Log4j 集成到 J2EE、JINI 甚至是 SNMP 应用中。

二、简单使用

(1) 引入 maven 依赖

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.17</version>
  5. </dependency>

(2) 使用

  1. @Test
  2. public void test() {
  3. Logger logger = Logger.getLogger(Log4jTest1.class);
  4. logger.debug("log4j log");
  5. }

(3) 编写配置文件

在类路径下(src 文件夹下)创建 log4j.properties 文件,配置文件 log4j.properties 内容如下:

  1. log4j.rootLogger=INFO, stdout
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.Target=System.out
  4. log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout

(4) 输出结果

  1. [main] INFO com.github.binarylei.log4j.Log4jTest1 - log4j log

三、Log4j 构成

通过配置文件可知,我们需要配置 3 个方面的内容:

  1. 根目录(级别和目的地);
  2. 目的地(控制台、文件等等);
  3. 输出样式。

下面我们来看看 Log4J 的类图:

  • Logger - 日志写出器,供程序员输出日志信息
  • Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去
    • ConsoleAppender - 目的地为控制台的 Appender
    • FileAppender - 目的地为文件的 Appender
    • RollingFileAppender - 目的地为大小受限的文件的 Appender
  • Layout - 日志格式化器,用来把程序员的 logging request 格式化成字符串
    • PatternLayout - 用指定的 pattern 格式化 logging request 的 Layout

四、Log4j 使用方法

Log4j 由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有 ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

4.1 properties 配置文件详解

其实您也可以完全不使用配置文件,而是在代码中配置 Log4 j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j 支持两种配置文件格式,Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是 properties(key=value)文件。下面我们介绍使用 properties 文件做为配置文件的方法:

4.1.1 配置根 Logger

  1. log4j.rootLogger = level,appenderName1,appenderName2

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

4.1.2 配置日志信息输出目的地 Appender

  1. log4j.appender.appenderName = Log4j提供的appender
  2. log4j.appender.appenderName.属性名 = 属性值
  3. log4j.appender.appenderName.属性名 = 属性值

其中,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:指定可以产生的滚动文件的最大数。

4.1.3 配置日志信息的格式(布局)

  1. log4j.appender.appenderName.layout = Log4j提供的layout
  2. log4j.appender.appenderName.layout.属性 =
  3. log4j.appender.appenderName.layout.属性 =

其中,Log4j 提供的 layout 有以下几种:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

1) HTMLLayout选项

LocationInfo=true:默认值是false,输出java文件名称和行号

Title=my app file: 默认值是 Log4J Log Messages.

2) PatternLayout选项

ConversionPattern=%m%n :指定怎样格式化指定的消息。

3) XMLLayout选项

LocationInfo=true:默认值是 false,输出 java 文件和行号

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

og4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n

这里需要说明的就是日志信息格式中几个符号所代表的含义:

-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字符,就从左边交远销出的字符截掉

4.2 XML 配置文件详解

xml格式的log4j配置文件需要使用org.apache.log4j.html.DOMConfigurator.configure()方法来读入。对xml文件的语法定义可以在log4j的发布包中找到:org/apache/log4j/xml/log4j.dtd。

log4j的xml配置文件的树状结构如下所示,注意下图只显示了常用的部分。

  1. xml declaration and dtd
  2. |
  3. log4j:configuration
  4. |
  5. +-- appender (name, class)
  6. | |
  7. | +-- param (name, value)
  8. | +-- layout (class)
  9. | |
  10. | +-- param (name, value)
  11. +-- logger (name, additivity)
  12. | |
  13. | +-- level (class, value)
  14. | | |
  15. | | +-- param (name, value)
  16. | +-- appender-ref (ref)
  17. +-- root
  18. |
  19. +-- param (name, class)
  20. +-- level
  21. | |
  22. | +-- param (name, value)
  23. +-- appender-ref (ref)

xml 配置文件的头部包括两个部分:xml 声明和 dtd 声明,不多介绍。头部的格式如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  1. log4j:configuration (root element)
  2. xmlns:log4j [#FIXED attribute]
  3. 定义log4j的名字空间,取定值"http://jakarta.apache.org/log4j/"
  4. appender [* child] : 一个appender子元素定义一个日志输出目的地
  5. logger [* child] : 一个logger子元素定义一个日志写出器
  6. root [? child] : root子元素定义了root logger
  1. appender元素定义一个日志输出目的地。
  2. name [#REQUIRED attribute] : 定义appender的名字,以便被后文引用
  3. class [#REQUIRED attribute] : 定义appender对象所属的类的全名
  4. param [* child] : 创建appender对象时传递给类构造方法的参数
  5. layout [? child] : appender使用的layout对象
  1. layout元素定义与某一个appender相联系的日志格式化器。
  2. class [#REQUIRED attribute] : 定义layout对象所属的类的全名
  3. param [* child] : 创建layout对象时传递给类构造方法的参数
  1. logger元素定义一个日志输出器。
  2. name [#REQUIRED attribute] : 定义logger的名字,以便被后文引用
  3. additivity [#ENUM attribute] : 取值为"true"(默认)或者"false",是否继承父logger的属性
  4. level [? child] : 定义该logger的日志级别
  5. appender-ref [* child] : 定义该logger的输出目的地
  1. root元素定义根日志输出器root logger
  2. param [* child] : 创建root logger对象时传递给类构造方法的参数
  3. level [? child] : 定义root logger的日志级别
  4. appender-ref [* child] : 定义root logger的输出目的地
  1. level元素定义logger对象的日志级别。
  2. class [#IMPLIED attribute] : 定义level对象所属的类,默认情况下是"org.apache.log4j.Level类
  3. value [#REQUIRED attribute] : 为level对象赋值。可能的取值从小到大依次为"all"、"debug"、"info"、"warn"、"error"、"fatal"和"off"。当值为"off"时表示没有任何日志信息被输出
  4. param [* child] : 创建level对象时传递给类构造方法的参数
  1. appender-ref元素引用一个appender元素的名字,为logger对象增加一个appender
  2. ref [#REQUIRED attribute] : 一个appender元素的名字的引用
  3. appender-ref元素没有子元素
  1. param元素在创建对象时为类的构造方法提供参数。
  2. 它可以成为appenderlayoutfiltererrorHandlerlevelcategoryFactoryroot等元素的子元素。
  3. name and value [#REQUIRED attributes] : 提供参数的一组名值对
  4. param元素没有子元素

在 xml 文件中配置 appender 和 layout

创建不同的 Appender 对象或者不同的 Layout 对象要调用不同的构造方法。可以使用 param 子元素来设定不同的参数值。

创建 ConsoleAppender 对象

ConsoleAppender 的构造方法不接受其它的参数。

  1. <appender name="console.log" class="org.apache.log4j.ConsoleAppender">
  2. <layout ... >
  3. ... ...
  4. </layout>
  5. </appender>

创建FileAppender对象

可以为FileAppender类的构造方法传递两个参数:File表示日志文件名;Append表示如文件已存在,是否把日志追加到文件尾部,可能取值为"true"和"false"(默认)。

  1. <appender name="file.log" class="org.apache.log4j.FileAppender">
  2. <param name="File" value="/tmp/log.txt" />
  3. <param name="Append" value="false" />
  4. <layout ... >
  5. ... ...
  6. </layout>
  7. </appender>

创建RollingFileAppender对象

除了File和Append以外,还可以为RollingFileAppender类的构造方法传递两个参数:MaxBackupIndex备份日志文件的个数(默认是1个);MaxFileSize表示日志文件允许的最大字节数(默认是10M)。 :.

  1. <appender
  2. name="rollingFile.log" class="org.apache.log4j.RollingFileAppender">
  3. <param name="File" value="/tmp/rollingLog.txt" />
  4. <param name="Append" value="false" />
  5. <param name="MaxBackupIndex" value="2" />
  6. <param name="MaxFileSize" value="1024" />
  7. <layout ... >
  8. ... ...
  9. </layout>
  10. </appender>

创建PatternLayout对象

可以为PatternLayout类的构造方法传递参数ConversionPattern。 :.

  1. <layout class="org.apache.log4j.PatternLayout">
  2. <param name="Conversion" value="%d [%t] %p - %m%n" />
  3. </layout>

4.3 properties比较详细的例子

  1. log4j.rootLogger=INFO,consoleAppender,logfile,MAIL
  2. log4j.addivity.org.apache=true
  3. #ConsoleAppender,控制台输出
  4. #FileAppender,文件日志输出
  5. #SMTPAppender,发邮件输出日志
  6. #SocketAppender,Socket日志
  7. #NTEventLogAppender,Window NT日志
  8. #SyslogAppender,
  9. #JMSAppender,
  10. #AsyncAppender,
  11. #NullAppender
  12. #文件输出:RollingFileAppender
  13. #log4j.rootLogger = INFO,logfile
  14. log4j.appender.logfile = org.apache.log4j.RollingFileAppender
  15. log4j.appender.logfile.Threshold = INFO
  16. # 输出以上的INFO信息
  17. log4j.appender.logfile.File = INFO_log.html
  18. #保存log文件路径
  19. log4j.appender.logfile.Append = true
  20. # 默认为true,添加到末尾,false在每次启动时进行覆盖
  21. log4j.appender.logfile.MaxFileSize = 1MB
  22. # 一个log文件的大小,超过这个大小就又会生成1个日志 # KB ,MB,GB
  23. log4j.appender.logfile.MaxBackupIndex = 3
  24. # 最多保存3个文件备份
  25. log4j.appender.logfile.layout = org.apache.log4j.HTMLLayout
  26. # 输出文件的格式
  27. log4j.appender.logfile.layout.LocationInfo = true
  28. #是否显示类名和行数
  29. log4j.appender.logfile.layout.Title =title:\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef
  30. #html页面的 < title >
  31. ############################## SampleLayout ####################################
  32. # log4j.appender.logfile.layout = org.apache.log4j.SampleLayout
  33. ############################## PatternLayout ###################################
  34. # log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
  35. # log4j.appender.logfile.layout.ConversionPattern =% d % p [ % c] - % m % n % d
  36. ############################## XMLLayout #######################################
  37. # log4j.appender.logfile.layout = org.apache.log4j.XMLLayout
  38. # log4j.appender.logfile.layout.LocationInfo = true #是否显示类名和行数
  39. ############################## TTCCLayout ######################################
  40. # log4j.appender.logfile.layout = org.apache.log4j.TTCCLayout
  41. # log4j.appender.logfile.layout.DateFormat = ISO8601
  42. #NULL, RELATIVE, ABSOLUTE, DATE or ISO8601.
  43. # log4j.appender.logfile.layout.TimeZoneID = GMT - 8 : 00
  44. # log4j.appender.logfile.layout.CategoryPrefixing = false ##默认为true 打印类别名
  45. # log4j.appender.logfile.layout.ContextPrinting = false ##默认为true 打印上下文信息
  46. # log4j.appender.logfile.layout.ThreadPrinting = false ##默认为true 打印线程名
  47. # 打印信息如下:
  48. #2007 - 09 - 13 14 : 45 : 39 , 765 [http - 8080 - 1 ] ERROR com.poxool.test.test - error成功关闭链接
  49. ###############################################################################
  50. #每天文件的输出:DailyRollingFileAppender
  51. #log4j.rootLogger = INFO,errorlogfile
  52. log4j.appender.errorlogfile = org.apache.log4j.DailyRollingFileAppender
  53. log4j.appender.errorlogfile.Threshold = ERROR
  54. log4j.appender.errorlogfile.File = ../logs/ERROR_log
  55. log4j.appender.errorlogfile.Append = true
  56. #默认为true,添加到末尾,false在每次启动时进行覆盖
  57. log4j.appender.errorlogfile.ImmediateFlush = true
  58. #直接输出,不进行缓存
  59. # ' . ' yyyy - MM: 每个月更新一个log日志
  60. # ' . ' yyyy - ww: 每个星期更新一个log日志
  61. # ' . ' yyyy - MM - dd: 每天更新一个log日志
  62. # ' . ' yyyy - MM - dd - a: 每天的午夜和正午更新一个log日志
  63. # ' . ' yyyy - MM - dd - HH: 每小时更新一个log日志
  64. # ' . ' yyyy - MM - dd - HH - mm: 每分钟更新一个log日志
  65. log4j.appender.errorlogfile.DatePattern = ' . ' yyyy - MM - dd ' .log '
  66. #文件名称的格式
  67. log4j.appender.errorlogfile.layout = org.apache.log4j.PatternLayout
  68. log4j.appender.errorlogfile.layout.ConversionPattern =%d %p [ %c] - %m %n %d
  69. #控制台输出:
  70. #log4j.rootLogger = INFO,consoleAppender
  71. log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
  72. log4j.appender.consoleAppender.Threshold = ERROR
  73. log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
  74. log4j.appender.consoleAppender.layout.ConversionPattern =%d %-5p %m %n
  75. log4j.appender.consoleAppender.ImmediateFlush = true
  76. # 直接输出,不进行缓存
  77. log4j.appender.consoleAppender.Target = System.err
  78. # 默认是System.out方式输出
  79. #发送邮件:SMTPAppender
  80. #log4j.rootLogger = INFO,MAIL
  81. log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender
  82. log4j.appender.MAIL.Threshold = INFO
  83. log4j.appender.MAIL.BufferSize = 10
  84. log4j.appender.MAIL.From = yourmail@gmail.com
  85. log4j.appender.MAIL.SMTPHost = smtp.gmail.com
  86. log4j.appender.MAIL.Subject = Log4J Message
  87. log4j.appender.MAIL.To = yourmail@gmail.com
  88. log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout
  89. log4j.appender.MAIL.layout.ConversionPattern =%d - %c -%-4r [%t] %-5p %c %x - %m %n
  90. #数据库:JDBCAppender
  91. log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender
  92. log4j.appender.DATABASE.URL = jdbc:oracle:thin:@ 210.51 . 173.94 : 1521 :YDB
  93. log4j.appender.DATABASE.driver = oracle.jdbc.driver.OracleDriver
  94. log4j.appender.DATABASE.user = ydbuser
  95. log4j.appender.DATABASE.password = ydbuser
  96. log4j.appender.DATABASE.sql = INSERT INTO A1 (TITLE3) VALUES ( ' %d - %c %-5p %c %x - %m%n ' )
  97. log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout
  98. log4j.appender.DATABASE.layout.ConversionPattern =% d - % c -%- 4r [ % t] %- 5p % c % x - % m % n
  99. #数据库的链接会有问题,可以重写org.apache.log4j.jdbc.JDBCAppender的getConnection() 使用数据库链接池去得链接,可以避免insert一条就链接一次数据库

4.4 在代码中使用 Log4j

  1. 得到记录器

使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

  1. public static Logger getLogger( String name)
  1. 读取配置文件

当获得了日志记录器之后,第二步将配置 Log4j 环境,其语法为:

  1. BasicConfigurator.configure(): 自动快速地使用缺省 Log4j 环境。
  2. PropertyConfigurator.configure(String configFilename) :读取使用 Java 的特性文件编写的配置文件。
  3. DOMConfigurator.configure(String filename) :读取XML形式的配置文件。

4.5 注意事项

Logger 的命名规则

Logger 由一个 String 类的名字识别,logger 的名字是大小写敏感的,且名字之间具有继承的关系,子名有父名作为前缀,用点号.分隔。如:x.y 是 x.y.z 的父亲。

五、Properties 文件实例说明

文件内容如下:

  1. log4j.rootCategory=INFO, stdout , R
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
  5. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
  6. log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log
  7. log4j.appender.R.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
  9. log4j.logger.com.neusoft=DEBUG
  10. log4j.logger.com.opensymphony.oscache=ERROR
  11. log4j.logger.net.sf.navigator=ERROR
  12. log4j.logger.org.apache.commons=ERROR
  13. log4j.logger.org.apache.struts=WARN
  14. log4j.logger.org.displaytag=ERROR
  15. log4j.logger.org.springframework=DEBUG
  16. log4j.logger.com.ibatis.db=WARN
  17. log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
  18. log4j.logger.org.hibernate=DEBUG
  19. log4j.logger.org.logicalcobwebs=WARN

转载自《log4j 从入门到详解》


每天用心记录一点点。内容也许不重要,但习惯很重要!

java 日志体系(三)log4j从入门到详解的更多相关文章

  1. java日志 -logback的使用和logback.xml详解(转)

    一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两 ...

  2. java 日志体系目录

    java 日志体系目录 1.1 java 日志体系(一)log4j1.log4j2.logback.jul.jcl.slf4j 1.2 java 日志体系(二)jcl 和 slf4j 2.1 java ...

  3. java 日志体系(四)log4j 源码分析

    java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...

  4. Java学习笔记(十九)——Java 日志记录 AND log4j

    [前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...

  5. Java 日志体系(二)jcl 和 slf4j

    Java 日志体系(二)jcl 和 slf4j <java 日志体系(一)统一日志>:https://www.cnblogs.com/binarylei/p/9828166.html &l ...

  6. Java 日志体系

    Java 日志体系 <java 日志和 SLF4J 随想>:http://ifeve.com/java-slf4j-think/ 一.常用的日志组件 名称 jar 描述 log4j log ...

  7. 混乱的 Java 日志体系

    混乱的 Java 日志体系 2016/09/10 | 分类: 基础技术 | 0 条评论 | 标签: LOG 分享到: 原文出处: xirong 一.困扰的疑惑 目前的日志框架有 jdk 自带的 log ...

  8. java日志体系的思考(转)

    Java 日志缓存机制的实现 Java 日志管理最佳实践 混乱的 Java 日志体系 log日志远程统一记录 浅谈后端日志系统 Java异常处理和接口约定 用SLF4j/Logback打印日志-1 用 ...

  9. Java日志体系居然这么复杂?——架构篇

    本文是一个系列,欢迎关注 日志到底是何方神圣?为什么要使用日志框架? 想必大家都有过使用System.out来进行输出调试,开发开发环境下这样做当然很方便,但是线上这样做就有麻烦了: 系统一直运行,输 ...

随机推荐

  1. OGG-01091 Unable to open file "./dirdat/cs001481" (error 2, No such file or directory)

    记一次ogg报错ogg-01091的处理过程 现场有一套RAC数据库的服务器异常重启,其中一个节点上部署了OGG,机器开机之后,发现OGG所有应用进程abended状态,查看日志,发现报错如下图: 分 ...

  2. signalR客户端调用服务端方法失败

    现象: 在VS中修改集线器代码后,重新生成解决方案,客户端js调用服务端方法提示undefined. 检查后台代码未发现错误. 检查js代码未发现错误(方法名称符合小驼峰规范). 解决方法: 先清理解 ...

  3. mybatis学习 -每天一记 通用mapper 关于UUID回显的配置

    在使用通用mapper插入数据UUID回显 在使用通用mapper插入数据时,发现主键没有回显,我这里的主键是UUID的,解决方案是:配置一个MapperScannerConfigurer. @Bea ...

  4. Spring源码分析——源码分析环境搭建

    1.在Windows上安装Gradle gradle工具类似于maven,用于项目的构建,此处主要用于构建spring源码,以便我们将spring源码导入eclipse. 开发环境 Java:JDK8 ...

  5. 整合MVC实现文件上传

    1.整合MVC实现文件上传整合MVC实现文件上传在实际的开发中在实现文件上传的同时肯定还有其他信息需要保存到数据库,文件上传完毕之后需要将提交的基本信息插入数据库,那么我们来实现这个操作.整个MVC实 ...

  6. SQL SERVER 2019新功能

    1.错误代码行 BEGIN TRY    SELECT 1/0END TRYBEGIN CATCH    THROW END CATCH2.二级制截断列名值 chose语法

  7. sklearn中的SVM

    scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类.另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类 ...

  8. 新年Flag,零基础程序媛编程学习计划(持续更新ing)~~

    新的一年立下了转行做程序媛的Flag,我是文科妹子,专业是做市场传销…哦不,是市场营销,算是零基础转行,目标是半年内完成自学进入公司工作,目前打算从事的方向短期目标以入行为主,以前端(可以发挥自身审美 ...

  9. 2018.5.12 storm数据源kafka堆积

    问题现象: storm代码依赖4个源数据topic,2018.5.12上午8点左右开始收到告警短信,源头的4个topic数据严重堆积. 排查: 1.查看stormUI, storm拓扑结构如下: 看现 ...

  10. ESP8266 01S WIFI 网络

    ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网 ...