当前位置: 首页 > 知识库问答 >
问题:

未设置logback logstash编码器Syslog标头

谭繁
2023-03-14

我的logback.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <conversionRule conversionWord="syslogStart" converterClass="ch.qos.logback.classic.pattern.SyslogStartConverter"/>

  <appender name="stash" class="net.logstash.logback.appender.LogstashSocketAppender">
    <host>localhost</host>
    <port>514</port>
    <prefix class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%syslogStart{LOCAL5}</pattern>
      </layout>
    </prefix>
  </appender>

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

当我查看wireshark的输出时,我只看到记录的JSON(没有给出PRI头字段)

 [truncated]Syslog message: (unknown): {"@timestamp":"2016-03-22T12:13:37.270+11:00","@version":1,"message":"Started App in 4.327 seconds (JVM running for 4.92)","logger_name":"au.com.xxx.App","threa

如果切换到标准logback Syslog appender(非JSON输出)

...
  <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
    <syslogHost>127.0.0.1</syslogHost>
    <Facility>LOCAL5</Facility>
    <SuffixPattern>%-5level MyApp %logger %msg</SuffixPattern>
  </appender>
...
 Syslog message: LOCAL5.INFO: Mar 22 12:31:03 sbmelmac-06390.local INFO  App au.com.App Started App in 11.292 seconds (JVM running for 29.336)

共有1个答案

荣波
2023-03-14

经过大量的思索,看起来这个示例的包装LayoutRappingEncoder部分出现了问题。

当我使用最新的SpringBoot版本时,一个logback配置异常会阻止应用程序的启动(以前的版本没有阻止应用程序的启动,即使出现了异常)。

Application startup failed
java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - A "ch.qos.logback.core.encoder.LayoutWrappingEncoder" object is not assignable to a "ch.qos.logback.core.Layout" variable.
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - The class "ch.qos.logback.core.Layout" was loaded by 
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - [sun.misc.Launcher$AppClassLoader@73d16e93] whereas object of type 
ERROR in ch.qos.logback.core.joran.util.PropertySetter@10d307f1 - "ch.qos.logback.core.encoder.LayoutWrappingEncoder" was loaded by [sun.misc.Launcher$AppClassLoader@73d16e93].

因此,如果我删除包装LayoutRappingEncoder,并在前缀中使用模式实现,代码就可以工作,并且我可以在syslog头中看到正确的工具细节。

 <conversionRule conversionWord="syslogStart" converterClass="ch.qos.logback.classic.pattern.SyslogStartConverter"/>
 <appender name="JSON_SYSLOG" class="net.logstash.logback.appender.LogstashSocketAppender">
    <host>127.0.0.1</host>
    <port>514</port>
    <prefix class="ch.qos.logback.classic.PatternLayout">
       <pattern>%syslogStart{LOCAL5}</pattern>
    </prefix>
  </appender>
 [truncated]Syslog message: LOCAL5.INFO: Mar 22 14:12:18 sbmelmac-06390.local {"@timestamp":"2016-03-22T14:12:18.494+11:00","@version":1,"message":"Started App in 4.597 seconds (JVM running for 5.18)","logger":"au.com.myapp.
 类似资料:
  • 我对Spring Oauth和Spring Security很陌生。我正在尝试在项目中使用client\u凭据流。目前,我设法使用自己的CustomDetailsService,以便从系统中已经存在的数据库中获取client\u id和密码(secret)。唯一的问题是,我无法更改AuthorizationServer使用的DaoAuthenticationProvider中的密码编码器-它默认设

  • 日志-消息历史记录路由ID处理器ID处理器运行(ms)[sdPoll][sdPoll][Timer://sdPoll?FixedRate=true&period=60000][21176][null][onCompletion1][onCompletion][106][sdPoll][process7][Ref:RefProcessor][21067][null][process3][Ref:Ge

  • 问题内容: 我正在尝试从http://api.freebase.com/api/trans/raw/m/0h47检索数据 正如您在文本中看到的那样,这里有一些唱歌: 。 当我尝试从页面获取源代码时,我会听到带有诸如此类的文字。 到目前为止,我已经尝试使用以下代码: 我究竟做错了什么? 我的整个代码: 问题答案: HTML页面采用UTF-8,并且可以使用阿拉伯字符等。但是Unicode 127以上的

  • 我将xml发送到web服务,并在那里将输入xml转换为字符串,现在设置其编码时遇到问题。下面是一个代码: 这段代码从请求xml生成一个String。问题是,当请求XML不是以UTF-8编码时,它会在xml元素中产生不可读的字符: 当我发送UTF-8编码的xml时,没有问题。因此,问题是如何在将xml转换为字符串时设置UTF-8编码。 JVM使用的默认编码是ISO8859-1。

  • 问题内容: 我知道这个问题已经问过几次了。 但是,我无法获得这些解决方案。 我正在运行标准安装的node.js和socket.io。(来自Amazon EC2上的yum) 问题是Chrome退回到xhr轮询,并且这些请求需要有效的CORS配置。但是,我似乎无法正常工作。我的Web服务器在端口80上运行,而node.js(socket.io)在端口81上运行。如您所见,我试图使socket.io使用

  • syslog 可能是运维领域最流行的数据传输协议了。当你想从设备上收集系统日志的时候,syslog 应该会是你的第一选择。尤其是网络设备,比如思科 —— syslog 几乎是唯一可行的办法。 我们这里不解释如何配置你的 syslog.conf, rsyslog.conf 或者 syslog-ng.conf 来发送数据,而只讲如何把 logstash 配置成一个 syslog 服务器来接收数据。 有