##JavaでLog4jを使ってSyslogにログ出力したい
#前提・実現したいこと
Java初心者のため、かなり基本的な質問で申し訳ないですが、よろしくお願いします。
JavaでLog4jを使用してLinuxサーバのSyslogに以下の形式のログを出力したいです。
どうやったらシスログに出力できるか、xmlの形式を読み込めるかを教えていただけないでしょうか。
いくつか形式を変えたLogを作成したいため、appenderを呼び分け、出力するファイルを分ける方法もご教授いただけると嬉しいです。
####形式
MM DD hh:mm:ss <ファシリティ.プライオリティ> ホスト名 メッセージ
####具体例
Jan 24 03:29:06 <local6.err> hostname : ERROR: Application down
#環境
- Eclipse IDE for Enterprise Java Developers.
Version: 2019-12 (4.14.0)
- OS windows8(64bit)
- JavaSE 1.8
- Springbootフレームワーク
開発は上記Windows環境で実施していますが、最終的にはwarにしてLinuxで動かします。
#作成したJavaソース
/src/main/java/com/example/demo/test.java
JAVA
import org.apache.log4j.Logger; public class test { public static void main(String[] args) { Logger logger = Logger.getLogger(test.class.getName()); // ログ出力 logger.error("ERROR: Application down"); }
src/main/java/com/example/demo/log4j.xml
log4jxml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="syslog" class="org.apache.log4j.net.SyslogAppender"> <param name="syslogHost" value="localhost"/> <param name="facility" value="local6"/> <param name="FacilityPrinting" value="true"/> <layout class="org.apache.log4j.PatternLayout"> <param name="conversionPattern" value="%d{MM dd HH:mm:ss} <%p\>"/> </layout> </appender> <root> <priority value ="error"/> <appender-ref ref="syslog"/> </root> </log4j:configuration>
#実行結果
2020-02-14 21:24:54 ERROR test ERROR: Application down
そもそもxmlが読み込まれていないと思い「src/main/resources/log4j.xml」にも配置してみたのですが、意味がありませんでした。
##2020/02/17追記
logbackxml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- for debug --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="com.example.demo.AppLog" /> </encoder> </appender> <!-- log file --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>C:\Users\Desktop\messages.log</file> <append>true</append> <layout class="com.example.demo.AppLog" /> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>${LOG_DIR}/messages.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- keep 90 days' worth of history --> <maxHistory>90</maxHistory> </rollingPolicy> </appender> <!-- syslog ←この設定が入ると、SUDOUTとFILEがINFOレベルでも出力されなくなる --> <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> <syslogHost>localhost</syslogHost> <facility>local6</facility> <suffixPattern>[%thread] %logger %msg</suffixPattern> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> <root level="ERROR"> <appender-ref ref="SYSLOG" /> </root> </configuration>
まだ回答がついていません
会員登録して回答してみよう