结合使用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 type
         ch.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.ConsoleAppender

import static ch.qos.logback.classic.Level.DEBUG
import static ch.qos.logback.classic.Level.INFO

appender("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

SLF4J、log4j和logbackJava的三个不同的日志框架。SLF4JJava的一个日志门面,它提供了一些通用的API,可以与不同的具体日志框架集成使用。log4j是一个具体的日志框架,它提供了丰富的功能和配置选项。logback则是由log4j的作者设计完成的一个日志框架,它拥有更好的特性,并且是SLF4J的原生实现。 区别如下: 1. SLF4J是一个日志门面,它只提供了一些通用的API,而不是具体的实现。它的作用是为了让开发人员可以在不同的日志框架之间进行切换和集成,而不需要修改代码。 2. log4j是一个具体的日志框架,它提供了丰富的功能和配置选项。log4j可以与SLF4J结合使用,需要提供一些对应的jar包。 3. logback是由log4j的作者设计完成的日志框架,它是SLF4J的原生实现。logback拥有更好的特性,并且可以完整地实现SLF4J的API。logback包括了三个模块:logback-core、logback-classic和logback-access,分别用于提供基础功能、改良版本以及与Servlet容器集成。 因此,SLF4J提供了通用的日志接口,log4j是其中一个具体的实现,而logback则是log4j的改良版本,同时也是SLF4J的原生实现。根据具体需求和偏好,开发人员可以选择使用其中的任意一个日志框架。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java日志框架SLF4J和log4j以及logback的联系和区别](https://blog.csdn.net/weixin_30241919/article/details/101487496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值