mina中的日志LoggingFilter默认的是slf4j,它是一个日志Facade,实际并不实现真正的日志处理功能,它在程序运行时自动判断classpath中加载的日志组件,比如:log4j/Logback/JUL等,确定之后调用真正的日志组件实现真正的日志处理操作。这一点对于组件式的程序,很明显是非常灵活的,因为你并不知道用户的实际环境中使用的是log4j还是JUL,或者是Logback等,但是为了实现自动识别,slf4j默认了log配置文件的加载位置,让我觉得十分不便。
既然LoggingFilter默认的是slf4j,它在程序运行时自动判断classpath中加载的日志组件,那么下面就讲讲怎么将mina 由log4j桥接到logback。
第一步:将log4j的相关jar给去掉(log4j-1.2.15.jar,slf4j-log4j12-1.7.5.jar,commons-logging.jar)
第二步:导入logback和slf4相关jar(log4j-over-slf4j-1.7.7.jar,logback-core-1.1.2.jar,logback-classic-1.1.2.jar,slf4j-api-1.7.7.jar)
第三步:将你的log4j属性文件改为logback的xml文件 并放到src目录下面 可以通过这个地址直接将log4j属性文件转换为logback的xml文件
http://logback.qos.ch/translator/
以上三步做完基本ok了 中间不需要修改任何代码。有的弄完以后有可能会出现一下问题,大多都是包冲突造成比如:SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.就是包导错造成同时存在了slf4j-log4j12-1.7.5.jar和slf4j-log4j12-1.7.7.jar,删除slf4j-log4j12-1.7.7.jar就好了。仔细坚持一下你jar,跟我上面一致就没问题的。
为什么要从log4j桥接到logback?
当然是由于logback 在性能上优于log4j---具体看看这个博客 http://blog.csdn.net/lwzcjd/article/details/5617200
http://www.xuebuyuan.com/848261.html