Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在logback中从Java堆栈跟踪中删除换行符?_Java_Regex_Logback - Fatal编程技术网

如何在logback中从Java堆栈跟踪中删除换行符?

如何在logback中从Java堆栈跟踪中删除换行符?,java,regex,logback,Java,Regex,Logback,我正在尝试从Java堆栈跟踪中删除换行符 我有以下回写模式- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern> %d{HH:mm:ss.SSS}[%thread]-5级%logger{36}-%replace(%msg){'\n',''}%n 我希望它能取代消息中的换行符,但事实并非如此。我看到用新行打印出来的痕迹 但是,如果我

我正在尝试从Java堆栈跟踪中删除换行符

我有以下回写模式-

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern>
%d{HH:mm:ss.SSS}[%thread]-5级%logger{36}-%replace(%msg){'\n',''}%n
我希望它能取代消息中的换行符,但事实并非如此。我看到用新行打印出来的痕迹

但是,如果我使用以下模式(仅用于测试目的)——

%d{HH:mm:ss.SSS}[%thread]-5级别%logger{36}-%replace(%msg){'.*','x'}%n
我发现消息已被字符x替换,但堆栈跟踪仍按原样打印

这让我相信logback会独立处理stacktraces。 我已经阅读了logback文档,它说可以通过(%ex)引用stacktraes

但是,对于appender,一次只能有一个模式处于活动状态。
如何确保在stacktraces中不获取换行符?

在查看Logback formatter如何在我的Windows框中构建字符串后,我发现堆栈跟踪包含每个新行的
\r\n
,因此如果使用Windows,请尝试以下操作:

<pattern>........ %replace(%ex){'[\r\n]+', '\\n'}%nopex%n</pattern>
…..%替换(%ex){'[\r\n]+','\\n'}%nopex%n
说明:

  • \r\n
    :起初我只尝试了
    %replace(%ex){'\n',X'}
    ,但后来我在日志中有了新行字符,然后是一个“X”。相反,使用
    %replace(%ex){'[\r\n]+','}
    删除所有出现的
    \r
    \n
    。如果要显示字符串
    “\n”
    以指示此处有新行,可以在
    %replace
    第二个参数中添加
    '\\n'

  • %nopex
    :我不知道为什么,但是如果您在
    %ex
    上使用
    %replace
    ,Logback会向您的条目添加第二个堆栈跟踪,这次是所有新行。使用
    %nopex
    (请参阅),它将通过假装使用实际堆栈而不使用任何
    %replace
    来抑制第二个堆栈


如何替换新行并通过evaluate子句进行过滤,例如不包括tomcatpackages@KalpeshSoni不确定“evaluate子句”是什么意思,但如果要禁用特定包/类的日志,请参阅;如果要尝试从日志中删除某些文本,可以多次使用
%replace
,在同一个日志条目字段中包含(请参阅)不禁用日志,而是过滤堆栈跟踪
<pattern>........ %replace(%ex){'[\r\n]+', '\\n'}%nopex%n</pattern>