Logback 多行模式 - 行分隔符后的文本

Cit*_*ail 1 xml logging logback

我正在为 Logback 配置日志。

XML 配置如下所示:

<configuration>
   <appender name="console" class="...">
     <encoder>
       <pattern>Message:%nText: %m</pattern>
     </encoder>
  </appender>
  ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

这个想法是日志记录应该是多行的:

Message:
Text: [Message text here]
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,出现异常:

ch.qos.logback.core.pattern.parser.Compiler@8dbdac1 中出现错误 - 没有为转换字 [nText] 注册转换类

因此,问题在于“%n”和“Text”字符串合并为一个字符串。

作为解决方法,我可以用空格将它们分开书写:

Message:%n Text: %m
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,空格出现在日志中的“文本”之前

Message:
 Text:
Run Code Online (Sandbox Code Playgroud)

是否有一些解决方案(空字符串或类似的转义字符)?

谢谢。

Shr*_*ers 5

来自logback 手册 Ch. 6:布局:

在大多数情况下,文字自然包含空格或其他分隔字符,以便它们不会与转换字混淆。例如,模式“%level [%thread] - %message%n”包含字符串文字“[”和“] - ”。但是,如果可以作为 java 标识符一部分的字符紧跟在转换字后面,则 logback 的模式解析器将被愚弄,认为该文字是转换字的一部分。例如,模式“%date%nHello”将被解释为两个转换词 %date 和 %nHello,并且由于 %nHello 不是已知的转换词,logback 将为 %nHello 输出 %PARSER_ERROR[nHello]。如果您希望字符串文字“Hello”立即分隔 %n 和 Hello,请将空参数列表传递给 %n。例如,“%date%n{}Hello”将被解释为 %date 后跟 %n 后跟文字“Hello”。

所以,尝试Message:%n{}Text: %m一下吧。