0

Я использую Logback и Logstash в приложении SpringBoot.LogBack - LogStash - добавление свойств в журнал и отправка их в Logstash

В logback.xml У меня есть свойство с именем службы, и как:

<configuration> 

<include resource="org/springframework/boot/logging/logback/defaults.xml" /> 

<include resource="org/springframework/boot/logging/logback/console-appender.xml" /> 

<property name="spring.application.name" calue="service"/> 

<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> 
    <destination>localhost:9600</destination> 
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"/> 
</appender> 

<root level="INFO"> 
    <appender-ref ref="CONSOLE" /> 
    <appender-ref ref="stash" /> 
</root> 

</configuration> 

конф файл Logstash, как:

input{ tcp{ 
     port=> 9600 
     host=>logstash 
    } 
} 

filter { 
grok { 
match => { 
    "message" => 
    "^%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:level}\s+%{NUMBER:pid}\s+---\s+\[\s*%{USERNAME:thread}\s*\]\s+%{JAVAFILE:class}\s*:\s*%{DATA:themessage}(?:\n+(?<stacktrace>(?:.|\r|\n)+))?$" 
} 
} 
date { 
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss.SSS" ] 
} 
mutate { 
remove_field => ["@version"] 
add_field => { 
    "appid" => "%{[path]}" 
} 
add_field => { 
    "levell" => "level" 
} 
add_field => { 
    "mensage" => "message" 
} 
} 
    } 
output{ 

elasticsearch { 
hosts => ["elasticsearch"] 
index => "indice" 
} 
    stdout{} 
} 

Как я могу сделать, чтобы добавить свойство имени приложения из файла журнала в качестве поля?

ответ

0

Из logstash-Logback-кодировщик Документах

По умолчанию каждое свойство контекста Logback (в ch.qos.logback.core.Context), такие как HOSTNAME, будет выглядеть как поле в LoggingEvent. Это можно отключить, указав false в конфигурации кодировщика/макета/appender.

По умолчанию ваши свойства журнала являются локальной областью и не включены. Попробуйте установить их на scope="context".

<property name="spring.application.name" value="service" scope="context"/> 
+0

Спасибо @roby! Свойство появляется в журнале, но в поле «сообщение». Я хочу иметь свойство как поле, чтобы фильтровать журналы с помощью Kibana. Вы знаете, как это сделать? Я попытался поместить это в файл журнала logastash, но это не помогло: 'add_field => { " service "=> [" @ spring.application.name "] }' – AleGallagher

1

Вы можете настроить пользовательские поля для LogstashEncoder следующих

<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> 
    <destination>192.168.99.100:4560</destination> 

    <!-- encoder is required --> 
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"> 
     <customFields>{"appname":"${appName}"}</customFields> 
    </encoder> 
</appender> 

Например, для применения пружины загрузки вы можете использовать получить свойство пружины области действий следующим образом

<springProperty name="appName" source="spring.application.name"/> 

Или иначе свойства импорта из файла .properties

<property resource="application.properties" /> 

 Смежные вопросы

  • Нет связанных вопросов^_^