Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Serilog log语句在第一个log语句之后消失_Azure_Logging_Azure Cosmosdb_Serilog - Fatal编程技术网

Azure Serilog log语句在第一个log语句之后消失

Azure Serilog log语句在第一个log语句之后消失,azure,logging,azure-cosmosdb,serilog,Azure,Logging,Azure Cosmosdb,Serilog,我使用的是.NETFramework 4.6.1。在Serilog之上开发了一个记录器组件,并希望使用Azure Document Db sink。我有一种奇怪的行为。我的第一条日志语句出现在文档数据库中,但在应用程序重新启动时,后续日志消息不会出现 internal class SeriLogger : ILogger { private static readonly string EndpointUri = "https://mysample.docume

我使用的是.NETFramework 4.6.1。在Serilog之上开发了一个记录器组件,并希望使用Azure Document Db sink。我有一种奇怪的行为。我的第一条日志语句出现在文档数据库中,但在应用程序重新启动时,后续日志消息不会出现

    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>

但是日志记录与滚动文件接收器完美配合。请帮帮我


我尝试为serilog启用诊断,如下所示
serilog.Debug.SelfLog.enable(msg=>Debug.WriteLine(msg))
现在我可以在VS输出窗口中看到两行。
2017-03-14T07:40:18.5291346Z向DocumentDB发送一批2条消息

2017-03-14T07:40:22.1107764Z发生一个或多个错误

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

logger = new LoggerConfiguration().WriteTo.Console()
             .WriteTo.AzureDocumentDB(EndpointUri, AuthKey, DatabaseName, CollectionName)
                 .CreateLogger();
以下是我的详细步骤

  • 使用.net framework 4.6.1创建控制台应用程序

  • 添加名为
    SeriLogger

  • 在pramgram.cs中添加测试代码
  • 从控制台和Azure门户中检查结果
  • 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>
    
    
    
    请确保在应用程序关闭时处理
    记录器
    ——批处理事件可能需要刷新。您好,我尝试在使用后处理。但是日志消息甚至没有到达文档数据库(甚至不是第一次)。我正在使用.NET4.6.1,这会是一个原因吗?我尝试为serilog启用诊断,如下面的serilog.debuging.SelfLog.enable(msg=>Debug.WriteLine(msg));现在,我可以在我的VS输出窗口2017-03-14T07:40:18.5291346Z中看到两行,向DocumentDB 2017-03-14T07:40:22.1107764Z发送了一批2条消息。出现了一个或多个错误。嗨,Tom,我尝试了相同的方法。但问题依然存在。看起来我观察到了这个模式。如果集合为空,它将创建第一条日志消息,之后不会创建任何内容。如果你清空集合,它将再次创建第一个文档并在那里停止。在我这边,我无法重新处理你提到的问题。但是如果我不添加代码
    .WriteTo.Console()
    ,则不会创建任何内容。我将用我的详细步骤更新答案。希望有用。@TomSun MSFT Serilog的
    SelfLog
    在输出窗口中产生的错误是:
    2017-03-14T07:40:22.1107764Z发生了一个或多个错误。
    (请参阅问题帖上的评论)。有什么线索吗?干杯谢谢汤姆和尼古拉斯的意见。我还没有找出我的代码/环境中的错误。我甚至将Azure作为Web应用程序托管,但问题依然存在。我正在考虑离开Serilog,继续使用log4net。有一篇博文是关于为docdb安装appender的。希望它能起作用。任何评论都很受欢迎嘿,这是水槽的问题。我打开了一个问题。我有一个一般性的问题。我可以用这个水槽做生产吗。它们足够稳定吗?