Log4j配置的经典总结,打印日志文件,日志存库

 

   

一、介绍

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

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

不错的使用方式,提供打印日志:

# # Log4J Settings for log4j 1.2.x (via jakarta-commons-logging) # # The five logging levels used by Log are (in order): # #   1. DEBUG (the least serious) #   2. INFO #   3. WARN #   4. ERROR #   5. FATAL (the most serious)

# Set root logger level to WARN and append to stdout log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.

#单条日志的显示格式 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p %C.%M(%L):%m%n

# Print only messages of level ERROR or above in the package noModule. log4j.logger.noModule=FATAL

# OpenSymphony Stuff log4j.logger.freemarker=INFO log4j.logger.com.opensymphony=INFO log4j.logger.com.opensymphony.xwork2.ognl=ERROR log4j.logger.org.apache.struts2=WARN log4j.logger.org.apache.struts2.components=WARN log4j.logger.org.apache.struts2.dispatcher=WARN log4j.logger.org.apache.struts2.convention=INFO # Spring Stuff log4j.logger.org.springframework=WARN

二、配置文件

其实您也可以完全不使用配置文件,而是在代码中配置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] 7c %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平台为” ”,Unix平台为” ”输出日志信息换行

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

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

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

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

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