SLF4J 的几种实际应用模式--之二:SLF4J+Logback
前面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是 LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会觉得惊讶了。LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱,它还被作者认定为 Log4J 的继任者。
为什么叫做 Logback,我就不知道了,反正不要叫做 Brokeback 就行。这里是推崇用 Logback 替代 Log4J 的十几个理由:Reasons to prefer logback over log4j,说的大至是更快;好测试;与 SLF4J 关系紧;文档丰富;能自动加载配置文件;多个 JVM 写一个日志文件,或其他 I/O 错误时不影响程序执行;配置文件中加入条件控制;强大的日志过滤;更强的日志切分功能;自动压缩、删除日志文件;异常栈中更多的数据信息。
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 上。
1. slf4j-api-1.5.11.jar
2. logback-core-0.9.20.jar
3. logback-classic-0.9.20.jar
4. logback.xml 或 logback-test.xml (类似于 log4j.properties/log4j.xml)
前一个包在 http://www.slf4j.org/download.html 处下载,第二第三个包在 http://logback.qos.ch/download.html 下载,可能包文件名中的版本号有些差,不要紧。由于这里不演示 HTTP 访问日志信息,所以不需要用到 logback-access-0.9.20.jar。
Logback 先找 logback-test.xml,没有则找 logback.xml 文件,都找不到就使用 BasicConfigurator 基本配置,BasicConfigurator 就是相当于等会贴出的 logback.xml 文件内容的配置。这里我们用 logback.xml 配置文件,以前的 log4j.properties 文件可以用 PropertiesTranslator 转换成 logback.xml 文件内容。
下面是一个最简单的 logback.xml 文件内容
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>
在 log4j.xml 能做的配置,logback.xml 中也能做到,而且还增强了诸如 <if><then><else>、<filter>、<sift> 等更强的控制,请参考 logback 的手册 http://logback.qos.ch/manual/index.html。
使用 Logback 的代码
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");
}
}
可以看到与使用 SLF4J 的代码没有任何区别,因为本来用的通用日志框架就是 SLF4J,说到底,这里的 Logback 就相当于 SLF4J+Log4J 使用方式中的 Log4J 绑定和 Log4J 的功能。
执行上面的代码,输出:
21:38:43.031 [main] INFO com.unmi.TestLogback - Hello TestLogback
还是和上次一样,这里就拿 SLF4J+Logback 和 SLF4J+Log4J 两种方式作下比较:
SLF4J+Logback 组合 | 对比 | SLF4J+Log4J 组合 |
slf4j-api-1.5.11.jar | 一样的,定义高层 API | slf4j-api-1.5.11.jar |
logback-classic-0.9.20.jar | 都是用绑定, 左边这里用作 Logback 绑定 | slf4j-log4j12-1.5.11.jar |
logback-classic-0.9.20.jar | 左边这里用作 日志实现 | log4j-1.2.15.jar |
logback-test.xml/logback.xml | 相当,logback 增加 了 log4j | log4j.properties/log4j.xml |
程序代码中: import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(TestSlf4j.class); | 完全一样,实质上只是 SLF4J API 侵入到了应用组件 中了,与 Logback 没有关系。 | 程序代码中: import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(TestLogback.class); |
通过上面我们更清楚的发现,SLF4J+Logback 这样的组合与 SLF4J+Log4J 这样的用法其实没有什么差异。SLF4J 在使用其他日志实现框架的时候都是 SLF4J+相应绑定+日志实现,这里缩写成的 SLF4J+Log4J,中间是有一个 SLF4J 到 Log4J 的绑定的。完整表述它们就是:
SLF4J+Log4J 的方式: slf4j-api-1.5.11.jar + slf4j-log4j12-1.5.11.jar + log4j-1.2.15.jar
SLF4J+Logback 的方式:slf4j-api-1.5.11.jar + logback-classic-0.9.20.jar + logback-classic-0.9.20 前一个 logback-classic-0.9.20.jar 是作为绑定用的,后一个是作为日志实现用的,也就是 logback-classic-0.9.20.jar 把前面的 slf4j-log4j12-1.5.11.jar 和 log4j-1.2.15.jar 两个包的功能揉合在了一起。
搞明白了 Logback 在其中所担当的角色后,我们就知道,说使用了 Logback 应用组件,实际它们所用的统一日志组件只是 SLF4J。也可以说 Logback 就是 Log4J 那样,只是自身带了绑定的日志实现。
在 Logback 官方首页 http://logback.qos.ch/ 面中可以看到使用了 Logback 的项目。
本文链接 http://unmi.cc/slf4j-logback, 来自 隔叶黄莺 Unmi Blog
转载于:https://blog.51cto.com/2005713/517702
相关文章:

10行Python,搭建一个游戏AI | 视频教程
昨天为大家推荐了三个Python视频,包含:《利用Python,用4分钟时间搭建一个情感分析系统》、《7行Python代码,搭建一个可以识花的机器学习APP》、《10行Python,搭建一个可以自动作曲的神经网络》,今天营长再为…

ABAP git客户端
Jerry习惯把自己写的小程序放到自己的github上:https://github.com/i042416 对于写的ABAP程序,需要先把SAPGUI里的代码手动拷贝到本地,然后用git客户端push到github上。 但是其实可以直接在SAPGUI里通过一个ABAP实现的git客户端将代码push到g…

【Git】git 与远程库交互
一、远程操作 1、克隆 git clone <url> 2、提交 git add :添加 git commit -m “修改信息” :提交到本地 git branch -a :查看所有分支,红色的是远程分支 git fetch :获取远程分支 git diff HEAD FETCH_HEAD…

[轉]在jQuery1.5中使用deferred对象 - 拿着放大镜看Promise
http://www.cnblogs.com/sanshi/archive/2011/03/11/1981789.html 不錯的JS方面的文章 三生石上

拼多多成立技术顾问委员会,陆奇将领导相关工作
整理 | 琥珀出品 | AI科技大本营(公众号id:rgznai100)美国东部时间 3 月 13 日上午,拼多多(NASDAQ:PDD)公布了截止 2018 年 12 月 31 日的第四季度和全年年的未经审计财务业绩。拼多多创始人、C…

【linux】Valgrind工具集详解(一):简介
一、Valgrind概述 Valgrind是用于构建动态分析工具的仪器框架。它附带了一组工具,每个工具都执行某种调试,分析或类似任务,可帮助您改进程序。Valgrind的架构采用模块化设计,因此可以轻松创建新工具,而不会干扰现有结…

An internal error occurred during: Launching xxx on WebLogic10.x.
An internal error occurred during: "Launching xxx on WebLogic10.x". java.lang.NullPointerException 蕃薯耀 2018年3月15日 http://www.cnblogs.com/fanshuyao/ 一、问题描述: Myeclipse 将项目部署web服务器报错: An internal error oc…

Android -- TextView与EditText 同步显示
Android -- TextView与EditText 同步显示文章分类:JavaEye方法一.利用View.OnKeyListener"同步"显示Java代码 EditText myEdit (EditText)findViewById(R.id.myEdit); TextView myText (TextView)findViewById(R.id.myText); myEdit.setOnKeyListener(new Edit…

【linux】Valgrind工具集详解(二):入门
一、使用valgrind 1、安装 安装超级简单: sudo apt-get install valgrind 2、使用 运行valgrind -h可以查看详细使用方法,命令格式如下: valgrind [valgrind -h中的选项] 待测程序 [待测程序的命令行参数列表]最重要的选项是–tool决定运行哪种Valgrind工具。 例如,使…

Spring Cloud - Feign调用问题
2019独角兽企业重金招聘Python工程师标准>>> 这两天在改造微服务远程调用方法时,由之前的RestTemplate方式,改为FeignClient方式。 遇到一个及其恶心的问题。 直接上错误提示: 这里面,最重要的一条是: 这个…

开源的Blink和Spark3.0,谁将称霸大数据领域?
来源 | 大数据技术与架构(import_bigdata)作者 | 王知无,阿里巴巴高级大数据开发工程师,先后在京东、阿里等大型互联网公司从事大数据平台、实时计算和离线计算中间件和业务平台开发。2018和2019年是大数据领域蓬勃发展的两年&…

Redis 集群部署及踩过的坑
本文目标 要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群,同时记录在搭建过程中踩过的坑。 安装准备 centos版本:6.7 redis版本:3.2.3 安装方式:源码安装 服务器ÿ…

【linux】Valgrind工具集详解(三):打印信息说明
一、打印信息格式 Valgrind打印信息的格式如下,很容易和程序输出信息区分出来 == 进程ID ==Valgrind的打印信息二、打印到何处 1、打印到文件描述符中 主要是设置打印到终端上,默认情况下为2(stderr标准错误输出)。如果要想打印到其他文件描述符(例如编号9),则可以指…

杨超越第一,Python第二
追星追到程序员们狂热得搞起了编程比赛,长这么大,这种应援架势真没见过。没错,说的就是你们的杨超越妹妹。近日百度贴吧吧主在杨超越吧发帖,呼吁要为自己的偶像组织第一届杨超越杯编程大赛,众粉丝呼应,随即…

SQL Server数据库错误9003(LSN无效)的处理方法
国内一些ERP、财务软件一般后台都使用SQL Server的数据库,SQL Server作为一个中大型数据库是不应该在桌面系统上运行的,小规模企业一般不使用专用服务器,大部分直接使用XP系统桌面引擎MSDE作为SQL数据库的后台服务。这种方案当然就谈不上什么…

新款Tesla最低仅售26.2万,马斯克终于凑齐了S3XY
作者 | 琥珀出品 | AI科技大本营(公众号id:rgznai100)北京时间 3 月 15 日上午许,整整等待了 20 分钟的特斯拉 Model Y 新品发布会终于开场。在台下观众的阵阵欢呼声中,台上的埃隆 马斯克显得神采奕奕。这次ÿ…

【linux】Valgrind工具集详解(四):抑制错误
一、什么是抑制错误 错误检查工具可以检测系统库中的许多问题,例如C库,它是随操作系统预安装的。这些错误无法修复,并且有很多,但不希望看到这些错误。如何屏蔽这样错误就叫做“抑制错误”。 二、使用方法 1、使用默认的抑制错误配置 valgrind参数为 –default-suppress…

jenkins配置git
# jenkins配置git # 检测当前git版本是否是2.7.4以上 git --version # 如果没有安装git直接源码安装即可,如果安装了先删除原来的git yum -y remove git # 先安装编译git需要的包 yum -y install zlib-devel perl-CPAN gettext curl-devel expat-devel gettext-deve…

让别人不知道你的网站使用PHP
2019独角兽企业重金招聘Python工程师标准>>> 如果不想让别人知道你的网站使用了PHP程序,这样可以提高网站的安全。这并不说明PHP不安全,只是可以防止一些人攻击你的网站。你可以按照下面的方法设置你的httpd.conf文件。 你可以使用下面的方法…

【linux】Valgrind工具集详解(五):命令行详解
一、使用方法 usage: valgrind [options] prog-and-args 使用方法:valgrind [参数选项] 程序和参数 二、选择工具 tool-selection option, with default in [ ]: 工具选择选项,默认值在[]中: –tool= use the Valgrind tool named [memcheck] name取值如下: 1、memcheck…

小白程序员仅用5分钟入职BAT,他只做了这件事!
有一个知名独立博客「左岸读书」,坚持运营11年。最为印象深刻的,是网站的副标题:一切成就,均源自积累。我曾经“唯天赋主义”,觉得有些事永远都学不好。但慢慢的我发现,疏于锻炼、但依然是NBA第一中锋的奥尼…

源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
该文章阅读的AFNetworking的版本为3.2.0。 这个分类提供了对请求周期进行控制的方法,包括进度监控、成功和失败的回调。 1.接口文件 1.1.属性 /**网络会话管理者对象*/ property (nonatomic, strong) AFHTTPSessionManager *sessionManager; 复制代码1.2.方法 /**异…

腾讯微博快速有效增加广播转播量的方法与技巧
经过一段时间对腾讯微博的实践,对腾讯微博也算是有所收获,要做好腾讯微博,无非就是两个方面,一是增加听众数,二是增加广播的转播量,本篇写的是做好微博质量–即增加转播量的方法。增加转播量不像增加听众数…

详解 | 推荐系统的工程实现
作者 | gongyouliu 来源 | 大数据工程师01 写在前面本篇文章作者会结合多年推荐系统开发的实践经验粗略介绍推荐系统的工程实现,简要说明要将推荐系统很好地落地到产品中需要考虑哪些问题及相应的思路、策略和建议,其中有大量关于设计哲学的思考,希望对从事推荐算法…

【linux】Valgrind工具集详解(六):使用Valgrind gdbserver和GDB调试程序
一、概述 在Valgrind下运行的程序不是由CPU直接执行的。相反,它运行在Valgrind提供的合成CPU上。这就是调试器在Valgrind上运行时无法调试程序的原因。 二、快速入门 在使用Memcheck工具时使用GDB调试程序,启动方式如下: 1、valgrind --vgdb = yes --vgdb-error = 0 可执…

C++模式学习------工厂模式
工厂模式属于创建型模式,大致可以分为简单工厂模式、抽象工厂模式。 简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品。 1 enum PTYPE2 {3 ProdA 0,4 ProdB 15 };6 7 class ProductBase8 {9 public: 10 v…

JavaScript中正则表达式学习(一)
2019独角兽企业重金招聘Python工程师标准>>> 1.判断是不是手机号码(实际判断是不是11位数字,可以用\d来匹配数字) 表单部分代码: <form name"form1" > <lable>请输入:</lable>…

深度 | 推荐系统评估
作者 | gongyouliu 来源 | 大数据工程师作者在上篇文章《推荐系统的工程实现》中提到推荐系统要很好地落地到业务中,需要搭建支撑模块,其中效果评估模块就是其中非常重要的一个。本篇文章作者来详细说明怎么评估(Evaluating)推荐系统的效果,…

【linux】Valgrind工具集详解(七):Memcheck(内存错误检测器)
一、概述 Memcheck是一个内存错误检测器。它可以检测C和C ++程序中常见的以下问题: 1、非法内存:如越界、释放后继续访问; 2、使用未初始化的值; 3、释放内存错误:如double-free(同一内存上执行了两次free)、或者 malloc、new、new[] 与 free、delete、delete[]错配使用…

Kafka系列三 java API操作
使用java API操作kafka 1.pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.x…