一、介绍

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平台为”\r\n”,Unix平台为”\n”输出日志信息换行

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

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

Log4j配置的经典总结,打印日志文件,日志存库的更多相关文章

  1. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  2. (二) Log4j 配置详解

    第一节: rootLogger 根配置 Log4j 根配置语法 log4j.rootLogger = [ level ] , appenderName, appenderName, … 指代 把指定级 ...

  3. springboot的log4j配置与logback配置

    log4j配置的依赖 <!-- 删除pom.xml文件中所有对日志jar包的引用--> <dependency> <groupId>org.springframew ...

  4. 【linux日志】【日志分析】linux系统各日志文件的含义

    前段时间太忙,没有来得及管博客,最近时间充裕了,开始更新博客. 因为最近在看linux日志相关内容,把心得分享给大家 linux系统日志文件默认存放路径/var/log/ ls查看此路径下有哪些日志文 ...

  5. samba服务日志文件-密码文件及启停

    1.Samba服务日志文件日志文件对于samba非常重要,它存储着客户端访问samba服务器的信息,以及samba服务的错误提示信息等,可以通过分析日志,帮助解决客户端访问和服务器维护等问题.在/et ...

  6. Oracle的控制文件和日志文件

    --什么是控制文件 控制文件是数据库的一个二进制文件,它主要记录数据库的名称. 数据库的数据文件存放位置等信息. 一个控制文件只能属于一个数据库.如果控制文件丢失,这数据库就无法操作. --下面查询语 ...

  7. 包含日志文件getshell

    包含日志文件getshell     一.包含日志文件漏洞利用概述           当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件.    ...

  8. Linux日志文件(常见)及其功能

    日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息.系统的启动信息.系统的安全信息.邮件相关信息.各种服务相关信息等.这些信息有些非常敏感,所以在 Linux 中这些日志文 ...

  9. tomcat日志文件定时清理备份

    以下脚本主要备份的日志文件为tomcat的catalina.out.localhost_access_log.yyyy-mm-dd.log日志和项目的日志文件,其中项目的日志文件格式为"pr ...

随机推荐

  1. 使用javascript获取网址的各个参数

    有时也挺无奈的,为了实现一个功能,不得不用到前台获取参数.幸亏,有javascript,不然真的是坑大发了,感谢javascript的创造者.开始show大图: 属性    值href:完整的 URL ...

  2. LeetCode解题报告:Linked List Cycle && Linked List Cycle II

    LeetCode解题报告:Linked List Cycle && Linked List Cycle II 1题目 Linked List Cycle Given a linked ...

  3. js对ajax返回数组的处理

    引言: ajax异步传输,可以传输字符串,但是数组这样的数据,就不太好传递了,这个时候怎么办呢? 答案是可以通过json来处理,后台将数据数据进行json编码! 然后客户端,通过js来进行解析. 这样 ...

  4. Linux Kernel TUNSETIFF释放后重用本地拒绝服务漏洞(CVE-2013-4343)

    漏洞版本: Linux kernel <= 3.11 漏洞描述: BUGTRAQ ID: 62360 CVE(CAN) ID: CVE-2013-4343 Linux Kernel是Linux操 ...

  5. Linux下用户及用户组的管理

    一.用户账号管理 1. 添加新用户账号 命令格式: useradd 选项 用户名 选项含义如下: -c comment 指定一段注释性描述. -d 目录 指定用户主目录,如果此目录不存在,则同时使用- ...

  6. XCode4 下制作Framework的方法

    http://www.cocoachina.com/bbs/read.php?tid-75680-page-1.html

  7. 像素,分辨率,PPI(像素密度),BPP 扫盲

    像素于分辨率 像素,又称画素,为图像显示的基本单位,译自英文“pixel”,pix是英语单词picture的常用简写,加上英语单词“元素”element,就得到pixel,故“像素”表示“图像元素”之 ...

  8. Line Painting

    题目大意;说是可以吧一段区间变成白色或者黑色, 区间(0-10^9)初始都是白色,问经过n次操作以后最大的连续白色区间 Problem Description The segment of numer ...

  9. win7限制登录时间的设置方法

    win7使用Net User命令行语句限制登录时间的方法: 1.单击“开始”,然后单击“运行”. 2.在“打开”框中,键入cmd,然后单击“确定”. 3..键入 net user username / ...

  10. javascript弹出框打印某个数值时,弹出NaN?(not a number)

    一.NaN:表示not a number null 未定义或空字符串 undefined 对象属性不存在 或是声明了变量但从未赋值. 二.出现这种情况有(1)此常数的值是零被零除所得到的结果. (2) ...