不能使用log4net.Ext.Json让Json登录Sitecore相关项目

问题描述

正如我们所知,Sitecore 已将 log4net 封装为认日志记录功能 (Sitecore.Logging)。我的任务是使用 log4net.Ext.Json Layout 创建 Json 日志并将其从 Azure 提供给 Datadog APM。 对应的有用链接如下: https://docs.datadoghq.com/logs/log_collection/csharp/?tab=log4net https://docs.datadoghq.com/tracing/connect_logs_and_traces/dotnet?tab=log4net https://github.com/DataDog/dd-trace-dotnet/tree/master/samples/AutomaticTraceIdInjection/Log4NetExample

虽然在过去 2 周内,我未能实现:

尝试 1:在 Visual Studio添加 log4net.ext.Json(ver. 2.0.8.3) NuGet 包。由于Sitecore已经封装了log4net(ver. 2.0.9),所以我不需要添加log4net NuGet包。

然后我配置的配置文件如下:

<appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="$(dataFolder)/logs/json_log/json_log.json" />
      <appendToFile value="true" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100MB" />
      <!--json formatted log4net logging-->
      <layout type='log4net.Layout.SerializedLayout,log4net.Ext.Json'>
          <decorator type="log4net.Layout.Decorators.StandardTypesDecorator,log4net.Ext.Json" />
          <!--explicit default members-->
          <default />
          <!--remove the default preformatted message member-->
          <remove value="ndc" />
          <remove value="message" />
          <!--add raw message-->
          <member value="message:messageobject" />
          <!--add value='properties' to emit Datadog properties -->
          <member value='properties'/>
          <member value='dd.env' />
          <member value='dd.service' />
          <member value='dd.version' />
          <member value='dd.trace_id' />
          <member value='dd.span_id' />
      </layout>
</appender>
<root>
      <level value='INFO'/>
      <appender-ref ref="JsonFileAppender"/>
</root>

结果是创建了 Json 文件,而日志文件中没有写入任何内容

尝试2:我从gitlab 官方网站下载了log4net.Ext.Json 源代码,并创建了一个空项目并将log4net.Ext.Json 的所有必需的C# 源文件都包含到我的解决方案中。我还将项目名称重命名为 log4netExtJson,这不会与现有的开箱即用 log4net.Ext.Json.dll 产生冲突。为了使 log4net.Core 正常工作,我还必须添加 log4net(ver. 2.0.12) NuGet 包。源码如下:

https://gitlab.com/reeloadead/log4net.Ext.Json#installation

我改成的配置文件

<appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="$(dataFolder)/logs/json_log/json_log.json" />
      <appendToFile value="true" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100MB" />
      <!--json formatted log4net logging-->
      <layout type='log4net.Layout.SerializedLayout,log4netExtJson'>
          <decorator type="log4net.Layout.Decorators.StandardTypesDecorator,log4netExtJson" />
          <!--explicit default members-->
          <default />
          <!--remove the default preformatted message member-->
          <remove value="ndc" />
          <remove value="message" />
          <!--add raw message-->
          <member value="message:messageobject" />
          <!--add value='properties' to emit Datadog properties -->
          <member value='properties'/>
          <member value='dd.env' />
          <member value='dd.service' />
          <member value='dd.version' />
          <member value='dd.trace_id' />
          <member value='dd.span_id' />
      </layout>
</appender>
<root>
      <level value='INFO'/>
      <appender-ref ref="JsonFileAppender"/>
</root>

这一轮的结果是连json日志文件都没有创建。

尝试 3:我联系了 Sitecore 支持门户,得到的答复是他们没有测试 log4net.Ext.Json 包,他们需要我尝试 SitecoreLoggingExtensions NuGet 包作为解决方法。源码如下:

https://github.com/sitecoreops/sitecore-logging-extensions

我写的配置文件如下:

<appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="$(dataFolder)/logs/json_log/json_log.json" />
      <appendToFile value="true" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100MB" />
      <!--json formatted log4net logging-->
      <!--SerializedLayout-->
      <layout type='SitecoreLoggingExtensions.JsonLayout,SitecoreLoggingExtensions'>  
          <!--explicit default members-->
          <default />
          <!--add value='properties' to emit Datadog properties -->
          <member value='properties'/>
          <!-- Manual changes: start -->
          <member value='dd.env' />
          <member value='dd.service' />
          <member value='dd.version' />
          <member value='dd.trace_id' />
          <member value='dd.span_id' />
          <!-- Manual changes: end -->
      </layout>
</appender>
<root>
      <!--<level value='INFO'/>-->
      <appender-ref ref="JsonLogFileAppender"/>
</root>

内容的Json日志终于创建好了!但是我在Azure上进行了设置后,与Datadog 和日志文件没有任何联系。我的猜测是,布局为 SitecoreLoggingExtensions 的 Json 日志与 Datadog 不兼容。所以这种方式对我的需要没有用。

不知道之前有没有人在Sitecore相关项目中成功配置过log4net.Ext.Json包。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)