
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格式 | LogstashAccessTCPSocketAppender | LogstashTCPSocketAppender |
| 应用程序 | /Syslog/UDP | Logstash的JSON格式 | 读取数据的方法 | LogstashUdpSocketAppender |
| 布局 | 任何一个 | 一般的JSON格式 | AccessEventCompositeJsonLayout | 日志事件复合Json布局 |
| 布局 | 任意 | Logsatsh JSON格式 | LogsasthAccessLayout | 编码 |
| 编码器 | 任意 | Logstash JSON结构 | 编码器 | 编码器 |
| 编码器 | 任意 | 一般的JSON格式 | AccessEventCompositeJsonEncoder | LoggingEventCompositeJsonEncoder |
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的项目中的依赖性。