结合使用slf4j和Logback教程

在当前文章中,我将向您展示如何配置您的应用程序以使用slf4j和logback作为记录器解决方案。

Java简单日志记录外观(slf4j)是各种日志记录框架的简单外观,例如JDK日志记录(java.util.logging),log4j或logback。 即使它包含绑定的tat,也会将所有记录器操作委派给另一个称为jakarta commons logging(JCL)的众所周知的记录界面。

Logback是log4j记录器API的后继者,实际上,两个项目具有相同的父项,但是logback提供了优于log4j的一些优点,例如更好的性能和更少的内存消耗,自动重载配置文件或筛选功能,以列举一些功能。

slf4j的本机实现是logback,因此将两者用作记录器框架都意味着零内存和计算开销。

首先,我们将slf4j和logback作为依赖项添加到pom中。

<properties><slf4j.version>1.6.4</slf4j.version><logback.version>1.0.1</logback.version>
</properties><dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>${logback.version}</version></dependency></dependencies>

请注意,三个文件是必需的,一个文件用于slf4j,两个文件用于注销。 最后两个依赖项将根据您的日志记录框架而变化,例如,如果您仍然想使用log4j,我们将拥有log4j依赖项本身和slf4j-log4j12,而不是具有logback依赖项。

下一步是创建配置文件。 Logback支持两种格式的配置文件,即传统方式,使用XML或Groovy DSL样式。 让我们从传统方式开始,我们将在类路径中创建一个名为logback.xml的文件。 文件名是必需的,但logback-test.xml也是有效的。 如果两个文件都在类路径中找到,则将使用以-test结尾的文件。

<?xml version="1.0" encoding="UTF-8"?><configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoder by default --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern></encoder></appender><logger name="com.lordofthejars.foo" level="INFO" additivity="false"><appender-ref ref="STDOUT" /></logger><!-- Strictly speaking, the level attribute is not necessary since --><!-- the level of the root level is set to DEBUG by default.       --><root level="DEBUG">          <appender-ref ref="STDOUT" /></root>  </configuration>

一般而言,文件非常直观,我们定义了追加程序(日志消息的输出),在此情况下,它定义为控制台,模式,最后是foo中存在的类的根级别记录器(DEBUG)和不同级别的记录器(INFO)包。

显然,这种格式比典型的log4j.properties更具可读性。 回想一下可加性属性,名为STDOUT的附加程序已附加到两个记录器,root和com.lordofthejars.foo。 因为根记录器是所有记录器的祖先,所以com.lordofthejars.foo记录器发出的记录请求将被输出两次。 为避免这种情况,您可以将additivity属性设置为false,并且消息将仅打印一次。

现在让我们创建将使用slf4j的类。 在com.lordofthejars.bar上创建了名为BarComponent的第一类:

public class BarComponent {private static final Logger logger = LoggerFactory.getLogger(BarComponent.class);public void bar() {String name = "lordofthejars";logger.info("Hello from Bar.");logger.debug("In bar my name is {}.", name);}}

请注意与log4j有两个大区别。 第一个是在每个日志调用之上不再需要典型的if结构。 另一个是一对“ {}”。 仅在评估是否记录后,logback才会格式化消息,并用给定的字符串值替换“ {}”。

另一个名为FooComponent的是在com.lordofthejars.foo中创建的:

public class FooComponent {private static final Logger logger = LoggerFactory.getLogger(FooComponent.class);public void foo() {String name = "Alex";logger.info("Hello from Foo.");logger.debug("In foo my name is {}.", name);}}

现在使用先前的配置调用foo和bar方法,生成的输出将是:

13:49:59.586 [main] INFO  c.l.b.BarComponent - Hello from Bar.
13:49:59.617 [main] DEBUG c.l.b.BarComponent - In bar today is 5/3/2012
13:49:59.618 [main] INFO  c.l.f.FooComponent - Hello from Foo.

请注意,没有显示foo方法中的调试行。 可以,因为我们已经设置为这种方式。

我们要采取的下一步是配置logback,但不是使用xml方法,而是使用groovy DSL方法。 Logback将优先选择groovy配置而不是xml配置,因此如果您混用配置方法,请记住这一点。

所以首先要做的是添加Groovy作为依赖项。

<dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy</artifactId><version>${groovy.version}</version><scope>runtime</scope>
</dependency>

然后,我们将创建以前使用groovy格式创建的相同配置。

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppenderimport static ch.qos.logback.classic.Level.DEBUG
import static ch.qos.logback.classic.Level.INFOappender("STDOUT", ConsoleAppender) {encoder(PatternLayoutEncoder) {pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} Groovy - %msg%n"}
}logger("com.lordofthejars.foo", INFO)
root(DEBUG, ["STDOUT"])

您可以将xml方法的相同参数标识为Groovy函数。

我希望您发现这篇文章有用,并且在下一个项目中,如果可以的话,将slf4j与logback结合使用,您的应用程序将比使用log4j进行记录运行得更快。

下载代码

参考:来自JCG合作伙伴 Alex Soto的slf4j和logback教程,来自One Jar To Rule Them All博客。


翻译自: https://www.javacodegeeks.com/2012/04/using-slf4j-with-logback-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?

问题描述需求&#xff1a;查询出每月 order_amount(订单金额) 排行前3的记录。例如对于2019-02&#xff0c;查询结果中就应该是这3条&#xff1a;解决方法MySQL 5.7 和 MySQL 8.0 有不同的处理方法。1. MySQL 5.7我们先写一个查询语句。根据 order_date 中的年、月&#xff0c;…

ACM第四站————最小生成树(普里姆算法)

对于一个带权的无向连通图&#xff0c;其每个生成树所有边上的权值之和可能不同&#xff0c;我们把所有边上权值之和最小的生成树称为图的最小生成树。 普里姆算法是以其中某一顶点为起点&#xff0c;逐步寻找各个顶点上最小权值的边来构建最小生成树。 其中运用到了回溯&#…

利用jenkins的api来完成相关工作流程的自动化

[本文出自天外归云的博客园] 背景 1. 实际工作中涉及到安卓客户端方面的测试&#xff0c;外推或运营部门经常会有很多的渠道&#xff0c;而每个渠道都对应着一个app的下载包&#xff0c;这些渠道都记录在安卓项目下的一个渠道列表文件中。外推或运营部门经常会有新的渠道产生&a…

拥有成本分析:Oracle WebLogic Server与JBoss

Crimson Consulting Group 撰写的非常有趣的白皮书 &#xff0c;比较了Weblogic和JBoss之间的拥有成本 。 尽管JBoss是免费的&#xff0c;但该白皮书却严肃地宣称&#xff0c;从长远来看&#xff0c;Weblogic更便宜。 尽管此研究是由Oracle赞助的&#xff0c;但它看起来非常严肃…

mysql limit 分页 0_Mysql分页之limit用法与limit优化

Mysql limit分页语句用法与Oracle和MS SqlServer相比&#xff0c;mysql的分页方法简单的让人想哭。--语法&#xff1a;SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset--举例&#xff1a;select * from table limit 5; --返回前5行select * from table limit 0…

与硒的集成测试

总览 我已经使用了一段时间&#xff0c;遇到了一些似乎可以使生活更轻松的事情。 我以为可以将其作为教程分享&#xff0c;所以我将向您介绍这些部分&#xff1a; 使用Maven设置Web项目&#xff0c;配置Selenium以在CI上作为集成测试运行 寻找使用“页面对象”为网站中的页面…

linux每天一小步---sed命令详解

1 命令功能 sed是一个相当强大的文件处理编辑工具&#xff0c;sed用来替换&#xff0c;删除&#xff0c;更新文件中的内容。sed以文本行为单位进行处理&#xff0c;一次处理一行内容。首先sed吧当前处理的行存储在临时的缓冲区中&#xff08;称为模式空间pattern space&#xf…

mysql trace工具_100% 展示 MySQL 语句执行的神器-Optimizer Trace

在上一篇文章《用Explain 命令分析 MySQL 的 SQL 执行》中&#xff0c;我们讲解了 Explain 命令的详细使用。但是它只能展示 SQL 语句的执行计划&#xff0c;无法展示为什么一些其他的执行计划未被选择&#xff0c;比如说明明有索引&#xff0c;但是为什么查询时未使用索引等。…

MOXy作为您的JAX-RS JSON提供程序–服务器端

在以前的系列文章中&#xff0c;我介绍了如何利用EclipseLink JAXB&#xff08;MOXy&#xff09;创建RESTful数据访问服务。 在本文中&#xff0c;我将介绍在服务器端利用MOXy的新JSON绑定添加对基于JAXB映射的JSON消息的支持有多么容易。 MOXy作为您的JAX-RS JSON提供程序–服…

006_过滤器

过滤器 过滤器&#xff08;Filter&#xff09;把附加逻辑注入到MVC框的请求处理&#xff0c;实现了交叉关注。所谓交叉关注&#xff08;Cross-Cutting Concerns&#xff09;&#xff0c;是指可以用于整个应用程序&#xff0c;而又不适合放置在某个局部位置的功能&#xff0c;否…

Android_项目文件结构目录分析

android项目文件结构目录分析 在此我们新建了一个helloworld的项目&#xff0c;先看一些目录结构&#xff1a; 这么多的文件夹和文件中&#xff0c;我们重点关注是res目录、src目录、AndroidManifest.xml文件&#xff1a; 一、res目录主要是用来存放android项目的各种资源文件&…

实体 联系 模型mysql_数据库系统概念读书笔记――实体-联系模型_MySQL

bitsCN.com数据库系统概念读书笔记——实体-联系模型前言为了重新回顾我写的消息系统架构&#xff0c;我需要重新读一下数据库系统概念的前三章&#xff0c;这里简单的做一个笔记&#xff0c;方便自己回顾基本概念实体-联系(E-R)数据模型基于对现实世界的这样一种认识&#xff…

使用Twitter Bootstrap,WebSocket,Akka和OpenLayers玩(2.0)

原始帖子可以在ekito网站上找到。 对于我们的一位客户&#xff0c;我们需要显示一张具有实时更新的车辆位置的地图。 因此&#xff0c;我开始使用Play制作原型&#xff01; 框架及其最新发布的版本2.0&#xff0c;使用Java API。 我从Play的网络聊天室开始&#xff01; 2.0个样…

同步时间

同步时间 [rootlocalhost 03]# ntpdate 0.centos.pool.ntp.org 转载于:https://www.cnblogs.com/cglWorkBook/p/5556920.html

mysql 5.6.23免安装_mysql5.6.23免安装配置

1.官网下载&#xff0c;并解压2.环境变量&#xff0c;path下&#xff0c;追加mysql的bin路径D:\Program Files\mysql\bin;3.mysql目录下的my-default.ini重命名为my.ini&#xff0c;并添加下面的代码basedirD:/Program Files/mysql #mysql路径datadirD:/Program Files/mysql/d…

在Intellij IDEA中运行Vaadin应用

在本文中&#xff0c;我将向您展示如何使用Intellij IDEA运行vaadin应用程序。 Vaadin提供了一些用于Eclipse和Netbeans的插件。 但是对于Intellij IDEA来说&#xff0c;还没有插件。 但是部署vaadin应用程序比其他两个IDE容易。 这是您要遵循的步骤。 1.首先创建一个新项目&am…

mysql主从数据库

Mysql主从配置&#xff0c;实现读写分离 大型网站为了软解大量的并发访问&#xff0c;除了在网站实现分布式负载均衡&#xff0c;远远不够。到了数据业务层、数据访问层&#xff0c;如果还是传统的数据结构&#xff0c;或者只是单单靠一台服务器扛&#xff0c;如此多的数据库连…

安装openstack时遇到的错误

学习opensatck的第一步是安装DevStack来进行本机操作 1. 下面命令没有权限&#xff0c;解决办法&#xff1a;切换到root用户下执行sudo -s echo "stack ALL(ALL) NOPASSWD: ALL" >> /etc/sudoers2. 执行下面命令提示没有git&#xff0c;解决办法&#xff1a;su…

Java EE 6示例– Galleria –第3部分

关于Galleria示例的先前文章&#xff08; 第1 部分 | 第2部分 | 第3部分 | 第4部分 &#xff09;指导您完成基础知识以及对GlassFish和WebLogic的初始部署。 从今天开始&#xff0c;我尝试在其中添加一些企业级功能&#xff0c;因为我发现他们在自己的项目中提出了很多要求。 我…