第一个日志语句后,Serilog日志语句消失

时间:2017-03-13 18:37:45

标签: azure logging azure-cosmosdb serilog

我正在使用.NET Framework 4.6.1。在Serilog之上开发了一个记录器组件,并希望使用Azure Document Db接收器。我的行为很奇怪。我的第一个日志语句出现在文档Db中,但在应用程序重新启动时,后续日志消息不会出现。

    internal class SeriLogger : ILogger
    {

        private static readonly string EndpointUri = "https://mysample.documents.azure.com:443/";
        private static readonly string AuthKey = "UkgOMJT08bA5KOvd1O9IYgo0w==";
        private static readonly string DatabaseName = "Diagnostics";
        private static readonly string CollectionName = "Logs";

        protected readonly Serilog.Core.Logger logger;

        public SeriLogger()
        {
            logger = new LoggerConfiguration()
            .WriteTo.AzureDocumentDB(EndpointUri, AuthKey, DatabaseName, CollectionName)
                .CreateLogger();
            //logger = new LoggerConfiguration()
            //.WriteTo.RollingFile(Path.Combine(
            //    AppDomain.CurrentDomain.BaseDirectory, "log-{Date}.txt"), fileSizeLimitBytes: 536870912)
            //    .CreateLogger();
        }

public void Log(string message, LogLevelEnum logLevel)
        {
            switch (logLevel)
            {
                case LogLevelEnum.Debug: logger.Debug(message); break;
                case LogLevelEnum.Information: logger.Information(message); break;
                case LogLevelEnum.Warning: logger.Warning(message); break;
                case LogLevelEnum.Error: logger.Error(message); break;
                case LogLevelEnum.Fatal: logger.Fatal(message); break;
            }
        }

我第一次调用Log()方法会创建一个新文档,但是这会在第二次调用wards时停止。如果我重新启动应用程序,第一次调用会创建一个日志条目作为新文档,然后不再工作。知道我做错了什么吗?以下是我正在使用的Nuget版本

<packages>
  <package id="Microsoft.Azure.DocumentDB" version="1.11.1" targetFramework="net461" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net461" />
  <package id="Serilog" version="2.4.0" targetFramework="net461" />
  <package id="Serilog.Sinks.AzureDocumentDb" version="3.5.18" targetFramework="net461" />
  <package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net461" />
  <package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net461" />
</packages>

但是日志记录与Rolling File接收器完美配合。请帮帮我。

我尝试为下面的Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));启用serilog诊断 现在我可以在VS输出窗口中看到两行。 2017-03-14T07:40:18.5291346Z将两批消息发送到DocumentDB 2017-03-14T07:40:22.1107764Z发生了一个或多个错误。

1 个答案:

答案 0 :(得分:0)

我根据您的代码测试它,没有创建文档来记录文档db中的消息。 但是,如果我添加WriteTo.Console(),那么它可以正常工作。请尝试使用以下代码。

logger = new LoggerConfiguration().WriteTo.Console()
             .WriteTo.AzureDocumentDB(EndpointUri, AuthKey, DatabaseName, CollectionName)
                 .CreateLogger();

以下是我的详细步骤。

  1. 使用.net framework 4.6.1

  2. 创建控制台应用程序
  3. 添加名为SeriLogger

  4. 的班级

    enter image description here

    1. 在pramgram.cs
    2. 中添加测试代码

      enter image description here

      1. 从控制台和Azure门户中检查结果
      2. enter image description here

        packages.config文件

        <?xml version="1.0" encoding="utf-8"?>
        <packages>
          <package id="Microsoft.Azure.DocumentDB" version="1.11.1" targetFramework="net461" />
          <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net461" />
          <package id="Serilog" version="2.3.0" targetFramework="net461" />
          <package id="Serilog.Sinks.AzureDocumentDb" version="3.5.18" targetFramework="net461" />
          <package id="Serilog.Sinks.Console" version="2.1.0" targetFramework="net461" />
        </packages>
        
相关问题