1

ログをファイルに書き込むようにエラスティック検索を構成しています。DEBUG ログが Elastic Search を介して送信されると、ログとすべてのコールスタックが改行で区切られて書き込まれることがわかりました。

ログ ファイルにログを表示するだけで、コールスタックは表示したくありません。

ログの例を次に示します。

[2013-10-01 09:02:10,695][DEBUG][action.bulk] [Cap 'N Hawk] [metrics-2013.10.01][2] failed to execute bulk item (index) index {[metrics-2013.10.01][metrics][XTvepSybQZaUed6h4Xupag], source[{"..."}]}
org.elasticsearch.index.mapper.MapperParsingException: failed to parse [deviceTelephonyID]
    at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:396)
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:599)
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:467)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:507)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:451)
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:306)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:386)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:155)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:532)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:430)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.NumberFormatException: For input string: "NOTELEPHONY"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
    at java.lang.Double.parseDouble(Double.java:540)
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.doubleValue(AbstractXContentParser.java:95)
    at org.elasticsearch.index.mapper.core.DoubleFieldMapper.innerParseCreateField(DoubleFieldMapper.java:308)
    at org.elasticsearch.index.mapper.core.NumberFieldMapper.parseCreateField(NumberFieldMapper.java:167)
    at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:385)
    ... 12 more

私は追加しようとしました:

file:
  type: dailyRollingFile
  file: ${path.logs}/es_log.log
  datePattern: "'.'yyyy-MM-dd"
  layout:
    type: pattern
    conversionPattern: "[%d{ISO8601}][%p][%c] %m%n"
    alwaysWriteExceptions: false
    replace: 
      regex: "(\n.*)*"
      replacement: "" 

Elastic Search の logging.yml 構成に追加します。ごとに:

https://logging.apache.org/log4j/2.x/manual/layouts.html

単一のログエントリの最初の改行の後のすべてを空の文字列に置き換えて、次のようにすることを望んでいました。

[2013-10-01 09:02:10,695][DEBUG][action.bulk] [Cap 'N Hawk] [metrics-2013.10.01][2] failed to execute bulk item (index) index {[metrics-2013.10.01][metrics][XTvepSybQZaUed6h4Xupag], source[{"..."}]}

残念ながら、うまくいかないようです。誰でもこのアプローチの問題を見ることができますか。

この投稿: Log4j のフォーマット: スタックトレースを切り詰めることは可能ですか?

代替ソリューションを特定しているようですが、Elastic Search で構成できるかどうかはわかりません...

4

1 に答える 1

0

例外の印刷を無効にするには、レイアウトを正しく構成する必要があります。このためのレイアウトのパターンは%xEx{none}. レイアウトの任意の場所に配置するだけです。

置換が機能しない理由はわかりません。私の推測では、これを複数行の正規表現にするか、例外ではなくメッセージ自体にのみ正規表現を適用する必要があると思います。

とはいえ、ログで例外を抑制することは本当に良い方法だとは思いません。

これらの例外をログに記録しないようにシステムを構成するか (この特定のロガーの出力を抑制することにより)、数値以外の入力をより適切に処理するようにコードを変更します。すべての例外を無効にすると、重要な/実際のエラーも表示されなくなります。

于 2013-10-01T15:17:59.957 に答える