Asp.net core 将对象作为json发送到Sentry.io

Asp.net core 将对象作为json发送到Sentry.io,asp.net-core,asp.net-core-2.1,sentry,Asp.net Core,Asp.net Core 2.1,Sentry,我们在我们的网站上使用Sentry.AspNetCore NuGet包,并在这里和那里注入ILoggers。 有没有办法使用“结构化日志语法”并将Sentry日志对象设置为JSON,而不只是调用ToString() 编辑: 一些澄清。我们仍然使用NLog来写入文件,我们只是在Program.cs中添加了UseSentry,并保留了所有ILogger的用法。除了Sentry(?)只使用ToString来序列化传递给消息字符串的对象之外,它的工作原理与预期的一样。 我们问题的解决方案可能是以某种方式

我们在我们的网站上使用Sentry.AspNetCore NuGet包,并在这里和那里注入
ILogger
s。 有没有办法使用“结构化日志语法”并将Sentry日志对象设置为JSON,而不只是调用
ToString()

编辑:
一些澄清。我们仍然使用NLog来写入文件,我们只是在
Program.cs
中添加了
UseSentry
,并保留了所有
ILogger
的用法。除了Sentry(?)只使用
ToString
来序列化传递给消息字符串的对象之外,它的工作原理与预期的一样。
我们问题的解决方案可能是以某种方式将自定义格式化程序注入Sentry logger。否则,我们将不得不在我们可能要记录的每个类上重写
ToString
,或者自己添加序列化,或者在记录时创建匿名对象

(匿名对象的日志记录“起作用”,因为编译器生成一个自定义的
.ToString()
重写,列出所有属性及其字符串化值。 示例:)

即使我看到了,请尝试从字符串格式中删除
@

新的TestClass()代替了
\u logger.LogError(“testObj={@testObj}”)

写入:
\u logger.LogError(“testObj={testObj}”,new TestClass())

我怀疑可能是NLog支持更改格式化程序

如果我在没有NLog的情况下运行,则添加:

logger.LogCritical({number}-具有复杂对象的事件:{object}),1,新
{
Name=“狂热者”,
Health=“100%”,
});
我在哨兵中看到:

1-具有复杂对象的事件:{Name=Zealot,Health=100%}

在使用Sentry.NLog时,这可能是一个限制。

即使我看到了,请尝试从字符串格式中删除
@

新的TestClass()代替了
\u logger.LogError(“testObj={@testObj}”)

写入:
\u logger.LogError(“testObj={testObj}”,new TestClass())

我怀疑可能是NLog支持更改格式化程序

如果我在没有NLog的情况下运行,则添加:

logger.LogCritical({number}-具有复杂对象的事件:{object}),1,新
{
Name=“狂热者”,
Health=“100%”,
});
我在哨兵中看到:

1-具有复杂对象的事件:{Name=Zealot,Health=100%}


当使用Sentry.NLog时,这可能是一个限制。

实际上,NLog示例也可以工作;是的,匿名对象按“预期”进行序列化,但当您有一个类型化的类时不会。匿名类似乎有一个看起来几乎像JSON的ToString重写。也许有一种方法可以覆盖格式化程序?那听起来像个bug。你介意在GitHub上提一个吗?我认为这本身不是一个bug,更可能是一个功能请求。也许它可以与NLog(和其他)的工作方式相同,在参数名之前的@告诉格式化程序将参数序列化为JSON,而不是使用ToString;是的,匿名对象按“预期”进行序列化,但当您有一个类型化的类时不会。匿名类似乎有一个看起来几乎像JSON的ToString重写。也许有一种方法可以覆盖格式化程序?那听起来像个bug。你介意在GitHub上提一个吗?我认为这本身不是一个bug,更可能是一个功能请求。也许它可以与NLog(和其他)的工作方式相同,因为参数名前的@告诉格式化程序将参数序列化为JSON,而不是使用ToString。为了将来参考,github上的问题如下:
_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