SeriLog Azure 同步下降 }}?

SeriLog Azure sync dropping }}?

请求缺少字符的日志。

在 Program.cs 中,我使用

设置了 Serilog
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>().UseSerilog();

appsettings.json 有

 "Serilog": {
   "Using": [ "Serilog.Sinks.AzureTableStorage" ],

我的代码使用

记录一个对象对象
Using SeriLog
// etc
Log.Log.Information("REQUEST:" + Newtonsoft.Json.JsonConvert.SerializeObject(request));

当我使用

查询日志时
    public void GetData()
    {
        var info = new StorageInfo();
        var storageAccount = CloudStorageAccount.Parse(info.ConnectionString);
        var query = TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.GreaterThanOrEqual,DateTimeOffset.Now.AddDays(-1).Date);
        var exQuery = new TableQuery<LogEntity>().Where(query);   
        var tableClient = storageAccount.CreateCloudTableClient();
        var table = tableClient.GetTableReference(info.TableName);
        var results = table.ExecuteQuery(exQuery);  
        foreach (LogEntity entity in results.OrderBy(x=>x.Timestamp))
        {
             var s =$"log: {entity.PartitionKey},  \t{entity.RenderedMessage},\t{entity.Timestamp},\t{entity.Timestamp.Millisecond} ms";
            Trace.WriteLine(s);
        }
    } 

但是,当我将输出复制并粘贴到 VSCode 并将格式设置为 Json 时,我发现缺少一些右大括号

这里的主要问题是您没有让 request 成为 message-insert,通常情况下应该如此。

Log.Log.Information("REQUEST:" + Newtonsoft.Json.JsonConvert.SerializeObject(request));

应该变成:

Log.Information("REQUEST: {request}", Newtonsoft.Json.JsonConvert.SerializeObject(request));

我推荐阅读 https://serilog.net/ and the serilog wiki,因为它提供了很好的背景知识和示例。

Serilog Analyzer 工具非常有助于在 VS 中编辑时即时指出此类内容。