私はLog4jとlogstashの使用に比較的慣れていません。Log4jとソケットアペンダーを使用して、ログイベントをlogstash-1.4.2にプッシュし、次にElasticsearch-1.1.1にプッシュしてストレージを作成しています。
外部プロパティファイル(log4j.properties)とJavaコードを介してログプロパティを生成しようとしました。どちらのアプローチも、1つの例外を除いて機能するようです。コードで指定されたプロパティで作成されたログイベントは、外部プロパティファイルで生成されたものが生成するスタックトレース情報を生成しません。
logstashのドキュメントとApacheLog4Jのドキュメントを調べて、これが発生する理由があるかどうかを確認しましたが、何も見つかりませんでした。これには外部プロパティファイルを使用するのが好ましい方法のようですが、ここで何が起こっているのかを理解したいと思います。
プロパティファイルを利用してPropertyConfiguratorを使用すると、すべてのスタックトレース情報が取得されます。
log4j.properties
log4j.rootLogger=DEBUG, server
###SocketAppender###
log4j.appender.server=org.apache.log4j.net.SocketAppender
log4j.appender.server.Port=9500
log4j.appender.server.RemoteHost=localhost
log4j.appender.server.ReconnectionDelay=10000
LoggingTestClass.java
Logger logger = Logger.getLogger(LoggingTestClass.class.getName());
PropertyConfigurator.configure("log4j.properties");
logger.debug("debug message");
logger.error("error message");
-これにより、以下のログイベントが生成され、イベント内の次のすべてのクラス/ファイル/行/メソッド情報が含まれます。
"message": "debug message",
"@version": "1",
"@timestamp": "2014-08-08T16:08:10.423Z",
"type": "testLogs",
"host": "127.0.0.1:59979",
"path": "log4J.LoggingTestClass",
"priority": "DEBUG",
"logger_name": "log4J.LoggingTestClass",
"thread": "main",
"class": "log4J.LoggingTestClass",
"file": "LoggingTestClass.java:20",
"method": "init"
ただし、SocketAppenderオブジェクトを作成し、Javaクラスでプロパティを指定すると、ログイベントが発生しますが、スタックトレース情報が欠落しています。
LoggingTestClass.java
Logger rootLogger = Logger.getRootLogger();
SocketAppender sa = new SocketAppender("localhost", 9500);
sa.setPort(9500);
sa.setRemoteHost("localhost");
sa.setReconnectionDelay(10000);
sa.activateOptions();
logger.addAppender(sa);
logger.debug("debug message");
logger.error("error message");
これにより、結果のログイベントのクラス/ファイル/行/メソッド情報が欠落していることを除いて、ログイベントに同じ情報が生成されます。
"message": "debug message",
"@version": "1",
"@timestamp": "2014-08-08T14:27:27.522Z",
"type": "testLogs",
"host": "127.0.0.1:62135",
"path": "log4J.LoggingTestClass",
"priority": "DEBUG",
"logger_name": "log4J.LoggingTestClass",
"thread": "main",
"class": "?",
"file": "?:?",
"method": "?"
私のlogstash構成:
ESLogConfig.txt
input {
log4j {
mode => "server"
port => 9500
type => Log4j
}
}
output {
stdout { }
elasticsearch {
cluster => "aaronCluster"
}
}
おそらく、SocketAppenderオブジェクトのセットアップ中に私が怠っていることがありますか?
これに関する助けをいただければ幸いです。ありがとう。
試してみましたか?https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html#setLocationInfo%28boolean%29にsocketAppender.setLocationInformation(true)
従ってください。を使用して構成するとこれPropertyConfigurator
が設定される理由はわかりませんが、ドキュメントにはfalse
デフォルトで設定されていると記載されています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加