因工作需要,須把程式內訊息寫到Ubuntu的rsyslog。使用的環境是:Ubuntu14.4。
之前我並沒有使用過log4j,所以需要先去下載log4j的lib。然後include到專案中。再來,最麻煩的就是環境設定上。
Java是透過JVM在rum code,或許是這個原因(純屬猜測)所以需要走UDP 514的方式寫進rsyslog。如果不走514遠端寫入的方式,測試過是無法成功的。
首先先針對rsyslog.conf作設定,路徑為 /etc/rsyslog.conf(如果不是root權限,請愛用sudo)
上面兩行,即是開放514 port,以遠端寫入log的參數設定,下面的兩行是定義local7的log存放位置與檔名。此處的設定是將info訊息與debug分開兩個檔案,當然也可以針對local7的都寫在同一個檔案: local7* /var/log/檔名.log
local7通常是系統保留給使用者使用的,我曾經改為local2或local6,一樣都可以跑,但若有別的group需要用到,例如mail什麼的,可能就會有爭奪資源的現象,所以一般都建議以local7作為使用。
設定好之後,需要restart設定,指令:sudo service rsyslog restart
如果514還是沒有開放出來,請使用:sudo ufw allow 514/udp
接著要設定log4j的properties文件,我的設定如下:
log4j.rootLogger=info, SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=127.0.0.1
log4j.appender.syslog.Threshold=info
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.Header=true
log4j.appender.SYSLOG.Facility=local7
部分設定說明:
log4j.rootLogger =訊息的層級,logger的名稱
log4j.appender.SYSLOG.syslogHost=寫入機器的ip
log4j.appender.SYSLOG.Header=true,true為輸出account名稱,false會輸出host
log4j.appender.SYSLOG.Facility=local7
其他配置請參考:(配置的參數都可以拿來玩看看,寫出來的log會有差別,比較後,即可知道參數意義)
http://toyangel.pixnet.net/blog/post/32953401
http://sroselli.blogspot.tw/2013/10/log4j-syslogappender-and-rsyslog.html
最後寫一段驗證code(只要有下列兩行即可寫log):
Logger log = Logger.getLogger(ParserURL.class.getName());
log.info("My message");
如果改為 log.debug,相關的properties也要跟著改,訊息會多出很多系統的訊息,若只要單純看到我們寫入的訊息,只要用info就可以了。
確認是否真的有寫入log中,log的路徑為剛剛設定local7的路徑:
下列是我不同時間點寫入的,原本的appender就會帶time的資訊
留言列表