(转)logback + slf4j + jboss + spring mvc

(需要自己写监听类的方式一)     logbacklog4jlog4j2 全是以同一个人为首的团伙搞出来的(日志专业户!),这几个各有所长,log4j性能相对最差,log4j2性能不错,但是目前跟mybatis有些犯冲 (log4j2的当前版本,已经将AbstractLoggerWrapper更名成ExtendedLoggerWrapper,但是mybatis 2.3.7依赖的仍然是旧版本的log4j2,所以mybatis使用log4j2会报错),说到日志,还要注意另一外项目SLF4J( java的世界里,记日志的组件真是多!),SLF4J只一个接口标准,并不提供实现(就好象JSF/JPA 与 RichFaces/Hibernate的关系类似),而LogBack是SLF4J的一个实现,下面介绍logback的基本用法。原文链接:http://www.cnblogs.com/yjmyzz/p/3991012.html

一、基本用法

1.1 maven依赖项

View Code

1.2 配置文件logback.xml

View Code

1.3 示例程序
跟前面log4j2的示例程序几乎完全一样:

View Code

运行后,会在当前目录下创建logs目录,生成名为mylog-logback.log的日志文件,该文件体积>5M后,会自动创建 yyyy-mm-dd的目录,将历史日志打包生成类似:mylog-logback-2014-09-24-1.log.zip 的压缩包,每天最多保留10个

 

二、与spring -mvc的集成 

2.1 maven依赖项 

注:${springframework.version},我用的是3.2.8.RELEASE 版本

View Code

2.2 web.xml里增加下面的内容

View Code

其中com.cnblogs.yjmyzz.util.LogbackConfigListener 是自己开发的类,代码如下:(从网上掏来的)(说明:这是自己开发的一种监听,其实这种监听可以直接通过Maven导入)

注:该处理方式同样适用于struts 2.x

LogbackConfigListener

LogbackWebConfigurer

LogbackConfigurer

2.3 JBOSS EAP 6+ 的特殊处理

jboss 默认已经集成了sf4j模块,会与上面新加的3个类有冲突,app启动时会报错:

 java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext

所以,需要手动排除掉jboss默认的slf4j模块,在web-inf下创建名为jboss-deployment-structure.xml的文件,内容如下:

View Code

2.4 最后将logback.xml放到resouces目录下即可(打包后,会自动复制到classpath目录下)

/*************************************************************************************************************/

1.  Spring MVC集成slf4j-log4j

(直接导入日志监控jar)关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logback的,尤其是Spring MVC集成logback的,就相对少一些了,而且其中一些也有着这样那样的问题。进入正题之前先简单介绍下Spring MVC集成slf4j-log4j的过程,如下:

1)      在pom.xml文件中添加slf4j-log4j的依赖,完成后的classpath中将新增三个jar包,分别是:slf4j-api.jar、log4j.jar及slf4j-log4j.jar

2)      在当前classpath中添加log4j.properties配置文件,按照log4j的参数语法编写该文件

3)      以上两步完成后,普通的Java项目就能使用slf4j-log4j进行日志处理了;对于Java Web项目,还需要在web.xml文件中配置Log4jConfigLocation和Log4jConfigListener

2.  log4j与logback简要比较

本文意在阐述用logback替代log4j作为Spring MVC项目的日志处理组件。这两者虽然作者相同,但log4j早已被托管给Apache基金会维护,并且自从2012年5月之后就没有更新了。而 logback从出生开始就是其作者奔着取代log4j的目的开发的,因此一方面logback继承了log4j大量的用法,使得学习和迁移的成本不高, 另一方面logback在性能上要明显优于log4j,尤其是在大量并发的环境下,并且新增了一些log4j所没有的功能(如将日志文件压缩成zip包 等)

3.  Spring MVC集成slf4j-logback

3.1.      添加依赖

[html] view plaincopy

  1. <dependency>  

  2.     <groupId>ch.qos.logback</groupId>  

  3.     <artifactId>logback-classic</artifactId>  

  4.     <version>1.1.3</version>  

  5. </dependency>  

  6. <dependency>  

  7.     <groupId>org.logback-extensions</groupId>  

  8.     <artifactId>logback-ext-spring</artifactId>  

  9.     <version>0.1.2</version>  

  10. </dependency>  

  11. <dependency>  

  12.     <groupId>org.slf4j</groupId>  

  13.     <artifactId>jcl-over-slf4j</artifactId>  

  14.     <version>1.7.12</version>  

  15. </dependency>  


如上所示是集成所需要的依赖,其中:

第一个logback-classic包含了logback本身所需的slf4j-api.jar、logback-core.jar及logback-classsic.jar

第二个logback-ext-spring是由官方提供的对Spring的支持,它的作用就相当于log4j中的 Log4jConfigListener;这个listener,网上大多都是用的自己实现的,原因在于这个插件似乎并没有出现在官方文档的显要位置导致 大多数人并不知道它的存在

第三个jcl-over-slf4j是用来把Spring源代码中大量使用到的commons-logging替换成slf4j,只有在添加了这个依赖之后才能看到Spring框架本身打印的日志,否则只能看到开发者自己打印的日志

3.2.      编写logback.xml

logback与log4j一样,也需要在classpath中编写配置文件。但logback配置文件似乎比log4j复杂一些:log4j不仅 支持xml格式的配置文件,还支持properties格式的,而logback只支持xml格式的。好在官方提供了一个在线工具,可以将log4j的 properties文件直接转换成logback的xml文件,地址如下:

http://logback.qos.ch/translator/

logback的详细用法及其xml文件的相关语法,可参见它的用户向导,地址如下:

http://logback.qos.ch/manual/introduction.html

3.3.      配置web.xml

与log4j类似,logback集成到Spring MVC项目中,也需要在web.xml中进行配置,同样也是配置一个config location和一个config listener,如下所示:

[html] view plaincopy

  1. <context-param>  

  2.          <param-name>logbackConfigLocation</param-name>  

  3.          <param-value>classpath:logback.xml</param-value>  

  4. </context-param>  

  5. <listener>  

  6.          <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  

  7. </listener>  


其中LogbackConfigListener由前述的logback-ext-spring依赖提供,若不依赖它则找不到这个listener类

4.  其它

从上面可以看出,slf4j-log4j和slf4j-logback集成到Spring MVC(或推广到其它Java Web项目中)的步骤大体是相同的。集成完毕后,就可以通过slf4j提供的API隐藏掉logback(或log4j)的具体实现,直接进行日志处理了

使用slf4j-api的时候,需要注意的是:slf4j采用了单例模式,项目中创建的每一个Logger实例都会按你传入的name(传入的 Class<?>实例也会被转换成String型的name)保存到一个静态的ConcurrentHashMap中;因此只要name(或 Class<?>实例)相同,每次返回的实际上都是同一个Logger实例。因此完全没必要把Logger实例作为常量或静态成员,随用随取 即可。实际上,其作者也不建议那么做,原文链接:http://blog.csdn.net/sadfishsc/article/details/47160213

logback.xml配置详解:http://blog.csdn.net/claram/article/details/48066395


你可能感兴趣的:((转)logback + slf4j + jboss + spring mvc)