logstashログイベントには、プロパティファイルで構成されている場合はスタックトレース情報が含まれますが、Javaコードで構成されている場合は含まれません。

オウルベア

私は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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ