c# - 向 Azure 表存储中的 Serilog 表添加自定义列以记录新信息
问题描述
可以在 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();
解决方案
如果您想在使用 Serilog 将日志写入 azure 表存储时添加其他属性,则需要调用Enrich.FromLogContext()
and LogContext.PushProperty
。使用这两种方法,您的应用程序将向 Azure 表添加其他属性。更多详细信息,请参阅文档
例如
- 安装 SDK
Install-Package Serilog.Sinks.AzureTableStorage
Install-Package Serilog.Enrichers.Thread
- 代码
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; }
}
推荐阅读
- sql - 计数相关性/加权算术平均 SQL
- wordpress - 目录未显示在 wordpress 和帖子的自定义中
- mysql - 如果第 2 列缺少一个匹配项,尽管有其他匹配项,则返回第 1 列
- java - 从 Apache CXF 使用 WCF 服务
- c++ - 如何在 Unreal Engiene 4.26 C++ 中使用“UWidgetLayoutLibrary::GetMousePositionOnViewport(...)”?
- javascript - 制作一个活跃的元素并使其余的不活跃
- android - 音频文件无法使用 AssetFileDescriptor 正常工作
- google-bigquery - 大查询过滤掉数字
- python - type.TypeVar 中的参数“绑定”是什么意思?
- java - Serenity Junit - 如何通过 mvn 命令使用 serenity 执行指定的单个测试