【问题标题】:log4net accessing context properties from custom appenderlog4net 从自定义 appender 访问上下文属性
【发布时间】:2017-12-14 17:17:25
【问题描述】:

我正在使用带有自定义附加程序的 log4net,该附加程序记录到 Azure 存储表,并且在我的附加程序中访问 log4net.GlobalContext 属性时遇到问题。我正在从 Azure 函数内部进行日志记录。

附加非常简单明了,工作正常,但我想添加几个自定义属性 - 其中一个是 InvocationId 并且只能从 Azure Functions 访问,所以我想知道最好的方法实现这一目标。

知道我错过了什么吗?

附加器

protected override void Append(LoggingEvent loggingEvent)
{
  _tableCtx.Log(new LogEntry
                {
                  Timestamp = loggingEvent.TimeStamp,
                  Message = loggingEvent.RenderedMessage,
                  Level = loggingEvent.Level.Name,
                  // properties is always empty
                  InvocationId = loggingEvent.Properties["InvocationId"],
                  PartitionKey = loggingEvent.LoggerName,
                 });
}

Azure 函数

public static async Task<HttpResponseMessage> MyFunction([HttpTrigger(AuthorizationLevel.Function, "post")]HttpRequestMessage req, ILogger log, ExecutionContext context)
{

  log4net.GlobalContext.Properties["InvocationId"] = context.InvocationId;
  using (var config = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyFunc.logging.config"))
  {
      log4net.Config.XmlConfigurator.Configure(config);
  }

   var log = LogManager.GetLogger(context.FunctionName);
}

【问题讨论】:

标签: c# azure log4net azure-functions


【解决方案1】:

试试

loggingEvent.GetProperties()["InvocationId"]

loggingEvent.LookupProperty("InvocationId")

详情请见here

【讨论】:

    【解决方案2】:

    你必须在初始化 log4net 后设置属性:

      using (var config = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyFunc.logging.config"))
      {
          log4net.Config.XmlConfigurator.Configure(config);
      }
    
      var log = LogManager.GetLogger(context.FunctionName);
    
      log4net.GlobalContext.Properties["InvocationId"] = context.InvocationId;
    

    您也只需在 log4net 尚未初始化时对其进行初始化。每次通话都这样做效率不高。

    【讨论】:

      【解决方案3】:

      我最终这样做了,这比我想象的要简单得多。

      log4net.LogicalThreadContext.Properties["InvocationId"].ToString()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多