服務(wù)器端日志規(guī)約和實(shí)踐

一听隐、日志級別

ALL补鼻、TRACE、DEBUG雅任、INFO风范、WARN、ERROR沪么、FATAL硼婿、OFF

從左至右日志輸出由多到少。

生產(chǎn)環(huán)境使用INFO日志級別禽车,調(diào)試時可以設(shè)置為DEBUG級別寇漫。

針對Spring Boot的程序脖祈,使用配置中的logging.level.root控制默認(rèn)日志級別忆嗜。

啟動時可以使用logging.level.root參數(shù)做臨時設(shè)置。例如:

java -jar app.jar --logging.level.root=debug

二酣溃、日志分類

  1. 監(jiān)控日志

監(jiān)控系統(tǒng)內(nèi)關(guān)鍵點(diǎn)的動作钦勘,DEBUG級別可做打點(diǎn)使用陋葡,ERROR級別記錄程序異常。

  1. 業(yè)務(wù)日志

系統(tǒng)內(nèi)業(yè)務(wù)操作日志輸出彻采,例如:下單腐缤、支付捌归、后臺上下架商品等重要的操作。

  1. 統(tǒng)計(jì)日志

根據(jù)統(tǒng)計(jì)需要岭粤,對用戶操作進(jìn)行記錄惜索,例如:登錄、注冊剃浇、瀏覽商品等巾兆。

三、日志的觸發(fā)點(diǎn)和級別

  1. 監(jiān)控日志
觸發(fā)點(diǎn) 日志級別 例子
關(guān)鍵方法入口 DEBUG 記錄參數(shù)
調(diào)用外部服務(wù) DEBUG REST API調(diào)用返回?cái)?shù)據(jù)
耗時和資源占用高的方法 DEBUG 記錄處理時間虎囚、記錄資源消耗
定時任務(wù)啟動和結(jié)束 DEBUG 啟動時間及狀態(tài)角塑、結(jié)束時間及狀態(tài)
容錯及恢復(fù) DEBUG 用戶目錄不存在,重新建立用戶目錄
可處置的操作異常 WARN 用戶登錄失敗
無法處置的程序異常 ERROR logger.error(各類參數(shù)或者對象 toString + "_" + e.getMessage(), e);
主程序啟動和關(guān)閉 DEBUG 啟動時間及狀態(tài)淘讥、結(jié)束時間及狀態(tài)
重要配置或環(huán)境變量 DEBUG 配置圃伶,環(huán)境變量
  1. 業(yè)務(wù)日志
觸發(fā)點(diǎn) 日志級別 例子
業(yè)務(wù)操作執(zhí)行后 INFO 關(guān)鍵業(yè)務(wù)操作記錄執(zhí)行結(jié)果,執(zhí)行人
  1. 統(tǒng)計(jì)日志
觸發(fā)點(diǎn) 日志級別 例子
需要進(jìn)行統(tǒng)計(jì)的操作 INFO 記錄用戶訪問信息蒲列,IP窒朋、耗時、下載量蝗岖;記錄資源用量信息

四侥猩、日志收集方式

1. Fluentd

將日志發(fā)送到遠(yuǎn)程日志中心,由Fluentd進(jìn)行收集抵赢,Elasticsearch存儲欺劳,Kibana展示。

附logback配置文件片段铅鲤。
logger monitor/business/stats 分別對應(yīng) 監(jiān)控/業(yè)務(wù)/統(tǒng)計(jì)日志

<appender name="FLUENT" class="ch.qos.logback.more.appenders.FluencyLogbackAppender">
    <tag>${fluentTag}</tag>
    <remoteHost>${fluentHost}</remoteHost>
    <port>${fluentPort}</port>
    <fileBackupDir>${logPath}</fileBackupDir>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern><![CDATA[%msg]]></pattern>
    </layout>
</appender>
<logger name="monitor" class="ch.qos.logback.classic.AsyncAppender" additivity="false">
    <appender-ref ref="FLUENT" />
    <appender-ref ref="STDOUT" />
</logger>
<logger name="business" class="ch.qos.logback.classic.AsyncAppender" additivity="false">
    <appender-ref ref="FLUENT" />
</logger>
<logger name="stats" class="ch.qos.logback.classic.AsyncAppender" additivity="false">
    <appender-ref ref="FLUENT" />
</logger>

2. 控制臺

監(jiān)控日志還可以輸出到控制臺杰标。

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

3.文件

重要的日志可以輸出到文件作為備份。

可以設(shè)置保存文件個數(shù)和磁盤占用總?cè)萘肯拗啤?/p>

<appender name="FILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logPath}/business.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- hourly rollover -->
        <fileNamePattern>${logPath}/business.%d{yyyy-MM-dd-HH}.log</fileNamePattern>
        <!-- keep 30 days' worth of history capped at 3GB total size -->
        <maxHistory>30</maxHistory>
        <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
</appender>

五彩匕、記錄日志

參考阿里巴巴Java開發(fā)手冊

應(yīng)用中不可直接使用日志系統(tǒng)(Log4j、Logback)中的 API媒区,而應(yīng)依賴使用日志框架 SLF4J 中的 API驼仪,使用門面模式的日志框架,有利于維護(hù)和各個類的日志處理方式統(tǒng)一袜漩。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger monitorLogger = LoggerFactory.getLogger("monitor");
private static final Logger businessLogger = LoggerFactory.getLogger("business");
private static final Logger statsLogger = LoggerFactory.getLogger("stats");

接下來按照 三绪爸、日志的觸發(fā)點(diǎn)和級別 的說明,在程序中記錄日志宙攻。

注意點(diǎn):

  1. 使用占位符而不是字符串拼接

參考阿里巴巴Java開發(fā)手冊

說明:logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);
    如果日志級別是 warn奠货,上述日志不會打印,但是會執(zhí)行字符串拼接操作座掘,如果 symbol 是對象递惋, 會執(zhí)行 toString()方法柔滔,浪費(fèi)了系統(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);
  1. 異常輸出適當(dāng)?shù)娜罩?/li>

捕獲不可控的異常,應(yīng)該輸出現(xiàn)場信息和異常堆棧信息杉编,不要將異常再拋至上層超全,避免上層再次輸出。

日志例:

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

異常堆棧信息是多行邓馒,在Kibana中會出現(xiàn)多條嘶朱,不便于查看。建議在Fluent中添加合并插件光酣,將異常堆棧信息合并為一行再輸出到Elasticsearch疏遏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挂疆,隨后出現(xiàn)的幾起案子改览,更是在濱河造成了極大的恐慌,老刑警劉巖缤言,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宝当,死亡現(xiàn)場離奇詭異,居然都是意外死亡胆萧,警方通過查閱死者的電腦和手機(jī)庆揩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跌穗,“玉大人订晌,你說我怎么就攤上這事“鑫” “怎么了锈拨?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羹唠。 經(jīng)常有香客問我奕枢,道長,這世上最難降的妖魔是什么佩微? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任缝彬,我火速辦了婚禮,結(jié)果婚禮上哺眯,老公的妹妹穿的比我還像新娘谷浅。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布一疯。 她就那樣靜靜地躺著撼玄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪违施。 梳的紋絲不亂的頭發(fā)上互纯,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音磕蒲,去河邊找鬼留潦。 笑死,一個胖子當(dāng)著我的面吹牛辣往,可吹牛的內(nèi)容都是我干的兔院。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼站削,長吁一口氣:“原來是場噩夢啊……” “哼坊萝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起许起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤十偶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后园细,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惦积,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年猛频,在試婚紗的時候發(fā)現(xiàn)自己被綠了狮崩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹿寻,死狀恐怖睦柴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毡熏,我是刑警寧澤坦敌,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站痢法,受9級特大地震影響恬试,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疯暑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哑舒。 院中可真熱鬧妇拯,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甘凭,卻和暖如春稀拐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丹弱。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工德撬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人躲胳。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓蜓洪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坯苹。 傳聞我的和親對象是個殘疾皇子隆檀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353