log4j 使用说明总结
1 概述本文档是针对Log4j日志工具的使用指南。包括:日志介绍、日志工具介绍、Log4j基本使用、Log4j的高级使用、Spring与log4j的集成等。并进行了举例说明。本文档适合所有Java开发人员。2 日志介绍存储软件程序、服务或操作系统产生的消息记录的文件。电脑里的日志是指日志数据可以是有价值的信息宝库,也可以是毫无价值的数据泥潭。要保护和提高你的网络安全,由各种操作系统、应用程序、设备和安全产品的日志数据能够帮助你提前发现和避开灾难,并且找到安全事件的根本原因。当然,日志数据对于实现网络安全的价值有多大取决于两个因素:第一,你的系统和设备必须进行合适的设置以便记录你需要的数据。第二,你必须有合适的工具、培训和可用的资源来分析收集到的数据。3 工具介绍日志工具支持级别配置、输出格式配置、输出源配置等功能。工具包括:logger4j、Commons Logging、Simple Log、MonoLog。3.1 logger4jLog4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。log4j的好处在于:1) 通过修改配置文件,就可以决定log信息的目的地——控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等2) 通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(......)等)。3) 使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。3.2 Commons LoggingJakarta Commons Logging (JCL)提供的是一个日志(Log)接口(inte易做图ce),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现.3.3 Simple LogSimple Log是一个logging anti-framework.Simple Log是一个让日记操作变得简单但很小的类库并且几乎不需要你做任何操作就可以得到日记的输出.它与其它日记框架相比最大的特点是使用简单,特别是在条件配置方面.它并不打算在一个包中解决所有日记问题,但它提供足够的功能来满足大多数应用程序所需的日记操作.3.4 MonoLogMonolog是一个用于监视和日志操作的API,国际化支持.4 Log4j基本配置Log4j由三个重要的组件构成:Loggers,Appenders和Layouts,分别表示:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。支持key=value格式设置或xml格式设置。l 日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;l 日志信息的输出目的地指定了日志将打印到控制台还是文件中;l 而输出格式则控制了日志信息的显示内容。4.1 日志信息的优先级Log4j划分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。 Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。假如在一个级别为q的Logger中发生一个级别为p的日志请求,如果p>=q,那么请求将被启用。这是Log4j的核心原则。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。4.2 输出源的使用有选择的能用或者禁用日志请求仅仅是Log4j的一部分功能。Log4j允许日志请求被输出到多个输出源。用Log4j的话说,一个输出源被称做一个Appender。 Appender包括console(控制台), files(文件), GUI components(图形的组件), remote socket servers(socket 服务), JMS(java信息服务), NT Event Loggers(NT的事件日志), and remote UNIX Syslog daemons(远程UNIX的后台日志服务)。它也可以做到异步记录。一个logger可以设置超过一个的appender。 用addAppender 方法添加一个appender到一个给定的logger。对于一个给定的logger它每个生效的日志请求都被转发到该logger所有的appender上和该logger的父辈logger的appender上。4.2.1 ConsoleAppender如果使用ConsoleAppender,那么log信息将写到Console。效果等同于直接把信息打印到System.out上了。4.2.2 FileAppender使用FileAppender,那么log信息将写到指定的文件中。这应该是比较经常使用到的情况。相应地,在配置文件中应该指定log输出的文件名。如下配置指定了log文件名为dglog.txtlog4j.appender.A2.File=dglog.txt注意将A2替换为具体配置中Appender的别名。4.2.3 DailyRollingAppender使用FileAppender可以将log信息输出到文件中,但是如果文件太大了读起来就不方便了。这时就可以使用DailyRollingAppender。DailyRollingAppender可以把Log信息输出到按照日期来区分的文件中。配置文件就会每天产生一个log文件,每个log文件只记录当天的log信息:log4j.appender.A2=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A2.file=dgloglog4j.appender.A2.DatePattern='.'yyyy-MM-ddlog4j.appender.A2.layout=org.apache.log4j.PatternLayoutlog4j.appender.A2.layout.ConversionPattern= %5r %-5p %c{2} - %m%n4.2.4 RollingFileAppender文件大小到达指定尺寸的时候产生一个新的文件。log4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File= ../logs/dglog.log# Control the maximum log file sizelog4j.appender.R.MaxFileSize=100KB# Archive log files (one backup file here)log4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n这个配置文件指定了输出源R,是一个轮转日志文件。最大的文件是100KB,当一个日志文件达到最大尺寸时,Log4J会自动把example.log重命名为dglog.log.1,然后重建一个新的dglog.log文件,依次轮转。4.2.5 WriterAppender将日志信息以流格式发送到任意指定的地方。4.3 Layout的配置Layout指定了log信息输出的样式。4.3.1 布局样式org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)4.3.2 格式%m 输出代码补充:软件开发 , Java ,
上一个:Hibernate 之 二级缓存
下一个:Unicode 解码
- 更多JAVA疑问解答:
- java怎么在线读取ftp服务器上的文件内容
- 关于程序员的职业规划
- HTML和JSP矛盾吗?
- java小程序如何打包?
- java怎么split路径文件名?
- jsp+javaBean中Column 'ordersPrice' specified twice的错误
- Java TCP/IP Socket网络编程系列
- 大家来讨论一下我到底该用什么好?Swing 还是 JavaFX
- 关于Hibernate实体自身多对一的抓取问题
- 关于apache2+tomcat群集出现的问题
- spring 获取上下文问题
- SSH 导入导出excel 谁有这块的资料吗?
- Ext TreePanel 刷新问题
- springmvc 加载一个jsp页面执行多个方法 报404
- checkbox数组action怎么向页面传值