Log in Spring
记录日志向来是企业级应用程序必须考虑的事情。早些年,一个项目一个日志功能或模块,然后有了log4j这样的产品。不知是log4j将记录日志做到了极致,或是技术含量不高,又或是经济利益不明显,它已成为了这个方面最主要的实现者。它的地位形成了一个事实,其它日志工具与它共存时,大家会很自觉地调用它来完成实际的工作。在使用spring的过程中,这个机制刚开始会让程序员有些迷惑,至少我是这样的。spring官网改版前提供jar包下载,现在是通过maven或gradle在线下载jar包。在spring framework里,日志工具是common-logging。在spring data jpa里,日志工具变成了slf4j,它需要两个包:jcl-over-slf4j和slf4j-api。事情并没有结束,因为项目还需要hibernate。从hibernate4开始,它的日志工具变成了jboss-logging,为了支持i18n。现在项目工程的lib文件夹里已经有了4个jar包来支持记录日志的工作,即便如此,我们除了能在控制台输出上看到相关信息外,并不能对这些日志工具进行配置从而将日志内容记录到文件或数据库里进行持久化存储。到官网(确保正确性)上查看资料,我们才会发现这些工具都是facade,只提供最simple或default的日志记录功能,要想进行扩展,必须集成log4j这样的产品。对于common-logging和jboss-logging,把log4j的jar包跟它们放在一起,这两个工具就能自动集成log4j了;对于slf4j,还需要外加一个slf4j-log4j的jar包。在spring的文档中有这样几句话:If we could turn back the clock and start Spring now as a new project it would use a different logging dependency. The first choice would probably be the Simple Logging Facade for Java (SLF4J), which is also used by a lot of other tools that people use with Spring inside their applications.SLF4J is a cleaner dependency and more efficient at runtime than commons-logging because it uses compile-time bindings instead of runtime discovery of the other logging frameworks it integrates.好吧,时间是不可能倒退的,我们只能靠自己完成配置以使用slf4j。jboss-logging实现的也是“运行时发现算法”(runtime discovery algorithm),会有什么问题?随它去吧!common-logging是jcl标准接口的实现,所以jcl-over-slf4j是jcl与slf4j之间的桥梁,有了jcl-over-slf4j,spring还以为自己仍然在调用common-logging。之后,slf4j-api调用slf4j-log4j的接口去使用真正的log4j。使用log4j确实简单,把配置文件放到classpath下就行了,如果是eclipse的目录结构,就是放到src文件夹里。配置文件的内容由三个部分组成:logger、appender和layout,理解起来也很容易,网上资料太多在这里就不重复了。
最后可以总结出我们的日志工具所需要的jar包:jcl-over-slf4j、slf4j-api、slf4j-log4j、log4j、jboss-logging。除了日志工具的纠结外,这些优秀的框架在java字节码操作和动态代理方面也是盘根错节的。就目前的发行版来看,hibernate从cglib更改为了javassist,spring3.2后就直接集成了cglib+asm,好像以前是集成在一起的,后来分开了(需要单独添加jar包),现在又在一起了,真是折腾啊!这次在一起后,spring在动态代理方面威力巨大,既可以实现接口代理(jdk支持)又可以实现类代理(cglib支持)。
Log in Spring的更多相关文章
- 深入分析Spring 与 Spring MVC容器
1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...
- spring mvc DispatcherServlet详解之前传---FrameworkServlet
做项目时碰到Controller不能使用aop进行拦截,从网上搜索得知:使用spring mvc 启动了两个context:applicationContext 和WebapplicationCont ...
- spring源码:web容器启动(li)
web项目中可以集成spring的ApplicationContext进行bean的管理,这样使用起来bean更加便捷,能够利用到很多spring的特性.我们比较常用的web容器有jetty,tomc ...
- Spring MVC 学习 -- 创建过程
Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...
- Spring事务
1.@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.@Transactional 的 ...
- WebApplicationInitializer (spring 3.x.x以上版本)
实现WebApplicationinitializer接口的类都可以在web应用程序启动时被加载. 那么来想一个问题:为什么实现了WebApplicationInitializer这个接口后,onSt ...
- Spring相关
一.Spring中ApplicationContext加载机制加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet. 这两者在功能上完全等同,只是 ...
- [Spring框架] Spring中的 ContextLoaderListener 实现原理.
前言: 这是关于Spring的第三篇文章, 打算后续还会写入AOP 和Spring 事务管理相关的文章, 这么好的两个周末 都在看code了, 确实是有所收获, 现在就来记录一下. 在上一篇讲解Spr ...
- 从启动日志看Spring IOC的初始化和Bean生命周期
一.Tomcat中启动IoC容器的日志 启动Tomcat等容器时,控制台每次都打印出一些日志. 最近刚好在研究Spring源码,所以换个角度,从启动日志来简单的看看Spring的初始化过程! 以下是T ...
随机推荐
- 整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)
转自:http://henter.me/post/ruby-rvm-gem-rake-bundle-rails.html Ruby 这个就不用多说了 RVM 用于帮你安装Ruby环境,帮你管理多个Ru ...
- 给phpcms v9加入一个主题radio无线电button,它可反复使用,以创建不同的专题部分内容编辑器,添加一个主题来定义自己的领域
1. 2. 找到 phpcms\modules\special\templates中的special_add.tpl.php和special_edit.tpl.php文件 special_add.tp ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- AngularJS + CoffeeScript
AngularJS + CoffeeScript 前端开发环境配置详解 AngularJS 号称 '第一框架' ('The first framework') 确实是名不虚传.由其从jQuery中完全 ...
- NET Socket服务编程
smark https://github.com/IKende/ .NET Socket服务编程之-高效连接接入编 在.NET上编写网络服务深入都有2,3年了,而这些时间时如何在.NET里实现网络服务 ...
- SAE设置记录:修改config.yaml实现地址重写和修改固定链接
刚搭建完sae博客后闲置下来了,偶尔写两篇文章,最近想整理整理sae,于是开始. 刚新建完博客修改固定链接,可是保存后直接访问出现问题,访问不到文章了,而且我的博客地址前面会出现"1.&qu ...
- js 拖拽实现
代码参考 <!DOCTYPE html> <html lang="en"> <title>拖拽</title> <head&g ...
- 折腾源WRT的AC路无线路由-2
在创纪录的开箱图,开箱后,我觉得大尺寸,因此,获得一些各种尺寸,喜欢网上购物的参考.也许这,安装后,它占用的大小:基本长度=28.5cm.深度=19.5cm,高=19.5,因为制造商推荐的约两个天线是 ...
- html5 音频和视频(audio And video)
1.音频和视频 Web 上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定 ...
- 读书笔记—CLR via C#章节1-2
这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深 ...