摘要:想要看級別的信息,你需要在啟動時傳入這個系統(tǒng)屬性使用與日志現在我們可以試驗并更換不同的日志實現,但你的程序代碼可以保持不變。我們要做的是用另一個流行的日志實現來替換掉,比如。又一次,我們必須對我們選的每一個日志實現做配置。
使用slf4j庫作為你的Java應用日志API層有很多好處,這里我會展示一小部分關于如何使用和配置它的例子。
你可以把slf4j想成一個Java的接口,然后你需要實現這個接口,從而在運行時提供實際的日志記錄,例如把日志寫到控制臺(STDOUT)或者一個文件上等等。每種實現(或成為綁定)都顯而易見地有他們自己的方式來配置日志的輸出,但是你的應用對實現者并無感知并且一直使用相同的org.slf4j.Logger API。讓我們看看如何在實際中使用它。
使用slf4j做簡單的日志記錄創(chuàng)建基于Maven的工程,在pom.xml中添加如下內容
org.slf4j slf4j-api 1.7.5
現在你可以在你的Java代碼中這樣使用Logger
package deng; import org.slf4j.*; public class Hello { static Logger LOGGER = LoggerFactory.getLogger(Hello.class); public static void main(String[] args) { for (int i = 0; i < 10; i++) if (i % 2 == 0) LOGGER.info("Hello {}", i); else LOGGER.debug("I am on index {}", i); } }
以上代碼可以編譯通過,但是當你運行它時,你會看到這樣的輸出
bash> java deng.Hello SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
上面的意思是,在運行時,你沒有做日志的實現(或者說日志的綁定),所以slf4j簡簡單單的使用了一個什么也不會做的空實現。
為了看到正確的輸出,你應該嘗試使用一個簡單(simple)的實現,這個實現根本不需要任何配置!只要回到pom.xml然后添加如下配置
org.slf4j slf4j-simple 1.7.5
現在你可以在控制臺(STDOUT)看見INFO級別的日志輸出了。這個簡單的logger會默認顯示任何INFO或者更高級別的信息。想要看DEBUG級別的信息,你需要在Java啟動時傳入這個系統(tǒng)屬性(system property)
使用slf4j與Log4j日志-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG
現在我們可以試驗并更換不同的日志實現,但你的程序代碼可以保持不變。
我們要做的是用另一個流行的日志實現來替換掉slf4j-simple,比如Log4j。
org.slf4j slf4j-log4j12 1.7.5
又一次,我們必須對我們選的每一個日志實現做配置。在這個例子中,我們需要一個文件src/main/resources/log4j.properties。
log4j.rootLogger=DEBUG, STDOUT log4j.logger.deng=INFO log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
重運行你的程序,你會看到同樣的輸出結果。
使用slf4j和JDK日志JDK實際上帶有一個日志包,你可以在pom.xml中替換為另一個日志實現。
org.slf4j slf4j-jdk14 1.7.5
現在JDK日志的配置起來有一點困難。這里不僅需要一個配置文件src/main/resources/logging.properties,你還需要添加一個系統(tǒng)屬性
-Djava.util.logging.config.file=logging.properties
這是一個logging.properties的示例
使用slf4j和Logback日志level=INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
deng.level=FINEST
Logback日志實現是一個高質量的實現。如果你想在項目中寫認真的代碼,你會想要考慮這中方式。還是修改你的pom.xml文件,替換成這樣
ch.qos.logback logback-classic 1.0.13
這是一個簡單的配置src/main/resources/logback.xml
用slf4j寫你自己的日志庫%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
如果你正在很多終端用戶(END USER)提供Java庫,那么讓你的項目僅依賴slf4j-api絕對是個好想法,然后讓你的用戶在他們開發(fā)和運營環(huán)境中選擇任意的日志實現。作為終端用戶,他們可以快速地從上面提到的日志庫中選擇一個,并且從他們自己喜歡的日志實現的特性中受益。
翻譯自: How to Configure SLF4J with Different Logger Implementations
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64620.html
摘要:這篇文章是邊聽尚硅谷的課程邊記的筆記,也是為了之后方便查看,視頻鏈接精彩的故事小張負責一個大型系統(tǒng)的開發(fā),為了監(jiān)控系統(tǒng)的運行狀況,系統(tǒng)中包含大量的語句,為了更好地管理呢,小張決定寫一個日志框架對日志進行管理,他設想的日志框架應該包含以下幾個 這篇文章是邊聽尚硅谷的課程邊記的筆記,也是為了之后方便查看,視頻鏈接:https://www.bilibili.com/vide... 1. 精彩...
摘要:日志消息,是換行符如果使用作為日志配置文件,還要使用功能,會有以下錯誤切換日志框架可以按照的日志適配圖,進行相關的切換的方式切換為 三、日志 1、日志框架 小張;開發(fā)一個大型系統(tǒng); 1、System.out.println();將關鍵數據打印在控制臺;去掉?寫在一個文件? 2、框架來記錄系統(tǒng)的一些運行時信息;日志框架 ; zhanglogging.jar; 3、高大上的幾個功能?異步...
摘要:深入學習系列三那些年我們用過的日志框架目前常見的日志框架和中文似乎不太好翻譯有一下幾種即其中,為同一個作者所寫。如前面所述,在才被引入,在這之前,并沒有官方的日志庫供開發(fā)者使用。 title: 【Java深入學習系列】三. 那些年我們用過的日志框架date: 2016-10-16 15:32:50 category: java 目前常見的Java日志框架和facades(中文似乎不太好...
摘要:本文要來分享給大家程序員最常用的日志框架組件。沒有基礎的同學也不要著急,這套教程覆蓋了目前所有的日志框架,只要你學,就一定用得到,先收藏,以備不時之需。 作為一名Java程序員,我們開發(fā)了很多Java應用程序,包括桌面應用、WEB應用以及移動應用。然而日志系統(tǒng)是一個成熟Java應用所必不可少的。在開發(fā)和調試階段,日志可以幫...
閱讀 2256·2021-11-25 09:43
閱讀 3123·2021-10-14 09:42
閱讀 3484·2021-10-12 10:12
閱讀 1526·2021-09-07 10:17
閱讀 1901·2019-08-30 15:54
閱讀 3181·2019-08-30 15:54
閱讀 1550·2019-08-30 15:53
閱讀 1908·2019-08-29 11:21