问题描述
我们在我们的网站上使用Sentry.AspNetCore NuGet程序包,并且在这里和那里注入ILogger<T>
。
有什么方法可以使用“结构化日志记录语法”并使Sentry日志对象成为JSON,而不仅仅是调用ToString()
?
_logger.LogError("testObj = {@testObj}",new TestClass());
// (The @ forces NLog to serialize object as JSON. Looks like it's used in some of the other logging frameworks as well.)
public class TestClass
{
public string SomeProp { get; } = "SomeValue";
public int AnotherProp { get; } = 1337;
}
// Preferred message: testObj = {"SomeProp":"SomeValue","AnotherProp":1337}
// Actual Message: testObj = MyNameSpace.TestClass
编辑:
一些澄清。我们仍然使用NLog写入文件,我们只是在UseSentry
中添加了Program.cs
,并保持了所有ILogger<T>
的用法。除了Sentry(?)仅使用ToString
来序列化传递给消息字符串的对象之外,它的工作符合预期。
解决此问题的方法可能是以某种方式将自定义格式化程序注入Sentry记录器。否则,我们将不得不重写可能要记录的每个类上的ToString
,或者在记录时自行添加序列化或创建匿名对象。
(记录匿名对象“有效”,因为编译器生成了一个自定义.ToString()
覆盖,该覆盖列出了所有属性及其字符串值。
例如:https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA+ABATARgLABQGAzAATakDCpA3oaQ+WRiqQLIAUAlLfY/wDcAhlFIJSAXlIA7GAHdapACowAzgBdJpAETq167aQC+Abj4MjhI0A=)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)