Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
log4j和XML内容_Xml_Log4j - Fatal编程技术网

log4j和XML内容

log4j和XML内容,xml,log4j,Xml,Log4j,我使用log4j记录应用程序发送的请求/响应xml 问题是xml内容被记录在新行中。 关于如何格式化以便在接收时保留xml结构的任何建议 以下是我的附件: <appender name="xmlFileAppender" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="d:/LOG/log4j/appName_${weblogic.Name}_XMLS.log" />

我使用log4j记录应用程序发送的请求/响应xml

问题是xml内容被记录在新行中。 关于如何格式化以便在接收时保留xml结构的任何建议

以下是我的附件:

<appender name="xmlFileAppender" class="org.apache.log4j.RollingFileAppender">
   <param name="File" value="d:/LOG/log4j/appName_${weblogic.Name}_XMLS.log" />
   <param name="Append" value="true" />
   <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
       <param name="ActiveFileName" value="d:/LOG/log4j/appName_${weblogic.Name}_XMLS.log" />
       <param name="FileNamePattern" value="d:/LOG/log4j/appName_${weblogic.Name}_XMLS.%d.log.gz" />
   </rollingPolicy>
   <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="[%d{DATE}][%-p][%c{3}%x][%m]%n"/>
   </layout>
</appender>

您的转换模式会附加换行符。尝试更改此选项:

 <param name="ConversionPattern" value="[%d{DATE}][%-p][%c{3}%x][%m]%n"/>
我希望这有帮助


-Gmail

您的转换模式附加了一个换行符。尝试更改此选项:

 <param name="ConversionPattern" value="[%d{DATE}][%-p][%c{3}%x][%m]%n"/>
我希望这有帮助


-gMale说得对,省略换行符的代码一定存在于某个地方

然而,你必须小心;您只想从某些日志对象中删除新行,而不是从所有日志对象中删除(从系统中的所有日志调用集中过滤出新行是有点过头的,我认为这是一个障碍)。 要实现这一点,您有两个选择:

  • 在将XML字符串传递给log4j之前,使用gmale的示例手动调用一个方法来清除XML字符串中的换行符(但是我会将
    \n
    替换为
    System.getProperty(“line.separator”)
    ,或者,如果您使用的是Commons Lang,
    SystemUtils.line\u separator
  • 使用自定义对象包装XML字符串,并配置Log4J以添加将自定义对象渲染为字符串的
    ObjectRenderer

  • 这两种方法中的任何一种都会导致从您想要的内容类型中删除换行符,而不是将其全部用于地球上的所有日志记录。

    gmale说得对,省略换行符的代码必须存在于某个地方

    然而,你必须小心;您只想从某些日志对象中删除新行,而不是从所有日志对象中删除(从系统中的所有日志调用集中过滤出新行是有点过头的,我认为这是一个障碍)。 要实现这一点,您有两个选择:

  • 在将XML字符串传递给log4j之前,使用gmale的示例手动调用一个方法来清除XML字符串中的换行符(但是我会将
    \n
    替换为
    System.getProperty(“line.separator”)
    ,或者,如果您使用的是Commons Lang,
    SystemUtils.line\u separator
  • 使用自定义对象包装XML字符串,并配置Log4J以添加将自定义对象渲染为字符串的
    ObjectRenderer

  • 这两种方式中的任何一种都会导致换行符从您想要的内容类型中完全删除,而不是从地球上所有登录的内容中删除。

    对不起,我想我的问题还不够清楚。我想删除日志消息本身中出现的新行。您修改转换模式的建议将导致日志被创建为一行(不是我想要的)。确定。我还不清楚你在问什么。听起来,您可以在进行日志记录调用时删除换行符,也可以覆盖记录器并在内部删除换行符。实现第一个选项的最简单方法是使用一个方面,该方面在每次进行日志调用时横切代码。从这里开始,按照
    logMessage.replaceAll(“\\n”和“”)的行进行编码将删除换行符。问题是,你想把代码放在哪里:在一个方面,在Log4JLogger的子类中,或者在你的代码中的任何地方,你都可以进行日志调用?对不起,我认为我的问题不够清楚。我想删除日志消息本身中出现的新行。您修改转换模式的建议将导致日志被创建为一行(不是我想要的)。确定。我还不清楚你在问什么。听起来,您可以在进行日志记录调用时删除换行符,也可以覆盖记录器并在内部删除换行符。实现第一个选项的最简单方法是使用一个方面,该方面在每次进行日志调用时横切代码。从这里开始,按照
    logMessage.replaceAll(“\\n”和“”)的行进行编码将删除换行符。问题是,你想把代码放在哪里:在一个方面,在Log4JLogger的子类中,或者在你的代码中的任何地方,你都可以进行日志调用?
    
    final String newLine = System.getProperty("line.separator");
    ...
    log.debug(msg + newLine);