log4j logback slf4j项目配置中的简单总结

合集下载

java log4j,logback日志总结

java log4j,logback日志总结

一:java开发常用日志概括slf4j由log4j作者Ceki开发,逐步取代apahce commons-logginglogback由log4j作者Ceki开发,逐步取代log4j。

关系:slf4j=====commons-logging*.各种日志实现的通用入口,会根据classpath中存在下面哪一个Jar来决定具体的日志实现库。

logback====log4j*.日志实现类日志管理:slf4j(commons-logging)+logback(log4j)二:logback简介1、Logback为取代log4j而生Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件。

logback当前分成三个模块:logback-core,logback- classic和logback-access。

2、Logback的核心对象:Logger、Appender、LayoutLogback主要建立于Logger、Appender 和 Layout 这三个类之上。

Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。

Logger对象一般多定义为静态常量,如:1package com.logs;23import org.slf4j.Logger;4import org.slf4j.LoggerFactory;56public class MyApp {7final static Logger logger = LoggerFactory.getLogger("MyApp.class"); 8public static void main(String[] args) {910 logger.trace("trace");11 logger.debug("debug str");12 ("info str");13 logger.warn("warn");14 logger.error("error");15 }16 }Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。

JAVA中使用log4j及slf4j进行日志输出的方法详解

JAVA中使用log4j及slf4j进行日志输出的方法详解

JAVA中使⽤log4j及slf4j进⾏⽇志输出的⽅法详解 JAVA中输出⽇志⽐较常⽤的是log4j,这⾥讲下log4j的配置和使⽤⽅法,以及slf4j的使⽤⽅法。

⼀、下载log4j的架包,并导⼊项⽬中,如下:⼆、创建log4j.properties配置⽂件1、log4j配置⽂件的位置:(1)如果是java project项⽬,则在项⽬的根⽬录下创建log4j.properties⽽不是在src⽬录下。

(2)如果是java web项⽬,则在src⽬录下创建log4j.properties配置⽂件,因为这个时候tomcat会去默认的加载这个配置⽂件,⽽不需要我们⼿动的加载log4j的配置⽂件。

log4j.properties配置内容如下:1 log4j.rootLogger=info,logTest2 log4j.appender.logTest=org.apache.log4j.DailyRollingFileAppender3 log4j.appender.logTest.File=/logs/LogTest/logTest.log4 log4j.appender.logTest.DatePattern='.'yyyy-MM-dd'.log'5 yout=org.apache.log4j.PatternLayout6 yout.ConversionPattern=[LogTestInfo] [%d][%c][%-5p]%m%n2、log4j配置项的说明:(1)第⼀⾏中rootLogger配置的是整个项⽬的⽇志输出,也可以只针对某⼀个模块进⾏⽇志输出,⽐如第⼀⾏配置成.logTest.project=info,logTest,则⽇志只输出项⽬路径com/logTest/project下的。

info为⽇志级别,可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。

使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

使⽤Slf4j集成Log4j2构建项⽬⽇志系统的完美解决⽅案 最近因为公司项⽬性能需要,我们考虑把以前基于的log4j的⽇志系统重构成基于Slf4j和log4j2的⽇志系统,因为,使⽤slf4j可以很好的保证我们的⽇志系统具有良好的兼容性,兼容当前常见⼏种⽇志系统,⽽使⽤log4j2⽽不是log4j是因为Log4j 1.x 在⾼并发情况下出现死锁导致cpu使⽤率异常飙升,⽽Log4j2.0基于LMAX Disruptor的异步⽇志在多线程环境下性能会远远优于Log4j 1.x和logback(官⽅数据是10倍以上)。

关于slf4j的原理以及优点,请参见我的另⼀篇博客: 1.依赖管理 1).删除项⽬中存在的Log4j1.x所必须的log4j和slf4j-log4j12等依赖。

可以到项⽬的根⽬录,执⾏:mvn dependency:tree > tree.log,之后使⽤ cat tree.log | grep log4j命令进⾏查找。

1<exclusions>2<exclusion>3<groupId>org.slf4j</groupId>4<artifactId>slf4j-log4j12</artifactId>5</exclusion>6<exclusion>7<groupId>log4j</groupId>8<artifactId>log4j</artifactId>9</exclusion>10</exclusions> 2).添加以下slf4j和log4j2的依赖.1<!-- slf4j核⼼包-->2<dependency>3<groupId>org.slf4j</groupId>4<artifactId>slf4j-api</artifactId>5<version>1.7.13</version>6</dependency>7<dependency>8<groupId>org.slf4j</groupId>9<artifactId>jcl-over-slf4j</artifactId>10<version>1.7.13</version>11<scope>runtime</scope>12</dependency>1314<!--核⼼log4j2jar包-->15<dependency>16<groupId>org.apache.logging.log4j</groupId>17<artifactId>log4j-api</artifactId>18<version>2.4.1</version>19</dependency>20<dependency>21<groupId>org.apache.logging.log4j</groupId>22<artifactId>log4j-core</artifactId>23<version>2.4.1</version>24</dependency>25<!--⽤于与slf4j保持桥接-->26<dependency>27<groupId>org.apache.logging.log4j</groupId>28<artifactId>log4j-slf4j-impl</artifactId>29<version>2.4.1</version>30</dependency>31<!--web⼯程需要包含log4j-web,⾮web⼯程不需要-->32<dependency>33<groupId>org.apache.logging.log4j</groupId>34<artifactId>log4j-web</artifactId>35<version>2.4.1</version>36<scope>runtime</scope>37</dependency>3839<!--需要使⽤log4j2的AsyncLogger需要包含disruptor-->40<dependency>41<groupId>com.lmax</groupId>42<artifactId>disruptor</artifactId>43<version>3.2.0</version>44</dependency>2.web.xml中设置log4j2的监听器和过滤器(servlet3.0及以上版本不需要该步操作)1<!--对于log4j2,Servlet2.5以前的版本需要-->2<listener>3<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>4</listener>5<filter>6<filter-name>log4jServletFilter</filter-name>7<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>8</filter>9<filter-mapping>10<filter-name>log4jServletFilter</filter-name>11<url-pattern>/*</url-pattern>12<dispatcher>REQUEST</dispatcher>13<dispatcher>FORWARD</dispatcher>14<dispatcher>INCLUDE</dispatcher>15<dispatcher>ERROR</dispatcher>16</filter-mapping> 注意:log4j2不再⽀持properties⽂件了,只⽀持xml,json或是yaml,不指定位置的情况下默认在src/main/resources下查找。

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"配置项来设置输出格式。

Java日志框架对比:Log4j、Logback和SLF4J的选择

Java日志框架对比:Log4j、Logback和SLF4J的选择

Java日志框架对比:Log4j、Logback和SLF4J的选择引言:在开发Java应用程序时,日志是一个非常重要的组成部分。

它可以帮助我们记录应用程序的运行状态、调试问题以及监控系统性能。

为了更好地管理和利用日志信息,我们需要选择一个适合的日志框架。

本文将对比三个流行的Java日志框架:Log4j、Logback和SLF4J,帮助读者了解它们的特点和适用场景,以便做出正确的选择。

一、Log4jLog4j是一个广泛使用的Java日志框架,它提供了强大的日志记录功能和灵活的配置选项。

Log4j具有以下几个主要特点:1. 简单易用:Log4j的API设计简单直观,容易上手。

开发人员可以通过几行代码快速集成Log4j到应用程序中,并开始记录日志。

2. 高度可配置:Log4j提供了丰富的配置选项,可以根据需求灵活地配置日志输出格式、日志级别、目标设备等。

这使得开发人员可以根据具体需求进行精细化的日志管理。

3. 强大的过滤器机制:Log4j支持多种过滤器,可以根据日志的级别、来源、内容等进行过滤,从而实现对日志信息的精确控制。

4. 多种输出方式:Log4j支持将日志输出到控制台、文件、数据库等多种目标设备,开发人员可以根据实际需求选择合适的输出方式。

尽管Log4j在过去是Java日志领域的翘楚,但它的维护和更新已经相对较少。

因此,随着时间的推移,Log4j的性能和功能可能无法满足现代应用程序的需求。

二、LogbackLogback是由Log4j的创始人开发的下一代Java日志框架,它在Log4j的基础上进行了改进和优化。

Logback具有以下几个主要特点:1. 高性能:相比于Log4j,Logback在性能上有了显著提升。

它通过精细的设计和优化,可以更高效地处理日志记录,减少对应用程序性能的影响。

2. 灵活的配置:Logback提供了与Log4j相似的配置选项,可以根据需要自定义日志输出格式、级别、目标设备等。

日志组件slf4j介绍及配置详解

日志组件slf4j介绍及配置详解

⽇志组件slf4j介绍及配置详解1 基本介绍每⼀个Java程序员都知道⽇志对于任何⼀个Java应⽤程序尤其是服务端程序是⾄关重要的,⽽很多程序员也已经熟悉各种不同的⽇志库,如java.util.logging、Apache log4j、logback。

但如果你还不知道SLF4J(Simple logging facade for Java)的话,那么是时候在你的项⽬中学习使⽤SLF4J了。

SLF4J不同于其他⽇志类库,与其它⽇志类库有很⼤的不同。

SLF4J(Simple logging Facade for Java)不是⼀个真正的⽇志实现,⽽是⼀个抽象层( abstraction layer),它允许你在后台使⽤任意⼀个⽇志类库。

如果是在编写供内外部都可以使⽤的API或者通⽤类库,那么你真不会希望使⽤你类库的客户端必须使⽤你选择的⽇志类库。

如果⼀个项⽬已经使⽤了log4j,⽽你加载了⼀个类库,⽐⽅说 Apache Active MQ——它依赖于于另外⼀个⽇志类库logback,那么你就需要把它也加载进去。

但如果Apache Active MQ使⽤了SLF4J,你可以继续使⽤你的⽇志类库⽽⽆需忍受加载和维护⼀个新的⽇志框架的痛苦。

总的来说,SLF4J使你的代码独⽴于任意⼀个特定的⽇志API,这是对于API开发者的很好的思想。

虽然抽象⽇志类库的思想已经不是新鲜的事物,⽽且Apache commons logging也已经在使⽤这种思想了,但SLF4J正迅速成为Java世界的⽇志标准。

让我们再看⼏个使⽤SLF4J⽽不是log4j、logback或者java.util.logging的理由。

2 SLF4J对⽐Log4J,logback和java.util.Logging的优势正如我之前说的,在你的代码中使⽤SLF4J写⽇志语句的主要出发点是使得你的程序独⽴于任何特定的⽇志类库,依赖于特定类库可能需要使⽤不同于你已有的配置,并且导致更多维护的⿇烦。

Java中的日志框架有哪些

Java中的日志框架有哪些

Java中的日志框架有哪些Java作为一种广泛应用于各种类型应用程序开发的编程语言,具备强大的日志记录功能。

为了提供方便和灵活的日志管理和记录,许多日志框架在Java生态系统中被广泛采用。

本文将介绍几种常见的Java日志框架。

1. Log4jLog4j是Apache软件基金会下的一个开源项目,提供了一个简单且功能强大的日志框架。

它支持多种输出格式,包括控制台、文件和数据库。

Log4j通过配置文件来灵活地控制日志级别和输出方式,使得开发人员能够根据需求进行日志记录的配置和管理。

2. LogbackLogback是Log4j的继任者,由同一位开发者主导并使用了类似的API。

与Log4j相比,Logback具有更高的性能和更丰富的功能。

它支持异步日志记录、日志分割和滚动等高级特性。

Logback还提供了一个简单易用的配置文件,允许开发人员动态地调整日志记录的行为。

3. JUL(java.util.logging)JUL是Java平台自带的日志记录框架,也是许多Java标准库使用的默认日志系统。

JUL提供了一个简单的API,并与Java平台紧密集成。

它支持多种输出格式,并提供了对日志级别和记录器的灵活管理。

然而,JUL在功能和扩展性方面相对有限,不够灵活。

4. Log4j2Log4j2是Log4j的升级版,以提供更好的性能和更丰富的功能。

相比于Log4j,Log4j2支持异步日志记录和敏感数据的脱敏处理。

同时,Log4j2还引入了Lambdas表达式和Grok模式来简化日志格式的定义和解析。

Log4j2具有很高的灵活性和可扩展性,因此在大型应用程序中得到广泛采用。

5. SLF4J(Simple Logging Facade for Java)SLF4J是一个日志抽象框架,旨在提供统一的日志API,使开发人员能够在不同的日志实现之间无缝切换。

SLF4J可以与Log4j、Logback等多个日志框架集成使用,并提供了良好的兼容性。

slf4j+logback配置及详解

slf4j+logback配置及详解

配置文件详解:一:根节点<configuration>包含的属性:scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。

当scan 为true时,此属性生效。

默认的时间间隔为1分钟。

debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。

默认值为false。

例如:Xml代码<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 其他配置省略--></configuration>二:根节点<configuration>的子节点:2.1设置上下文名称:<contextName>每个logger都关联到logger上下文,默认上下文名称为“default”。

但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。

一旦设置,不能修改。

Xml代码<configuration scan="true" scanPeriod="60 seconds" debug="false"><contextName>myAppName</contextName><!-- 其他配置省略--></configuration>2.2设置变量: <property>用来定义变量值的标签,<property> 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。

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

如果对于commons-loging 、log4j 、slf4j 、LogBack 等都已经非常清楚了,可以忽略本文。

几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮助,当然如果对这块有更深刻理解的同学,也贡献出自己的知识和见解。

一、概念Commons-logging : apache最早提供的日志的门面接口。

避免和具体的日志方案直接耦合。

类似于JDBC 的api 接口,具体的的JDBC driver 实现由各数据库提供商实现。

通过统一接口解耦,不过其内部也实现了一些简单日志方案。

Log4j : 经典的一种日志解决方案。

内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。

我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。

Slf4j : 全称为Simple Logging Facade for JAVA:java简单日志门面。

是对不同日志框架提供的一个门面封装。

可以在部署的时候不修改任何配置即可接入一种日志实现方案。

和commons-loging 应该有一样的初衷。

个人感觉设从计上更好一些,没有commons 那么多潜规则。

同时有两个额外特点:1. 能支持多个参数,并通过{} 占位符进行替换,避免老写logger.isXXXEnabled 这种无奈的判断,带来性能提升见:/faq.html#logging_performance 。

2.OSGI 机制更好兼容支持一图胜千言,官网上的一个图:从上图可以发现,选择还是很多的。

Logback : LOGBack 作为一个通用可靠、快速灵活的日志框架,将作为Log4j 的替代和SLF4J 组成新的日志系统的完整实现。

官网上称具有极佳的性能,在关键路径上执行速度是log4j 的10 倍,且内存消耗更少。

具体优势见:http://logback.qos.ch/reasonsToSwitch.html二、常见日志方案和注意事项mons-logging+log4j : 经典的一个日志实现方案。

出现在各种框架里。

如spring 、webx 、ibatis 等等。

直接使用log4j 即可满足我们的日志方案。

但是一般为了避免直接依赖具体的日志实现,一般都是结合commons-logging 来实现。

常见代码如下:import mons.logging.Log;import mons.logging.LogFactory;private static Log logger = LogFactory.getLog(CommonsLoggingTest.class);代码上,没有依赖任何的log4j 内部的类。

那么log4j 是如何被装载的?Log 是一个接口声明。

LogFactory 的内部会去装载具体的日志系统,并获得实现该Log 接口的实现类。

而内部有一个Log4JLogger 实现类对Log 接口同时内部提供了对log4j logger 的代理。

LogFactory 内部装载日志系统流程:1. 首先,寻找mons.logging.LogFactory 属性配置2. 否则,利用JDK1.3 开始提供的service 发现机制,会扫描classpah 下的META-INF/services/mons.logging.LogFactory 文件,若找到则装载里面的配置,使用里面的配置。

3. 否则,从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。

4. 否则,使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现。

从上述加载流程来看,如果没有做任何配置,只要引入了log4j 并在classpath 配置了log4j.xml ,则commons-logging 就会使log4j 使用正常,而代码里不需要依赖任何log4j 的代码。

mons-logging+log4j+slf4j如果在原有commons-logging 系统里,如果要迁移到slf4j, 使用slf4j 替换commons-logging ,也是可以做到的。

原理使用到了上述commons-logging 加载的第二点。

需要引入Org.slf4j.jcl-over-slf4j-1.5.6.jar 。

这个jar 包提供了一个桥接,让底层实现是基于slf4j 。

原理是在该jar 包里存放了配置META-INF/services/mons.logging.LogFactory=mons.logging.impl.SLF4JLogFactory ,而commons-logging 在初始化的时候会找到这个serviceId ,并把它作为LogFactory 。

完成桥接后,那么那么简单日志门面SLF4J 内部又是如何来装载合适的log 呢?原理是SLF4J 会在编译时会绑定import org.slf4j.impl.StaticLoggerBinder; 该类里面实现对具体日志方案的绑定接入。

任何一种基于slf4j 的实现都要有一个这个类。

如:org.slf4j.slf4j-log4j12-1.5.6: 提供对log4j 的一种适配实现。

Org.slf4j.slf4j-simple-1.5.6: 是一种simple 实现,会将log 直接打到控制台。

……那么这个地方就要注意了:如果有任意两个实现slf4j 的包同时出现,那就有可能酿就悲剧,你可能会发现日志不见了、或都打到控制台了。

原因是这两个jar 包里都有各自的org.slf4j.impl.StaticLoggerBinder ,编译时候绑定的是哪个是不确定的。

这个地方要特别注意!!出现过几次因为这个导致日志错乱的问题。

3.Slf4j+logbackSlf4j 和log4j 作者都是同一个人。

Logback 号称在性能各方面有很多优势,也很诱人。

直接使用SLf4j 也很简单:import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class HelloWorld {public static void main(String[] args) {Logger logger = LoggerFactory.getLogger(HelloWorld.class);("Hello World");}}代码里也看不到任何具体日志实现方案的痕迹。

Logback 没用过,看到过一些诱人介绍。

具体大家可以去研究。

logback 。

注意事项使用日志配置的时候一定要明白需求,同时避免冲突。

如使用SLF4j 的时候为了避免冲突,一定要保障只有一种实现类jar 包在里面。

当遇到日志错乱等问题时,可以从这几个方面来排查一. Log4j+commons-loggingJAR包λcommons-logging-1.1.jarlog4j-1.2.15.jar配置文件λcommons-logging.propertieslog4j.xmlcommons-logging.jar包读取commons-logging.properties中指定的log,自动加载日志配置λ在commons-logging+log4j组合中commons-logging.properties指定的日志为:mons.logging.Log=mons.logging.impl.Log4JLoggerlog4j指定具体日志输出配置λ如果未选用commons-logging,可以在启动项目中,主动加载log4j的配置文件λ二. Logback+slf4jJAR包λslf4j-api-1.5.2.jarlogback-classic-0.9.9.jarlogback-core-0.9.9.jar配置文件λLogback.xmllogback的加载采用编码加载λJava代码1.String logbackCfg = "/config/logback.xml";2.URL logURL = new ClassPathResource(logbackCfg).getURL();3.ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();4.LoggerContext loggerContext = (LoggerContext) loggerFactory;5.loggerContext.shutdownAndReset();6.JoranConfigurator configurator = new JoranConfigurator();7.configurator.setContext(loggerContext);8.configurator.doConfigure(logURL);[java]view plaincopy1.String logbackCfg = "/config/logback.xml";2.URL logURL = new ClassPathResource(logbackCfg).getURL();3.ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();4.LoggerContext loggerContext = (LoggerContext) loggerFactory;5.loggerContext.shutdownAndReset();6.JoranConfigurator configurator = new JoranConfigurator();7.configurator.setContext(loggerContext);8.configurator.doConfigure(logURL);三. Slf4j+log4jJAR包λslf4j-api-1.5.2.jarslf4j-log4j12-1.5.2.jarlog4j-1.2.15.jar配置文件λLogback.xml四. Slf4j+logback+logback注:这种情况下是项目中有log4j输出的日志以及logback数据的日志.老项目改造,log4j和logback共存的情况下.(当选用spring+slf4j+logback的时候,spring的日志输出是log4j的,这个时候采用这种配置.)JARbaoλlog4j-over-slf4j-1.5.2.jarlogback-classic-0.9.9.jarlogback-core-0.9.9.jarslf4j-api-1.5.2.jar配置文件λLogback.xml配置加载λJava代码1.String logbackCfg = "/config/logback.xml";2.URL logURL = new ClassPathResource(logbackCfg).getURL();3.ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();4.LoggerContext loggerContext = (LoggerContext) loggerFactory;5.loggerContext.shutdownAndReset();6.JoranConfigurator configurator = new JoranConfigurator();7.configurator.setContext(loggerContext);8.configurator.doConfigure(logURL);[java]view plaincopy1.String logbackCfg = "/config/logback.xml";2.URL logURL = new ClassPathResource(logbackCfg).getURL();3.ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();4.LoggerContext loggerContext = (LoggerContext) loggerFactory;5.loggerContext.shutdownAndReset();6.JoranConfigurator configurator = new JoranConfigurator();7.configurator.setContext(loggerContext);8.configurator.doConfigure(logURL);五. Log4j配置文件示例Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">3.<log4j:configuration xmlns:log4j="/log4j/">4.5. <!-- 控制台输出-->6. <appender name="CONSOLE"class="org.apache.log4j.ConsoleAppender">7. <param name="Target" value="System.out" />8. <param name="Threshold" value="INFO" />9. <layout class="org.apache.log4j.PatternLayout">10. <param name="ConversionPattern"11. value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n%m%n" />12. </layout>13.14.<!—以下是过滤一些不需要输出的log信息 -->15. <filter class="org.apache.log4j.varia.StringMatchFilter">16. <param name="StringToMatch" value="new a seq no spend" />17. <param name="AcceptOnMatch" value="false" />18. </filter>19. <filter class="org.apache.log4j.varia.StringMatchFilter">20. <param name="StringToMatch" value="new hi[type=" />21. <param name="AcceptOnMatch" value="false" />22. </filter>23. <filter class="org.apache.log4j.varia.StringMatchFilter">24. <param name="StringToMatch" value="FileTransfer.execCommand()" />25. <param name="AcceptOnMatch" value="false" />26. </filter>27. </appender>28.29. <!--文件输出按照文件大小滚动文件-->30. <appender name="xxxx_file"class="org.apache.log4j.RollingFileAppender">31. <param name="Append" value="true" />32. <param name="Threshold" value="INFO" />33. <param name="File" value="xxxx.log" />34. <param name="MaxFileSize" value="100MB" />35. <param name="MaxBackupIndex" value="15" />36. <layout class="org.apache.log4j.PatternLayout">37. <param name="ConversionPattern"38. value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n%m%n" />39. </layout>40. <filter class="org.apache.log4j.varia.StringMatchFilter">41. <param name="StringToMatch" value="new a seq no spend" />42. <param name="AcceptOnMatch" value="false" />43. </filter>44. <filter class="org.apache.log4j.varia.StringMatchFilter">45. <param name="StringToMatch" value="new hi[type=" />46. <param name="AcceptOnMatch" value="false" />47. </filter>48. <filter class="org.apache.log4j.varia.StringMatchFilter">49. <param name="StringToMatch" value="FileTransfer.execCommand()" />50. <param name="AcceptOnMatch" value="false" />51. </filter>52. </appender>53.54. <!-- 错误输出过滤出错误日志信息-->55. <appender name="xxxx_error"class="org.apache.log4j.RollingFileAppender">56. <param name="Append" value="true" />57. <param name="Threshold" value="ERROR" />58. <param name="File" value="xxxx-error.log" />59. <param name="MaxFileSize" value="100MB" />60. <param name="MaxBackupIndex" value="4" />61. <layout class="org.apache.log4j.PatternLayout">62. <param name="ConversionPattern"63. value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n%m%n" />64. </layout>65. </appender>66.67. <!-- 根loggr -->68. <root>69. <appender-ref ref="CONSOLE" />70. <appender-ref ref="xxxx_file" />71. <appender-ref ref="xxxx_file_error" />72. </root>73.</log4j:configuration>[java]view plaincopy1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">3.<log4j:configuration xmlns:log4j="/log4j/">4.5. <!-- 控制台输出-->6. <appender name="CONSOLE"class="org.apache.log4j.ConsoleAppender">7. <param name="Target" value="System.out" />8. <param name="Threshold" value="INFO" />9. <layout class="org.apache.log4j.PatternLayout">10. <param name="ConversionPattern"11. value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n%m%n" />12. </layout>13.14.<!—以下是过滤一些不需要输出的log信息 -->15. <filter class="org.apache.log4j.varia.StringMatchFilter">16. <param name="StringToMatch" value="new a seq no spend" />17. <param name="AcceptOnMatch" value="false" />18. </filter>19. <filter class="org.apache.log4j.varia.StringMatchFilter">20. <param name="StringToMatch" value="new hi[type=" />21. <param name="AcceptOnMatch" value="false" />22. </filter>23. <filter class="org.apache.log4j.varia.StringMatchFilter">24. <param name="StringToMatch" value="FileTransfer.execCommand()" />25. <param name="AcceptOnMatch" value="false" />26. </filter>27. </appender>28.29. <!--文件输出按照文件大小滚动文件-->30. <appender name="xxxx_file"class="org.apache.log4j.RollingFileAppender">31. <param name="Append" value="true" />32. <param name="Threshold" value="INFO" />33. <param name="File" value="xxxx.log" />34. <param name="MaxFileSize" value="100MB" />35. <param name="MaxBackupIndex" value="15" />36. <layout class="org.apache.log4j.PatternLayout">37. <param name="ConversionPattern"38. value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n%m%n" />39. </layout>40. <filter class="org.apache.log4j.varia.StringMatchFilter">41. <param name="StringToMatch" value="new a seq no spend" />42. <param name="AcceptOnMatch" value="false" />43. </filter>44. <filter class="org.apache.log4j.varia.StringMatchFilter">45. <param name="StringToMatch" value="new hi[type=" />46. <param name="AcceptOnMatch" value="false" />47. </filter>48. <filter class="org.apache.log4j.varia.StringMatchFilter">49. <param name="StringToMatch" value="FileTransfer.execCommand()" />50. <param name="AcceptOnMatch" value="false" />51. </filter>52. </appender>53.54. <!-- 错误输出过滤出错误日志信息-->55. <appender name="xxxx_error"class="org.apache.log4j.RollingFileAppender">56. <param name="Append" value="true" />57. <param name="Threshold" value="ERROR" />58. <param name="File" value="xxxx-error.log" />59. <param name="MaxFileSize" value="100MB" />60. <param name="MaxBackupIndex" value="4" />61. <layout class="org.apache.log4j.PatternLayout">62. <param name="ConversionPattern"63. value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n%m%n" />64. </layout>65. </appender>66.67. <!-- 根loggr -->68. <root>69. <appender-ref ref="CONSOLE" />70. <appender-ref ref="xxxx_file" />71. <appender-ref ref="xxxx_file_error" />72. </root>73.</log4j:configuration>六. Logback配置文件示例Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE configuration>3.4.<configuration>5. <jmxConfigurator />6.7. <!-- 控制台输出日志 -->8. <appender name="STDOUT"class="ch.qos.logback.core.ConsoleAppender">9. <layout class="ch.qos.logback.classic.PatternLayout">10. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>11. </layout>12. </appender>13.14. <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)-->15. <appender name="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">16. <File>xxxx.log</File>17. <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">18. <FileNamePattern>xxxx.log.%i.bak</FileNamePattern>19. <MinIndex>1</MinIndex>20. <MaxIndex>12</MaxIndex>21. </rollingPolicy>22.23. <triggeringPolicy24.class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">25. <MaxFileSize>100MB</MaxFileSize>26. </triggeringPolicy>27. <layout class="ch.qos.logback.classic.PatternLayout">28. <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>29. </layout>30. </appender>31.32. <appender name="FILE-ERROR"class="ch.qos.logback.core.rolling.RollingFileAppender">33. <filter class="ch.qos.logback.classic.filter.LevelFilter">34. <level>ERROR</level>35. <OnMismatch>DENY</OnMismatch>36. <OnMatch>ACCEPT</OnMatch>37. </filter>38.39. <File>xxxx-err.log</File>40. <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">41. <FileNamePattern>xxxx-err.log.%i.bak</FileNamePattern>42. <MinIndex>1</MinIndex>43. <MaxIndex>3</MaxIndex>44. </rollingPolicy>45. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">46. <MaxFileSize>100MB</MaxFileSize>47. </triggeringPolicy>48. <layout class="ch.qos.logback.classic.PatternLayout">49. <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>50. </layout>51. </appender>52.53. <!--这里指定logger name 是为jmx设置日志级别做铺垫 -->54. <logger name="com.xxx.xxx">55. <level value="INFO" />56. <appender-ref ref="STDOUT" />57. <appender-ref ref="FILE" />58. <appender-ref ref="FILE-ERROR" />59. </logger>60.61.62.63.</configuration>[java]view plaincopy1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE configuration>3.4.<configuration>5. <jmxConfigurator />6.7. <!-- 控制台输出日志 -->8. <appender name="STDOUT"class="ch.qos.logback.core.ConsoleAppender">9. <layout class="ch.qos.logback.classic.PatternLayout">10. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>11. </layout>12. </appender>13.14. <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)-->15. <appender name="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">16. <File>xxxx.log</File>17. <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">18. <FileNamePattern>xxxx.log.%i.bak</FileNamePattern>19. <MinIndex>1</MinIndex>20. <MaxIndex>12</MaxIndex>21. </rollingPolicy>22.23. <triggeringPolicy24.class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">25. <MaxFileSize>100MB</MaxFileSize>26. </triggeringPolicy>27. <layout class="ch.qos.logback.classic.PatternLayout">28. <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>29. </layout>30. </appender>31.32. <appender name="FILE-ERROR"class="ch.qos.logback.core.rolling.RollingFileAppender">33. <filter class="ch.qos.logback.classic.filter.LevelFilter">34. <level>ERROR</level>35. <OnMismatch>DENY</OnMismatch>36. <OnMatch>ACCEPT</OnMatch>37. </filter>38.39. <File>xxxx-err.log</File>40. <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">41. <FileNamePattern>xxxx-err.log.%i.bak</FileNamePattern>42. <MinIndex>1</MinIndex>43. <MaxIndex>3</MaxIndex>44. </rollingPolicy>45. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">46. <MaxFileSize>100MB</MaxFileSize>47. </triggeringPolicy>48. <layout class="ch.qos.logback.classic.PatternLayout">49. <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>50. </layout>51. </appender>52.53. <!--这里指定logger name 是为jmx设置日志级别做铺垫 -->54. <logger name="com.xxx.xxx">55. <level value="INFO" />56. <appender-ref ref="STDOUT" />57. <appender-ref ref="FILE" />58. <appender-ref ref="FILE-ERROR" />59. </logger>60.61.62.63.</configuration>七. 相关简单说明Log4jλLog4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog 守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。

相关文档
最新文档