質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.06%

JavaでLog4jを使ってSyslogにログ出力したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,123

score 10

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

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

<?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} &lt;%p\&gt;"/>
    </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追記

<?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>

 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dodox86

    2020/02/17 13:54

    質問が覆ってしまいすが、asahina1979さんご指摘のように、今現在の標準を使った方が良いでしょうね。
    LOGBack - 第4章 アペンダー のSyslogAppenderをご覧ください。
    http://logback.qos.ch/manual/appenders_ja.html

    キャンセル

  • asahina1979

    2020/02/17 14:53

    ちなみに、クラスが log4j~であっても標準はブリッジされています。

    キャンセル

  • fishStory

    2020/02/17 19:36 編集

    dodox86様、asahina1979様
    教えていただいたサイトを参考に、Lockbackでログ設定をしました。

    appenderはテスト用のSTDOUTと本番用のFILE、シスログ用のSYSLOGを作成しました。
    作成したxmlは上記に追記しています。
    SYSLOGがなければSTDOUTとFILEは正常に動くのですが、SYSLOGの設定を記載するとコンソールとファイルには何も表示されなくなります。
    SYSLOGも動いているかわからず、eclipseのコンソールに何も記載されなくなります。

    目標としては、debug,info,warnning,errorはアプリログとしてFILEの設定に表示され、error時に任意でSyslogにメッセージを表示したいです。
    追記したlogback.xmlをどのように変更すればよいでしょうか。

    キャンセル

回答 1

checkベストアンサー

+1

rootは一つのみ可能です。

http://logback.qos.ch/manual/filters_ja.html#levelFilter

http://logback.qos.ch/manual/filters_ja.html#thresholdFilter

を利用してエラー以上を指定してください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/19 15:19

    教えていただいた資料を参考に、目的のログを出すことができました!
    ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る