SLF4J 的几种实际应用模式--:SLF4J+Log4J 与 SLF4J+LogBack
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新一
使用 SLF4J 的代码:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestSlf4J { private static final Logger logger = LoggerFactory.getLogger(TestSlf4j.class); public static void main(String[] args) { logger.info(“Hello {}”,“SLF4J”); } }
执行它,控制台输出: 2010-04-07 17:14:51,390 [com.unmi.TestSlf4j]-[INFO] Hello SLF4J
把这种 SLF4J+Log4J 的使用模式与曾为霸主地位的 JCL+Log4J 的用法进行一下对比(请忽略掉包文件中的版本号):
把这种 SLF4J+Log4J 的使用模式与曾为霸主地位的 JCL+Log4J 的用法进行一下对比(请忽略掉包文件中的版本号):
SLF4J+Log4j 组合 对比 JCL+Log4J 组合
slf4j-api-1.5.11.jar 相当,定义高层 API commons-logging-1.1.jar
slf4j-log4j12-1.5.11.jar 相当,左边是用绑定包,右边
是用配置文件来指定日志实现 commons-logging.properties,内容为:
org.apache.commons.logging.LogFactory=
org.apache.commons.logging.impl.LogFactoryImpl
或者
org.apache.commons.logging.Log=
org.apache.commons.logging.impl.Log4JLogger
log4j-1.2.15.jar 一样 log4j-1.2.15.jar
log4j.properties 一样,原来怎么配置现在也是 log4j.properties
程序代码中:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
logger.info(“Hello {}”,“SLF4J”); 左边侵入的是 SLF4J API,右边是被 JCL 的 API 污染了
SLF4J 支持参数化,而 JCL 不能 程序代码中:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Log log = LogFactory.getLog(TestJCL.class);
log.info(“Hello JCL”);
从上面的对比来看,SLF4j+Log4j 与 JCL+Log4J 的使用方式差不多,主要差异就在 SLF4J 用 jar 来告知用哪种日志实现,而 JCL 是通过配置文件来获得该选择哪个日志实现。
为什么会兴起 SLF4J,看看我们原来哪一个框架中,大的如 SSH 三雄(Spring、Struts、Hibernate),还有 WAS 应用服务器,小的就不计其数以前用的通用日志框架都清一色的 Jakarta Commons Logging(JCL),日志实现会选用 Log4j,为何现在 Hibernate、Tapesty、DbUnit、Jetty V6 等纷纷变节,都采用了 SLF4J 了呢?SLF4J 与 JCL 相比,定然是有其可表之处。而其中 SLF4J 受类加载器的影响较小,不易产生内存溢出的问题,性能得到了改善,更主要是顺应了潮流的发展–可方便部署到 OSGI 环境中.
SLF4J+LogBack
前面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是 LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会觉得惊讶了。LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱,它还被作者认定为 Log4J 的继任者。
Logback 分为三个模块:logback-core,logback-classic,logback-access。logback-core 是核心;logback-classic 改善了 log4j,且自身实现了 SLF4J API,所以即使用 Logback 你仍然可以使用其他的日志实现,如原始的 Log4J,java.util.logging 等;logback-access 让你方便的访问日志信息,如通过 http 的方式。
还得提一点,Logback 能更好的放到 OSGI 环境中。好了,简单绍完了 Logback,就来看看具体怎么用它。
需要的配置文件和组件包,下面三个 jar 文件和一个 xml文件都是要放在项目的 ClassPath 上。
slf4j-api-1.5.11.jar
logback-core-0.9.20.jar
logback-classic-0.9.20.jar
logback.xml 或 logback-test.xml (类似于 log4j.properties/log4j.xml)
Logback 先找 logback-test.xml,没有则找 logback.xml 文件,都找不到就使用 BasicConfigurator 基本配置,BasicConfigurator 就是相当于等会贴出的 logback.xml 文件内容的配置。这里我们用 logback.xml 配置文件,以前的 log4j.properties 文件可以用 PropertiesTranslator 转换成 logback.xml 文件内容。
下面是一个最简单的 logback.xml 文件内容
<?xml version="1.0" encoding="UTF-8"?> %d{HH:mm:ss.SSS} \[%thread\] %-5level %logger{36} - %msg%n在 log4j.xml 能做的配置,logback.xml 中也能做到,而且还增强了诸如 、、 等更强的控制,请参考 logback 的手册 [http://logback.qos.ch/manual/index.html](http://logback.qos.ch/ma
nual/index.html)。
使用 Logback 的代码
package com.unmi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestLogback { private static final Logger logger = LoggerFactory.getLogger(TestLogback.class); public static void main(String[] args) { logger.info(“Hello {}”,“TestLogback”); } }
最后
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
如果你需要这些资料, ⬅ 专栏获取
、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
如果你需要这些资料, ⬅ 专栏获取
更多推荐
所有评论(0)