LogstashEncoder简介

1,140 阅读4分钟

LogstashEncoder

LogstashEncoder简介

LogstashEncoder有助于获得在日志中以JSON格式记录回布局、编码器和附加器的功能。它还允许对Jackson进一步支持的其他格式进行这样做。在这篇文章中,我们将对LogstashEncoder进行研究,并将通过分主题详细研究,其中包括什么是LogstashEncoder,如何使用LogstashEncoder,LogstashEncoder java例子,以及关于该主题的结论。

什么是LogstashEncoder?

LogsatshEncoder是帮助日志备份JSON或Jackson支持的格式中指定的appender、layout和encoders的条款。LogstashEncoder支持访问事件和日志事件的日志备份。对于访问事件,通过使用日志回访进行记录,而对于记录事件,则使用记录器进行记录。

LogstashEncoder最初是为Logstash中JSON格式事件的输出支持而创建的。不过,它很快就变成并发展成了一个结构完美的日志机制,具有很高的配置规定,它可以用于一般的目的,可以记录JSON格式和Jackson数据格式。我们可以使用LogstashEncoder配置其中的数据和输出结构。

如何使用LogstashEncoder?

要使用LogstashEncoder,你必须在你的项目中包含它。我们可以使用Logstash-log back-encoder 6.0或更大的版本,用于1.8或更大的java版本。例如,对于5.x版本的Logstash日志回编码器,所需的java版本可以是1.7或更高,而对于4.x或更低的Logstash日志回编码器版本,我们需要1.6版本或更高的java版本。

你可以在你的maven项目的pom.xml文件中添加LogstashEncoder的依赖,添加的代码如下所示:

<dependency>
<groupId>net.Logstash.log back</groupId>
<artifactId>Logstash-log back-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>ch.qos.log back</groupId>
<artifactId>log back-classic</artifactId>
<version>1.2.6</version>
</dependency>

这里,你必须确保你的项目直接依赖于Logstash访问或Logstash经典。此外,你还可以在不使用LogstashEncoders时或在编译时指定标签的值为运行时。

这种情况发生在使用和实现JsonDeneratorDecoder、JsonFactoryDecoder、AppederListener、Markers或StructuredArguments、JsonProvider、Layout、Appender、TurboFilter、Encoder等。在运行时执行时,如果我们得到NoClassDefFoundError、ClassNotFoundException或NosuchMethodError等异常,那么你需要交叉检查你在maven项目的pom.xml中指定的依赖,确保所有必要的依赖都有适当的版本。运行时的路径是在范围标签中指定的。

一些需要添加到运行时路径中的依赖项如下所示

  • Slf4j-api

  • 1.2.0版本的Locgback-core

  • 日志回溯访问

  • 日志回溯经典

  • 杰克逊核心

  • 杰克逊数据绑定

  • 杰克逊注释

  • 与附加相关的配置将由logsatsh日志回溯编码器库提供。

  • 附加的配置由任何其他库或日志回溯库提供,以及由Logstash日志回溯编码器库提供的编码器或布局。

下表列出了Logstash日志回传编码器库所提供的所有编码器、附加器和布局。

功能协议支持的格式访问事件LoggingEvent
应用者任意任意AccessEventAsyncDisruptorApper记录事件异步中断器Apper
应用者读取Logstash JSON格式LogstashAccessTCPSocketAppenderLogstashTCPSocketAppender
应用程序/Syslog/UDPLogstash的JSON格式读取数据的方法LogstashUdpSocketAppender
布局任何一个一般的JSON格式AccessEventCompositeJsonLayout日志事件复合Json布局
布局任意Logsatsh JSON格式LogsasthAccessLayout编码
编码器任意Logstash JSON结构编码器编码器
编码器任意一般的JSON格式AccessEventCompositeJsonEncoderLoggingEventCompositeJsonEncoder

LogstashEncoder java 示例

当我们必须为所有的日志事件将JSON输出发送到UDP或Syslog类型的通道时,我们可以使用LogstashUdpSocketAppender和存在LoggingEventCompositeJsonLayout或LogstashLayout,同时在我们的文件log back.xml中指定配置。对于这种情况,我们的配置可以设置为下面的例子中所示 -

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<root level="all">
<appender-ref ref="sampleEducbaStash" />
</root>
<appender class="net.Logstash.log back.appender.LogstashUdpSocketAppender"  name="sampleEducbaStash" >
<host>SamplEducbaServerForSystemLogs</host>
<port>555</port>
<layout class="net.Logstash.log back.layout.LogstashLayout"/>
</appender>
</configuration>

我们建议在我们的JSON输出中需要时将自定义字段配置为全局范围。为此,我们将在我们的配置文件Logstash.xml中添加以下规范 -

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<root level="all">
<appender-ref ref="sampleEducbaStash" />
</root>
<appender class="net.Logstash.log back.appender.LogstashUdpSocketAppender"  name="sampleEducbaStash" >
<host>SamplEducbaServerForSystemLogs</host>
<port>555</port>
<layout class="net.Logstash.log back.layout.LogstashLayout">
<customFields>{"appname":"sampleEducbaWebService"}</customFields>
</layout>
</appender>
</configuration>

当我们需要在访问事件中使用UDP时在JSON中输出,那么我们可以使用LogsatshAccesUdpSocketAppender以及使用AccessEventCompositeJsonLayout,或者作为一种选择,你也可以在log back-access.xml中使用LogstashAccessLayout,如下图所示-。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender class="net.Logstash.log back.appender.LogstashAccessUdpSocketAppender"  name="educbaLogstash" >
<host>SampleEducbaLogstash</host>
<port>555</port>
<layout class="net.Logstash.log back.layout.LogstashAccessLayout">
<customFields>{"nameOfApplication":"educbaLogstash”} </customFields>
</layout>
</appender>
<appender-ref ref="educbaLogstash" />
</configuration>

我们将需要设置udp或Syslog输入的配置,以及提到的json编解码器,以便在Logstash中获得UDP或syslogs的输入。该配置可设置为如下所示

Input {
Syslog{
Codec => "json"
}
}

这样,根据你的输入格式,如Logstash JSON或一般JSON,你将决定Logstash配置文件的配置和内容。根据Logstash日志回传编码器,你也可以决定应用的功能,可以是Layout、appended或encoder,在你的maven项目的pom.xml配置文件中指定。

总结

LogstashEncoder让我们可以获得各种组件的日志回传,包括Logstash的appender、layout和编码器的JSON格式,这可以根据Logstash和maven的配置文件中指定的配置来决定,这有助于管理基于java的项目中的依赖性。