close

因工作需要,須把程式內訊息寫到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的資訊

未命名   

 

 

 

arrow
arrow
    全站熱搜

    抹茶獅子 發表在 痞客邦 留言(0) 人氣()