【发布时间】:2019-09-01 06:59:33
【问题描述】:
所以,我目前正在尝试将 Serilog 包含在我的应用程序中,并且想知道以下问题:
是否可以添加一个对象,以便我的 Azure Tablestorage 接收器将其拾取并将其完全写入相应“数据”列中的 JSON,而不将其添加到纯文本消息中?
我最初的做法是这样的:
m_logger.Information("{message} @{context}", message, context);
这就是我的问题的来源。这行得通,但我想让消息本身保持可读性,并将上下文中的元数据保存在单独的列中。
所以,我的第二次尝试现在看起来像这样:
using (LogContext.PushProperty("context", context))
{
m_logger.Information("{message}", message);
}
鉴于,我将此添加到我的记录器配置中:.Enrich.FromLogContext()
现在这种工作方式,对象不再出现在消息中,实际上已添加到数据中,但不是将其完全写入 JSON,而是我在 Tablestorage 上的数据列中最终得到的端点:
{"Timestamp":"2019-09-01T08:52:29.4835746+02:00","Level":"Information","MessageTemplate":"{message}","Properties":{"message":"Login happened","context":"MooMed.Core.DataTypes.Session.Context"}}
所以,这似乎只是在内部调用.ToString()。
我现在想知道是否有内置的方法来递归地 jsonify 对象,或者我是否必须(似乎)在我的 Context 类中覆盖 .ToString()?
【问题讨论】:
标签: c# azure-table-storage serilog