【问题标题】:Add a custom column to Serilog Table in Azure Table Storage for logging new information向 Azure 表存储中的 Serilog 表添加自定义列以记录新信息
【发布时间】:2020-06-17 20:40:56
【问题描述】:

是否可以在 Azure 表存储中的 Serilog 表中添加一个新列,用于记录新的额外字段,例如 accountID 或 login Name?

我认为可以添加一个新列,但是可以像我为新添加的列所说的那样在 Serilog 中传递额外的字段?我如何在 Startup.cs 或 web.config 中定义它?谢谢

这是我在 web.config 中的配置:

<add key="serilog:using:AzureTableStorage" value="Serilog.Sinks.AzureTableStorage" />
    <add key="serilog:write-to:AzureTableStorageWithProperties.connectionString" value="DefaultEndpointsProtocol=https;AccountName=MyAccountName;AccountKey=MyAccountKey;EndpointSuffix=core.windows.net" />
    <add key="serilog:write-to:AzureTableStorage.formatter" value="Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact" />
    <add key="serilog:write-to:AzureTableStorageWithProperties.storageTableName" value="Serilog" />

startup.cs 配置:

Log.Logger = new LoggerConfiguration()
        .ReadFrom.AppSettings()
        .CreateLogger();

【问题讨论】:

  • @Jawad 我把我的启动配置,你能给我一些实际的例子吗?
  • 我不想重复努力,see this thread 用额外的字段丰富你的 Logger。您将无法在 LoggerConfiguration 中执行此操作,因为加载它的帐户不是您最可能想要捕获的 UserID。您还可以自定义 BatchFormatter 以在将事件 json 发送到 AzureTableStorage 之前对其进行修改
  • @Erased 对你有用吗?

标签: c# asp.net-mvc azure-table-storage serilog serilog-exceptions


【解决方案1】:

如果您想在使用 Serilog 将日志写入 Azure 表存储时添加其他属性,则需要调用 Enrich.FromLogContext()LogContext.PushProperty。使用这两种方法,您的应用程序将向 Azure 表添加其他属性。更多详情请参考document

例如

  1. 安装 SDK
Install-Package Serilog.Sinks.AzureTableStorage 
Install-Package Serilog.Enrichers.Thread
  1. 代码
static void Main(string[] args)
        {

            var storage =CloudStorageAccount.Parse("");
            string tableName = "log";



            var _log = new LoggerConfiguration()
                           .Enrich.FromLogContext()
                           .WriteTo.AzureTableStorageWithProperties(storage, LogEventLevel.Information, storageTableName: tableName, propertyColumns: new string[] { "AccountId" , "Name" }) ;
            var logger = _log.CreateLogger();
            var exampleuser = new User { AccountId = 3, Name = "Allen" };
            LogContext.PushProperty("AccountId", exampleuser.AccountId);         
            logger.Information("{@User}", exampleuser);

            exampleuser = new User { AccountId = 1, Name = "Jim" };
            LogContext.PushProperty("AccountId", exampleuser.AccountId);
            logger.Information("{@User}", exampleuser);


            Console.ReadLine();



        }
 class User
    {
        public int AccountId { get; set; }
        public string Name { get; set; }

    }

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 2012-02-15
    • 2015-03-09
    • 2023-03-28
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多