java sl4j 日志_Java日志框架Slf4j+Log4j入门
一.日志系統(tǒng)介紹
slf4j,即簡(jiǎn)單日志門(mén)面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務(wù)于各種各樣的日志系統(tǒng)。簡(jiǎn)答的講就是slf4j是一系列的日志接口,而log4j是具體實(shí)現(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個(gè),第一步:配置appender;第二步:配置logger;第三步:配置root。
四.日志調(diào)用示例
Slf4j初始化時(shí)自動(dòng)查找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;
}
}
控制臺(tái)日志,輸出debug、info、error級(jí)別日志
日志文件log4j.log,輸出info和error級(jí)別日志,未輸出debug級(jí)別日志
五.日志輸出格式符號(hào)含義
%p:輸出日志信息優(yōu)先級(jí),即TRACE,DEBUG,INFO,WARN,ERROR,FATAL
%d:輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式
%r:輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(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)用中
%%:輸出一個(gè)"%"字符
%F:輸出日志消息產(chǎn)生時(shí)所在的文件名稱
%L:輸出代碼中的行號(hào)
%m:輸出代碼中指定的消息,產(chǎn)生的日志具體信息
%n:輸出一個(gè)回車(chē)換行符,Windows平臺(tái)為"/r/n",Unix平臺(tái)為"/n"輸出日志信息換行
六.阿里巴巴日志規(guī)約
1.【強(qiáng)制】應(yīng)用中不可直接使用日志系統(tǒng) (Log 4 j 、Logback) 中的 API ,而應(yīng)依賴使用日志框架SLF4J中的 API ,使用門(mén)面模式的日志框架,有利于維護(hù)和各個(gè)類的日志處理方式統(tǒng)一。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
2.【強(qiáng)制】日志文件推薦至少保存 15 天,因?yàn)橛行┊惓>邆湟浴爸堋睘轭l次發(fā)生的特點(diǎn)。
3.【強(qiáng)制】應(yīng)用中的擴(kuò)展日志 ( 如打點(diǎn)、臨時(shí)監(jiān)控、訪問(wèn)日志等 ) 命名方式:appName _ logType _ logName . log 。 logType :日志類型,推薦分類有stats / desc / monitor / visit 等 ;logName :日志描述。這種命名的好處:通過(guò)文件名就可知道日志文件屬于什么應(yīng)用,什么類型,什么目的,也有利于歸類查找。
正例: mppserver 應(yīng)用中單獨(dú)監(jiān)控時(shí)區(qū)轉(zhuǎn)換異常,如:
mppserver _ monitor _ timeZoneConvert . log
說(shuō)明:推薦對(duì)日志進(jìn)行分類,如將錯(cuò)誤日志和業(yè)務(wù)日志分開(kāi)存放,便于開(kāi)發(fā)人員查看,也便于通過(guò)日志對(duì)系統(tǒng)進(jìn)行及時(shí)監(jiān)控。
4.【強(qiáng)制】對(duì) trace / debug / info 級(jí)別的日志輸出,必須使用條件輸出形式或者使用占位符的方式。
說(shuō)明: logger . debug( " Processing trade with id : " + id + " and symbol : " + symbol);如果日志級(jí)別是 warn ,上述日志不會(huì)打印,但是會(huì)執(zhí)行字符串拼接操作,如果 symbol 是對(duì)象,會(huì)執(zhí)行 toString() 方法,浪費(fèi)了系統(tǒng)資源,執(zhí)行了上述操作,最終日志卻沒(méi)有打印。
正例: ( 條件 )
if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);
}
正例: ( 占位符 )
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
5.【強(qiáng)制】避免重復(fù)打印日志,浪費(fèi)磁盤(pán)空間,務(wù)必在 log 4 j . xml 中設(shè)置 additivity = false 。
正例:
6.【強(qiáng)制】異常信息應(yīng)該包括兩類信息:案發(fā)現(xiàn)場(chǎng)信息和異常堆棧信息。如果不處理,那么通過(guò)關(guān)鍵字 throws 往上拋出。
正例: logger.error(各類參數(shù)或者對(duì)象 toString+ "_" + e.getMessage(), e);
7.【推薦】謹(jǐn)慎地記錄日志。生產(chǎn)環(huán)境禁止輸出 debug 日志 ; 有選擇地輸出 info 日志 ; 如果使用 warn 來(lái)記錄剛上線時(shí)的業(yè)務(wù)行為信息,一定要注意日志輸出量的問(wèn)題,避免把服務(wù)器磁盤(pán)撐爆,并記得及時(shí)刪除這些觀察日志。
說(shuō)明:大量地輸出無(wú)效日志,不利于系統(tǒng)性能提升,也不利于快速定位錯(cuò)誤點(diǎn)。記錄日志時(shí)請(qǐng)思考:這些日志真的有人看嗎?看到這條日志你能做什么?能不能給問(wèn)題排查帶來(lái)好處?
8.【參考】可以使用 warn 日志級(jí)別來(lái)記錄用戶輸入?yún)?shù)錯(cuò)誤的情況,避免用戶投訴時(shí),無(wú)所適從。注意日志輸出的級(jí)別, error 級(jí)別只記錄系統(tǒng)邏輯出錯(cuò)、異常等重要的錯(cuò)誤信息。如非必要,請(qǐng)不要在此場(chǎng)景打出 error 級(jí)別。
總結(jié)
以上是生活随笔為你收集整理的java sl4j 日志_Java日志框架Slf4j+Log4j入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux查询关键词上下行_Linux:
- 下一篇: 绘制pr曲线图_生存分析如何绘制事件发生