日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java sl4j 日志_Java日志框架Slf4j+Log4j入门

發(fā)布時間:2025/3/20 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java sl4j 日志_Java日志框架Slf4j+Log4j入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.日志系統(tǒng)介紹

slf4j,即簡單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務(wù)于各種各樣的日志系統(tǒng)。簡答的講就是slf4j是一系列的日志接口,而log4j是具體實現(xiàn)了的日志框架。

slf4j與常用日志框架綁定關(guān)系

二.導(dǎo)入jar包

Maven導(dǎo)入slf4j和log4j,編輯pom.xml

org.slf4j

slf4j-log4j12

1.7.25

三.配置log4j

log4j日志框架配置,編輯resources/log4j.xml

log4j的xml配置方式基本步驟有3個,第一步:配置appender;第二步:配置logger;第三步:配置root。

四.日志調(diào)用示例

Slf4j初始化時自動查找CLASSPATH路徑下的log4j.xml配置文件

@Controller

@RequestMapping("/server")

public class IndexController {

private static final Logger LOGGER = LoggerFactory.getLogger(IndexController.class);

@ResponseBody

@RequestMapping("/hello")

public Object hello(String username) {

LOGGER.debug("Debug level log: username = " + username);

LOGGER.info("Info level log: username = " + username);

try {

throw new Exception("Error level log");

} catch (Exception e) {

LOGGER.error("Error level log: username = " + username, e);

}

return "hello " + username;

}

}

控制臺日志,輸出debug、info、error級別日志

日志文件log4j.log,輸出info和error級別日志,未輸出debug級別日志

五.日志輸出格式符號含義

%p:輸出日志信息優(yōu)先級,即TRACE,DEBUG,INFO,WARN,ERROR,FATAL

%d:輸出日志時間點的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式

%r:輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù)

%c:輸出日志信息所屬的類目,通常就是所在類的全名

%t:輸出產(chǎn)生該日志事件的線程名

%l:輸出日志事件的發(fā)生位置,相當(dāng)于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)

%x:輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中

%%:輸出一個"%"字符

%F:輸出日志消息產(chǎn)生時所在的文件名稱

%L:輸出代碼中的行號

%m:輸出代碼中指定的消息,產(chǎn)生的日志具體信息

%n:輸出一個回車換行符,Windows平臺為"/r/n",Unix平臺為"/n"輸出日志信息換行

六.阿里巴巴日志規(guī)約

1.【強制】應(yīng)用中不可直接使用日志系統(tǒng) (Log 4 j 、Logback) 中的 API ,而應(yīng)依賴使用日志框架SLF4J中的 API ,使用門面模式的日志框架,有利于維護和各個類的日志處理方式統(tǒng)一。

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(Abc.class);

2.【強制】日志文件推薦至少保存 15 天,因為有些異常具備以“周”為頻次發(fā)生的特點。

3.【強制】應(yīng)用中的擴展日志 ( 如打點、臨時監(jiān)控、訪問日志等 ) 命名方式:appName _ logType _ logName . log 。 logType :日志類型,推薦分類有stats / desc / monitor / visit 等 ;logName :日志描述。這種命名的好處:通過文件名就可知道日志文件屬于什么應(yīng)用,什么類型,什么目的,也有利于歸類查找。

正例: mppserver 應(yīng)用中單獨監(jiān)控時區(qū)轉(zhuǎn)換異常,如:

mppserver _ monitor _ timeZoneConvert . log

說明:推薦對日志進(jìn)行分類,如將錯誤日志和業(yè)務(wù)日志分開存放,便于開發(fā)人員查看,也便于通過日志對系統(tǒng)進(jìn)行及時監(jiān)控。

4.【強制】對 trace / debug / info 級別的日志輸出,必須使用條件輸出形式或者使用占位符的方式。

說明: logger . debug( " Processing trade with id : " + id + " and symbol : " + symbol);如果日志級別是 warn ,上述日志不會打印,但是會執(zhí)行字符串拼接操作,如果 symbol 是對象,會執(zhí)行 toString() 方法,浪費了系統(tǒng)資源,執(zhí)行了上述操作,最終日志卻沒有打印。

正例: ( 條件 )

if (logger.isDebugEnabled()) {

logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);

}

正例: ( 占位符 )

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

5.【強制】避免重復(fù)打印日志,浪費磁盤空間,務(wù)必在 log 4 j . xml 中設(shè)置 additivity = false 。

正例:

6.【強制】異常信息應(yīng)該包括兩類信息:案發(fā)現(xiàn)場信息和異常堆棧信息。如果不處理,那么通過關(guān)鍵字 throws 往上拋出。

正例: logger.error(各類參數(shù)或者對象 toString+ "_" + e.getMessage(), e);

7.【推薦】謹(jǐn)慎地記錄日志。生產(chǎn)環(huán)境禁止輸出 debug 日志 ; 有選擇地輸出 info 日志 ; 如果使用 warn 來記錄剛上線時的業(yè)務(wù)行為信息,一定要注意日志輸出量的問題,避免把服務(wù)器磁盤撐爆,并記得及時刪除這些觀察日志。

說明:大量地輸出無效日志,不利于系統(tǒng)性能提升,也不利于快速定位錯誤點。記錄日志時請思考:這些日志真的有人看嗎?看到這條日志你能做什么?能不能給問題排查帶來好處?

8.【參考】可以使用 warn 日志級別來記錄用戶輸入?yún)?shù)錯誤的情況,避免用戶投訴時,無所適從。注意日志輸出的級別, error 級別只記錄系統(tǒng)邏輯出錯、異常等重要的錯誤信息。如非必要,請不要在此場景打出 error 級別。

總結(jié)

以上是生活随笔為你收集整理的java sl4j 日志_Java日志框架Slf4j+Log4j入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。