【问题标题】:How to prevent logback/slf4j from parsing a new line character如何防止 logback/slf4j 解析换行符
【发布时间】:2015-02-19 20:30:51
【问题描述】:

我正在使用带有 SLF4j 的 logback 来登录我的应用程序。我有一个包含换行符的字符串。它是字符串值的一部分,但不表示换行。当我打印字符串时,logback 会在新行中打印它。如何预防?

代码:

String str = "george\nmason"
logger.info(str);

Logback 模式:

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

预期:

[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52  ] - george\nmason

实际输出:

[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52  ] - george
mason

【问题讨论】:

    标签: java logging slf4j logback


    【解决方案1】:

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

    %replace(%m){'\n', ' '}
    

    在您的情况下,您想将 \n 替换为 \\n

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

    【讨论】:

    • 这个替换贵吗?
    • 我的轨迹现在有\n。有没有办法来解决这个问题 ?这不是真正的问题,但在这种情况下最好避免。
    • 这实际上是一个单独的问题。 :)
    • 他们是因为这个替换而出现的。否则他们很好。 :)
    • 您的原始问题询问如何防止消息中的换行符。您的新问题是如何用换行符显示堆栈跟踪。这是相关但不同的。 replace 模式应用于消息,因此如果您的堆栈跟踪被 \n 替换,很可能是因为它们已被您的应用程序记录在消息中。您要么必须修改应用程序以将异常与消息分开,要么修改 replace 选项的正则表达式,使其仅替换不属于异常的换行符。
    猜你喜欢
    • 2016-04-20
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多