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

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

新規登録して質問してみよう
ただいま回答率
87.20%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Apache log4j

Apache log4jは、Javaのログユーティリティです。Apache Software Foundationの元で開発されており、Apache Software Liense 2としてライセンスが与えられています。

解決済

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

fishStory
fishStory

総合スコア10

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Apache log4j

Apache log4jは、Javaのログユーティリティです。Apache Software Foundationの元で開発されており、Apache Software Liense 2としてライセンスが与えられています。

1回答

0評価

0クリップ

1073閲覧

投稿2020/02/14 12:46

編集2020/02/17 10:30

##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} &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追記

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>

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

dodox86

2020/02/14 17:36

様々な要素が絡んでいるので必ずしも初心者さんの質問とは思いませんが、例えば「java log4j syslog xml」などと検索すると関連ページがいくつもヒットします。それらをご覧の上でのご質問でしょうか。
asahina1979

2020/02/16 13:56

標準なら logback であって log4j じゃないですけど
fishStory

2020/02/17 04:32

dodox86様 回答ありがとうございます。Googleで一通り調べて上記のxmlを作成したものの、反映されないため質問させていただきました。
fishStory

2020/02/17 04:39 編集

asahina1979様 logback で通常のログは出力できているのですが、syslogの設定の仕方を検索しても見つけることができませんでした。そのため、log4jであればSpringbootでも使用でき、回答いただける方も多いかと思い質問しました。 Logback Syslogで検索したところそれらしいものが以下しか見つからなかったのですが、もしよい参考サイトをご存知であれば教えていただけるでしょうか。 https://www.itdaan.com/tw/ee390e85bd34
dodox86

2020/02/17 04:54

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

2020/02/17 05:53

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

2020/02/17 10:38 編集

dodox86様、asahina1979様 教えていただいたサイトを参考に、Lockbackでログ設定をしました。 appenderはテスト用のSTDOUTと本番用のFILE、シスログ用のSYSLOGを作成しました。 作成したxmlは上記に追記しています。 SYSLOGがなければSTDOUTとFILEは正常に動くのですが、SYSLOGの設定を記載するとコンソールとファイルには何も表示されなくなります。 SYSLOGも動いているかわからず、eclipseのコンソールに何も記載されなくなります。 目標としては、debug,info,warnning,errorはアプリログとしてFILEの設定に表示され、error時に任意でSyslogにメッセージを表示したいです。 追記したlogback.xmlをどのように変更すればよいでしょうか。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Apache log4j

Apache log4jは、Javaのログユーティリティです。Apache Software Foundationの元で開発されており、Apache Software Liense 2としてライセンスが与えられています。