Java Logback的XML配置中的问题

Java Logback的XML配置中的问题,java,logback,spring-logback,logstash-logback-encoder,Java,Logback,Spring Logback,Logstash Logback Encoder,我正试图通过logback spring.xml配置LogstashTcpSocketAppender。当我将行添加到LogstashEncoder时,我得到一个错误错误是:“weblogic.application.ModuleException:java.lang.IllegalStateException:Logback配置错误检测到:ch.qos.Logback.core.joran.spi中的错误。Interpreter@51:25-没有适用于[stackTrace]的操作,当前元素路

我正试图通过
logback spring.xml
配置
LogstashTcpSocketAppender
。当我将行
添加到
LogstashEncoder
时,我得到一个错误
错误是:“weblogic.application.ModuleException:java.lang.IllegalStateException:Logback配置错误检测到:ch.qos.Logback.core.joran.spi中的错误。Interpreter@51:25-没有适用于[stackTrace]的操作,当前元素路径为[[configuration][appender][encoder][stackTrace]]
。如果我删除
stackTrace
,只保留
就可以了。非常感谢您的帮助

logbackspring.xml

<appender name="LOGSTASH"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${LOGSTASH_HOST}:${LOGSTASH_PORT}</destination>
        <encoder charset="UTF-8"
                 class="net.logstash.logback.encoder.LogstashEncoder">
            <stackTrace>
                <fieldName>stackTrace</fieldName>
                <throwableConverter
                        class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                    <rootCauseFirst>true</rootCauseFirst>
                </throwableConverter>
            </stackTrace>
        </encoder>
    </appender>

    <appender name="ASYNC_LOGSTASH"
              class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="LOGSTASH"/>
    </appender>
我认为
需要在编码器的
元素中

试一试

或按如下方式直接使用:

<encoder class="net.logstash.logback.encoder.LogstashEncoder">
  <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
    <maxDepthPerThrowable>30</maxDepthPerThrowable>
    <maxLength>2048</maxLength>
    <shortenedClassNameLength>20</shortenedClassNameLength>
    <exclude>sun\.reflect\..*\.invoke.*</exclude>
    <exclude>net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
    <evaluator class="myorg.MyCustomEvaluator"/>
    <rootCauseFirst>true</rootCauseFirst>
    <inlineHash>true</inlineHash>
  </throwableConverter>
</encoder>

30
2048
20
sun\.reflect\..*\.调用*
net\.sf\.cglib\.proxy\.MethodProxy\.invoke
真的
真的
是的。我认为,如果我们正在使用,我们必须将其包装在内部,否则我们可以直接使用以下内容进行操作:。。。。
<appender name="LOGSTASH"
          class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>${LOGSTASH_HOST}:${LOGSTASH_PORT}</destination>
    <encoder charset="UTF-8"
             class="net.logstash.logback.encoder.LogstashEncoder">
       <providers>
        <stackTrace>
            <fieldName>stackTrace</fieldName>
            <throwableConverter
                    class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                <rootCauseFirst>true</rootCauseFirst>
            </throwableConverter>
        </stackTrace>
       </providers>
    </encoder>
</appender>

<appender name="ASYNC_LOGSTASH"
          class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="LOGSTASH"/>
</appender>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
  <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
    <maxDepthPerThrowable>30</maxDepthPerThrowable>
    <maxLength>2048</maxLength>
    <shortenedClassNameLength>20</shortenedClassNameLength>
    <exclude>sun\.reflect\..*\.invoke.*</exclude>
    <exclude>net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
    <evaluator class="myorg.MyCustomEvaluator"/>
    <rootCauseFirst>true</rootCauseFirst>
    <inlineHash>true</inlineHash>
  </throwableConverter>
</encoder>