Serilog LogEventPropertyValue 的 Serilog 自定义接收器格式问题
Serilog Custom Sink Formatting Issue with Serilog LogEventPropertyValue
我必须创建自己的自定义接收器,因为 none 当前可用的接收器满足了我的需要。
我遇到的问题是在 Emit 方法中从 logEvent 消息中获取 key/value 对值时,该值用引号和反斜杠括起来。
我试过将字典中的输出值转换为字符串,然后删除不需要的属性,但没有任何效果。
我的自定义接收器中的方法 Class:
public void Emit(LogEvent logEvent)
{
var properties = logEvent.Properties;
Serilog.Events.LogEventPropertyValue value;
if (properties.TryGetValue("logEventCategory", out value))
{
// Regex.Replace((value.ToString() ?? "").Replace("'", @"\'").Trim(), @"[\r\n]+", " "); // Not working
var notWorking = value.ToString();
var formattedValueNotWorking = value.ToString().Replace("\r\n", "\r\n");
}
}
似乎 key/value 对值的任何格式化尝试都被忽略了:您看到示例字符串值 System 被一个 \"System\" 包裹着
我想要的只是实际的字符串,而不是字符串周围的反斜杠或引号。
创建我自己的接收器是一项非常艰巨的任务,我只想让事情变得简单,花了两天时间试图了解消息格式的更广泛情况,但是对于自定义接收器,它变得过于复杂和臃肿的编码,无法满足我的需求需要。所有其他标准消息结构属性都呈现正常,例如消息/级别/时间戳等,它只是微调我需要的属性值的呈现,以便将这些值保存到我的数据库中它们自己的列中。
看来我只需要对字符串替换使用正确的语法:
public void Emit(LogEvent logEvent)
{
var properties = logEvent.Properties;
Serilog.Events.LogEventPropertyValue value;
if (properties.TryGetValue("logEventCategory", out value))
{
var formattedValueWorking = value.ToString().Replace("\"", "");
var test = formattedValueWorking;
}
}
您需要从封闭的 ScalarValue
:
中解开字符串
// using Serilog.Events;
public void Emit(LogEvent logEvent)
{
var properties = logEvent.Properties;
Serilog.Events.LogEventPropertyValue value;
if (properties.TryGetValue("logEventCategory", out value) &&
value is ScalarValue sv &&
sv.Value is string rawValue)
{
// `rawValue` is what you're looking for
我必须创建自己的自定义接收器,因为 none 当前可用的接收器满足了我的需要。
我遇到的问题是在 Emit 方法中从 logEvent 消息中获取 key/value 对值时,该值用引号和反斜杠括起来。
我试过将字典中的输出值转换为字符串,然后删除不需要的属性,但没有任何效果。
我的自定义接收器中的方法 Class:
public void Emit(LogEvent logEvent)
{
var properties = logEvent.Properties;
Serilog.Events.LogEventPropertyValue value;
if (properties.TryGetValue("logEventCategory", out value))
{
// Regex.Replace((value.ToString() ?? "").Replace("'", @"\'").Trim(), @"[\r\n]+", " "); // Not working
var notWorking = value.ToString();
var formattedValueNotWorking = value.ToString().Replace("\r\n", "\r\n");
}
}
似乎 key/value 对值的任何格式化尝试都被忽略了:您看到示例字符串值 System 被一个 \"System\" 包裹着 我想要的只是实际的字符串,而不是字符串周围的反斜杠或引号。
创建我自己的接收器是一项非常艰巨的任务,我只想让事情变得简单,花了两天时间试图了解消息格式的更广泛情况,但是对于自定义接收器,它变得过于复杂和臃肿的编码,无法满足我的需求需要。所有其他标准消息结构属性都呈现正常,例如消息/级别/时间戳等,它只是微调我需要的属性值的呈现,以便将这些值保存到我的数据库中它们自己的列中。
看来我只需要对字符串替换使用正确的语法:
public void Emit(LogEvent logEvent)
{
var properties = logEvent.Properties;
Serilog.Events.LogEventPropertyValue value;
if (properties.TryGetValue("logEventCategory", out value))
{
var formattedValueWorking = value.ToString().Replace("\"", "");
var test = formattedValueWorking;
}
}
您需要从封闭的 ScalarValue
:
// using Serilog.Events;
public void Emit(LogEvent logEvent)
{
var properties = logEvent.Properties;
Serilog.Events.LogEventPropertyValue value;
if (properties.TryGetValue("logEventCategory", out value) &&
value is ScalarValue sv &&
sv.Value is string rawValue)
{
// `rawValue` is what you're looking for