【问题标题】:Log4j2 Mule IssueLog4j2 骡子问题
【发布时间】:2016-07-27 19:54:30
【问题描述】:

我们在 Mule 3.6.4 服务器上部署了各种 mule 应用程序,它们都在应用程序的类路径中定义了自己的 log4j 配置,如下所示。 (1的例子)

<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <Appenders>

    <Console name="console" target="SYSTEM_OUT">
      <PatternLayout
              pattern="&lt;%-4d{DATE}&gt; &lt;%-5p&gt; &lt;%t&gt; &lt;%m&gt; %n" />
    </Console>

    <RollingFile name="file"
                 fileName="${sys:mule.home}/logs/apptest.log"
                 filePattern="${sys:mule.home}/logs/apptest.%d{yyyy-MM-dd}">

      <PatternLayout
              pattern="&lt;%-4d{DATE}&gt; &lt;%-5p&gt; &lt;%t&gt; &lt;%m&gt; %n" />
      <TimeBasedTriggeringPolicy />
    </RollingFile>

  </Appenders>

  <Loggers>
    <AsyncRoot level="INFO">
      <AppenderRef ref="console" />
      <AppenderRef ref="file" />
    </AsyncRoot>
  </Loggers>

</Configuration>

这些应用程序在 Mule ESB 中按此顺序部署

应用程序1 应用2 应用3

由于某种原因,应用程序的所有日志都输出到控制台,只有应用程序 3 的日志文件。日志记录不适用于应用程序 1 或 2?

任何人都可以对此有所了解吗?这是一些类加载器问题吗?我们正在运行 Mule 3.6.4

谢谢

【问题讨论】:

    标签: mule log4j2


    【解决方案1】:

    因为您的&lt;Logger&gt; 配置中有&lt;AppenderRef ref="console" /&gt;,所以一切都将顺利进行。您的 log4j 配置应该位于每个 {app}/classes/ 中。

    对于文件附加程序,您是否尝试过为每个应用程序使用不同的文件名 -

    <RollingFile name="file"
                     fileName="${sys:mule.home}/logs/app1test.log"
                     filePattern="${sys:mule.home}/logs/app1test.%d{yyyy-MM-dd}">
    

    对于第二个应用程序 -

    <RollingFile name="file"
                         fileName="${sys:mule.home}/logs/app2test.log"
                         filePattern="${sys:mule.home}/logs/app2test.%d{yyyy-MM-dd}">
    

    【讨论】:

    • "你的 log4j 配置应该在每个 {app}/classes/ 中。"这是。每个应用程序都有一个 log4j2。你上面给出的例子正是我们正在做的。我们的类路径中的每个应用程序都有三个 log4j 文件
    • 没什么,所有三个应用程序的所有日志都输出到 mule_ee.log 和第三个应用程序日志,这是最后一个部署的应用程序。第一个和第二个应用程序的应用程序日志记录被破坏。我们可以在部署时看到日志记录,但没有一个记录器 &lt;logger level="INFO" 定义正在工作
    • Blog blogs.mulesoft.com/dev/mule-dev/mule-3-6-asynchronous-logging 这里有配置部分,显示如何加载 log4j 配置,看看是否有任何线索。
    • 是的,我读过这篇文章无济于事。一切都根据配置正确设置。
    • 刚刚遇到这个,docs.mulesoft.com/mule-user-guide/v/3.7/…。尝试添加 -M-Dlog4j.debug=true 以验证正在提取哪些 log4j 文件。
    【解决方案2】:

    您是否尝试过为 RollingFile 附加程序使用附加参数?您还可以考虑为每个应用程序的 RollingFile 名称指定一个唯一值。像这样的:

    对于应用程序1 -

    <RollingFile name="app2_file"
                 fileName="${sys:mule.home}/logs/app1test.log"
                 filePattern="${sys:mule.home}/logs/app1test.%d{yyyy-MM-dd}" append="true">
    
      <PatternLayout
              pattern="&lt;%-4d{DATE}&gt; &lt;%-5p&gt; &lt;%t&gt; &lt;%m&gt; %n" />
      <TimeBasedTriggeringPolicy />
    </RollingFile>
    

    对于应用程序2 -

    <RollingFile name="file"
                 fileName="${sys:mule.home}/logs/appt2est.log"
                 filePattern="${sys:mule.home}/logs/app2test.%d{yyyy-MM-dd}" append="true">
    
      <PatternLayout
              pattern="&lt;%-4d{DATE}&gt; &lt;%-5p&gt; &lt;%t&gt; &lt;%m&gt; %n" />
      <TimeBasedTriggeringPolicy />
    </RollingFile>
    

    【讨论】:

    • 是的,我对每个应用程序都有一个独特的价值,我只发布了一个应用程序日志的示例。每三个具有相同的配置,但具有不同的日志文件名。我试过 append="true" 但没有运气。
    猜你喜欢
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多