013_logback中的SyslogAppender
1. syslog協(xié)議很簡(jiǎn)單: syslog發(fā)送者發(fā)送一小段信息到syslog服務(wù)器。接收者一般稱為"syslog守護(hù)進(jìn)程"或"syslog服務(wù)器"。Logback能向遠(yuǎn)程syslog守護(hù)進(jìn)程發(fā)送消息。實(shí)現(xiàn)辦法是SyslogAppender。
2. 下面是SyslogAppender的屬性
3. 記錄事件在syslog里的嚴(yán)重程度是從記錄事件的級(jí)別轉(zhuǎn)換而來(lái)的。DEBUG級(jí)別轉(zhuǎn)換為7, INFO是6, WRAN是4, ERROR是3。
4. 由于syslog請(qǐng)求的格式遵循相當(dāng)嚴(yán)格的規(guī)則, 所以SyslogAppender沒有用到任何layout。但是, 用"SuffixPattern"選項(xiàng)能顯示用戶所希望看到的任何信息。
5. 例子
5.1. 新建一個(gè)名為SyslogAppender的Java項(xiàng)目, 同時(shí)添加相關(guān)jar包
5.2. 在src目錄下創(chuàng)建logback.xml
<configuration debug="true"><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%-4relative [%thread] %-5level - %msg%n</pattern></encoder></appender><appender name="syslog" class="ch.qos.logback.classic.net.SyslogAppender"> <syslogHost>192.168.25.137</syslogHost> <facility>LOCAL7</facility> <port>514</port><suffixPattern>%-4relative [%thread] %-5level - %msg</suffixPattern></appender><root level="debug"><appender-ref ref="stdout" /><appender-ref ref="syslog" /></root></configuration>5.3. 創(chuàng)建Syslog.java
package com.fj;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class Syslog {private static final Logger logger = LoggerFactory.getLogger(Syslog.class);public static void main(String[] args) {for(int i = 0; i < 100; i++) {logger.error("syslog協(xié)議很簡(jiǎn)單: syslog發(fā)送者發(fā)送一小段信息到syslog服務(wù)器。");logger.warn("接收者一般稱為\"syslog守護(hù)進(jìn)程\"或\"syslog服務(wù)器\"。");logger.info("Logback能向遠(yuǎn)程syslog守護(hù)進(jìn)程發(fā)送消息。");logger.debug("實(shí)現(xiàn)辦法是SyslogAppender。");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}} }5.4. 在大多數(shù)據(jù)的Linux發(fā)行版中, rsyslog是一個(gè)預(yù)先安裝的標(biāo)準(zhǔn)日志后臺(tái)進(jìn)程。在客戶端/服務(wù)端的系統(tǒng)配置中, rsyslog能扮演兩個(gè)角色; 作為一個(gè)日志服務(wù)器能從其它設(shè)備收集日志信息, 而作為一個(gè)日志客戶端, rsyslog發(fā)送自己內(nèi)部日志信息到遠(yuǎn)程日志服務(wù)器。
5.5. rsyslog守護(hù)進(jìn)程來(lái)自于當(dāng)前的linux發(fā)布版本的預(yù)裝模塊, 但是默認(rèn)并沒有啟動(dòng)。為了能夠讓rsyslog守護(hù)進(jìn)程能夠接受外部的消息, 需要編輯其配置文件/etc/rsyslog.conf。
5.6. 打開文件進(jìn)行編輯, 查找到下面的兩行所在的位置, 刪除其行首的#字符來(lái)取消注釋, 這會(huì)使得rsysolog守護(hù)進(jìn)程能夠在UDP端口514上接受日志消息了, UDP是一種比TCP速度快, 但是并不具有TCP一樣的數(shù)據(jù)流的可靠性。所以如果你需要使用可靠的傳送機(jī)制, 就可以通過(guò)取消以下行的注釋。
5.7. 接下來(lái)的這步, 需要我們來(lái)為遠(yuǎn)程消息創(chuàng)建模板, 并告知rsyslog守護(hù)進(jìn)程如何記錄從其他客戶端機(jī)器所接受到的消息。還是編輯/etc/rsyslog.conf, 找到GLOBAL DIRECTIVE塊, 追加以下的模板
$template RemoteLogs,"/var/log/%HOSTNAME%/logback.log" * *.* ?RemoteLogs & ~5.8. $template RemoteLogs(這里"RemoteLogs"字符串可以為任何其他的描述性的名稱)指令使rsyslog后臺(tái)進(jìn)程將日志消息寫到/var/log下的單獨(dú)的本地日志文件中, 其中日志文件的名稱是基于遠(yuǎn)程日志發(fā)送機(jī)器的主機(jī)名以及l(fā)ogback.log進(jìn)行定義的。
5.9. 其中第二行暗示了我們將RemoteLogs模板應(yīng)用到所有接收到的日志上。
5.10. 符號(hào)"& ~"表示了一個(gè)重定向規(guī)則, 被用來(lái)告知rsyslog守護(hù)進(jìn)程停止對(duì)日志消息的進(jìn)一步處理, 并且不要在本地寫入。如果沒有使用該重定向規(guī)則, 那么所有的遠(yuǎn)程消息都會(huì)在寫入上述描述的日志文件之外同時(shí)被寫入到本地日志文件, 這就意味著日志消息實(shí)際上被寫了兩次。使用該規(guī)則的另外一個(gè)結(jié)果就是syslog服務(wù)器本身的日志消息只會(huì)被以該機(jī)器主機(jī)名命名的專有文件中。
5.11. 修改后的GLOBAL DIRECTIVE塊
5.12. 運(yùn)行項(xiàng)目, 查看日志文件位置
5.13. 查看日志文件
總結(jié)
以上是生活随笔為你收集整理的013_logback中的SyslogAppender的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 009_Gson版本支持
- 下一篇: 014_logback中的Sifting