【问题标题】:Log4j2 - One app, multiples logs and levelsLog4j2 - 一个应用程序,多个日志和级别
【发布时间】:2016-05-24 10:57:10
【问题描述】:

我有一个应用程序和多个客户,我想通过 customerId(java 变量)来分隔日志,同时创建不同类型的层级层次结构。

例如:

/logs/customer1/admin.txt

/logs/customer1/support.txt

/logs/customer2/admin.txt

/logs/customer2/support.txt

我可以这样用“级别”分开: log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
    <properties>
    <property name="appName">App</property>
    <property name="pattern">%d{HH:mm:ss.SSS} ${appName} %-5level %logger{36} - %msg%n</property>

    </properties>

    <appenders>
     <File name="adm" fileName="c:\logs\adm.txt" append="true">
            <PatternLayout pattern="${pattern}" />
    </File>
    <File name="support" fileName="c:\logs\support.txt" append="true">
            <PatternLayout pattern="${pattern}" />
    </File>
    </appenders>
    <loggers>
        <Logger name="adm" additivity="false">
            <AppenderRef ref="adm" />
        </Logger>
        <Logger name="support" additivity="false">
            <AppenderRef ref="adm" />
            <AppenderRef ref="support" />
        </Logger>
        <root level="ERROR">
            <appender-ref ref="support" />
            <appender-ref ref="adm" />
        </root>
    </loggers>
</configuration>

在java中:

static final Logger adm = LogManager.getLogger("adm");
static final Logger support= LogManager.getLogger("support");

当我使用“support.info”时使用此配置...日志会转到这两个文件。它是完美的。但我无法通过 customerID 分开

我做得对吗? 如何按 customerId(java 变量) 分隔?

谢谢。

【问题讨论】:

    标签: java logging configuration log4j2


    【解决方案1】:

    您可以使用 RoutingAppender 分隔日志。基本上,您将客户 ID 放在 ThreadContext 中,然后让 RoutingAppender 创建一个 FileAppender,该 FileAppender 基于模式写入文件位置。这还有一个优点,即客户 ID 可以包含在每个日志记录中,并且您的应用程序也可以从那里检索它,而不是要求将其作为参数传递到任何地方。

    有关如何执行此操作的示例,请参阅 http://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender

    【讨论】:

      【解决方案2】:

      我替换的每个附加程序:

          <Routing name="sadm">
              <Routes pattern="${ctx:customerId}">
                  <Route>
                      <File name="sadm" fileName="${path}\${ctx:customerId}\sadm.txt"
                          append="true">
                          <PatternLayout pattern="${pattern}" />
                      </File>
                  </Route>
                  <Route ref="sadm_commom" key="${ctx:customerId}" />
              </Routes>
          </Routing>
      

      并创建了一个名为:sadm_commom 的新附加程序

                  <Route ref="sadm_commom" key="${ctx:customerId}" />
      

      如果客户 ID 为空。

      【讨论】:

      • 您是说 RoutingAppender 正在为您工作还是这是一个问题?
      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 2017-10-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2014-06-19
      相关资源
      最近更新 更多