如何防止logback/slf4j解析新的行字符

Tec*_*nch 2 java logging logback slf4j

我正在使用SLF4j的logback来登录我的应用程序.我有一个包含新行字符的字符串.它是字符串值的一部分,但不表示新行.当我打印字符串时,logback将它打印在一个新行中.怎么预防这个?

码:

String str = "george\nmason"
logger.info(str);
Run Code Online (Sandbox Code Playgroud)

回归模式:

<pattern>[%d{dd MMM yyyy HH:mm:ss,SSS}] [%5p] [%X{sid}] [%-20C{0} %25M]:[%-4L] - %m%n</pattern>
Run Code Online (Sandbox Code Playgroud)

预期:

[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52  ] - george\nmason
Run Code Online (Sandbox Code Playgroud)

实际产量:

[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52  ] - george
mason
Run Code Online (Sandbox Code Playgroud)

小智 6

您可以replace为模式添加一个选项,以便用其他内容替换消息中的任何换行符,例如空格:

%replace(%m){'\n', ' '}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您想要替换\n\\n:

<pattern>[%d{dd MMM yyyy HH:mm:ss,SSS}] [%5p] [%X{sid}] [%-20C{0} %25M]:[%-4L] - %replace(%m){'\n', '\\n'}%n</pattern>
Run Code Online (Sandbox Code Playgroud)

  • 您的原始问题询问如何阻止邮件中的换行符.您的新问题是如何使用换行显示堆栈跟踪.这是相关但不同的.`replace`模式应用于消息,因此如果您的堆栈跟踪已被替换,则可能是因为它们已被应用程序记录在消息中.您要么必须修改应用程序以将异常与消息分开,要么修改`replace`选项的正则表达式,以便它只替换不属于异常的新行. (2认同)