AEM 6.3使用附加程序和slf4j自定义日志消息

时间:2018-09-07 21:02:29

标签: logging aem

在AEM 6.3项目中,我们需要在日志消息中添加其他属性。基本上,我们要自定义消息格式。因此,我们在src / main / resources / logback.xml下创建了一个logback文件。日志文件的内容如下

<BrowserRouter>
  <div>
      <Route exact={true} path='/' render={() => (
              <div>
                  <AddDetails />
              </div>
          )}/>
      <Route exact={true} path='details' render={() => (
                  <div>
                     <ShowDetails />
                  </div>
              )}/>
   </div>
</BrowserRouter>

在Apache Sling日志记录配置下,我们创建了一个日志配置,如下所示,其中“追加名称”为“相同名称”。

<configuration>

<appender name="SampleProject.log" 
class="ch.qos.logback.core.FileAppender">
    <file>SampleProject.log</file>
     <append>true</append>
    <encoder>
        <pattern>%d %-5level %X{sling.userId:-NA} [%thread] %logger{30} 
    %marker- %msg %n</pattern>
        <immediateFlush>true</immediateFlush>
    </encoder>
  </appender>

 <logger name="org.wc.project" level="INFO"/>

 </configuration>

但是,自定义消息格式现在显示在SampleProject.log中。任何人都可以提供相同的指针吗?

1 个答案:

答案 0 :(得分:0)

意识到这是一个相当老的线程,但是我过去通过编写用于吊索的MDC过滤器并使用MDC日志记录模式更新过滤器来完成类似的工作。

我在这里写了一篇有关如何完成此操作的分步文章:

https://blogs.perficientdigital.com/2018/09/24/customized-logging-using-slf4j-mdc-in-aem/

编辑: ,以防无法访问,请从上面的网址复制/粘贴基本步骤:

要使用MDC,有两个主要步骤:  -填充MDC对象(地图)  -引用MDC属性(记录模式)

在AEM中,每个请求都流经过滤器链,这意味着我们需要尽早在过滤器中填充MDC变量,以便以后可以成功记录这些变量。最简单的方法是将自定义过滤器的范围设置为请求级别,顺序为0:

/**
 - The SlingFilterScope.REQUEST is important as MDC needs to be configured prior
 - to any logger being executed in the page rendering.
 */
@SlingFilter(
        label = "Sample MDC Filter",
        description = "Sample implementation of custom MDC properties.",
        order = 0,
        scope = SlingFilterScope.REQUEST)

然后,您需要将org.slf4j.MDC导入您的类并填充它。

MDC.put(varName,varValue);

填充变量后,您可以通过标准的日志记录过滤器进行访问:

%X{varName:-DefaultValueIfNull}

其余逻辑取决于您!请求对象使您可以直接访问以下内容:

  • ResourceResolver(访问JCR)
  • 请求标头
  • 您可以使用RequestWrapper进行自定义
  • 请求Cookie
  • 请求参数