結合使用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.pswp.cn/news/372896.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372896.shtml
英文地址,請注明出處:http://en.pswp.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;因為我發現他們在自己的項目中提出了很多要求。 我…