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

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

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

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

Apache log4j

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

Q&A

解決済

1回答

4310閲覧

最新log4j2でTcpSocketServerからのログ出力ができない

sweetfish

総合スコア24

Java

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

Apache log4j

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

0グッド

0クリップ

投稿2021/12/23 04:45

編集2022/05/11 10:52

前提・実現したいこと

log4j2のSocketAppenderを使用してログ出力を行う為、TcpSocketServerを使用しています。
log4j2のバージョンを2.17に上げる為、以下GitHubサイトからダウンロードしたソースを元にjarを作成し、同様にTcpSocketServerを起動し、ログ出力するようにしたいです。
★追記★「TcpSocketServer 」を「UdpSocketServer 」に変えて起動したところ、ログ用フォルダが作成されました。TcpSocketServer で作成されない原因を解決したいです。

発生している問題・エラーメッセージ

コマンドプロンプトから起動はできるようになりましたが、ログが出力されません。
(起動時にログ出力用のフォルダやファイルが生成されません)
①実行時の引数は妥当でしょうか?(特にconfigLocation(log4j2.xml)の部分)
②その他修正漏れ、設定漏れはないでしょうか?

該当のソースコード

 以下サイト(GitHub)からダウンロード(Testクラスを除く)
https://github.com/mtaketani113/logging-log4j-tools/tree/release-2.x/log4j-server
※pom.xmlの<parent>のversionは2.17.2を設定しています。

試したこと

①上記からダウンロードしたソースより、eclipse上でjarファイルを作成
テストクラス:JmsQueueReceiverTestでエラーが出る為、テストはスキップしています。
②JDKのjre\libフォルダに、jaxp.propertiesファイルを追加

javax.xml.stream.XMLInputFactory=com.sun.xml.internal.stream.XMLInputFactoryImpl javax.xml.stream.XMLOutputFactory=com.sun.xml.internal.stream.XMLOutputFactoryImpl

②コマンドプロンプトより、以下コマンドで起動(ファイル名やパス情報は仮の値です)
java -cp ./lib/* org.apache.logging.log4j.server.TcpSocketServer --wire-format=XML -a=localhost -p=4713 -c=C:/config/log4j2.xml
※-cの引数を「file:///C:/config/log4j2.xml」としても、現象が変わりませんでした。

その他
・デバッグでServerConfigurationFactoryクラスのメンバ変数pathに値が設定されていることは確認しました。
・コマンドプロンプトでTcpSocketServer起動後、タスクマネージャーでポート番号:4713に該当するプロセスが起動していることを確認しました。(netstatでポート番号確認後、該当のプロセスを確認)
・★追加★上記のコマンドで「TcpSocketServer 」を「UdpSocketServer 」に変えて起動したところ、ログ用フォルダが作成されました。
→デバッグしたところ、AbstractSocketServerのコンストラクタで、LogManager.getLogger呼び出し時にフォルダが生成されました。
同じメソッドをTcpSocketServer もUdpSocketServer も呼び出しているがTcpSocketServer の時は作成されないようです。
この原因が分かれば、解決するのではと考えています。

補足情報(FW/ツールのバージョンなど)

log4jバージョン:2.17.2
使用しているライブラリ log4j-api-2.17.2.jar、log4j-core-2.17.2.jar、log4j-web-2.17.2.jar
その他ライブラリ(クラスパスに格納):
jackson-annotations-2.13.1.jar
jackson-core-2.13.1.jar
jackson-databind-2.13.1.jar
jackson-dataformat-xml-2.13.1.jar
jboss-jms-api_1.1_spec-1.0.1.Final.jar
JDKバージョン:jdk1.8.0_152

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
解決方法:取得元ソースの変更
release-2.xブランチから取得したソースを使用したが、masterブランチのソースを使用した。
(理由1)
release-2.xブランチのソースの方が直近に更新されているが、TcpSocketServer.javaでコンフィグファイルを読み込めていなかった。試しに、以下修正を行ったところ、UdpSocketServerと同様にログ出力フォルダが作成されるようになった。
275~277行目の
if (cla.getConfigLocation() != null) {
ConfigurationFactory.setConfigurationFactory(new
ServerConfigurationFactory(cla.getConfigLocation()));
}
を、258行目の
final TcpSocketServer<? extends InputStream> socketServer;
の前に移動。
(理由2)
「理由1」の修正を行ってもログが出力されず、masterブランチのソースを確認したところ、「理由1」の記述になっていた。masterブランチから改めてjarを作成したところ、動作した。

現在のLog4j2の最新バージョンは2.18.0で、このバージョンでも動作できました。

投稿2022/07/16 00:35

編集2022/07/17 02:51
sweetfish

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問