因此,在这里我只提供一些背景信息,我们使用Serilog,并使用各种接收器,包括我们自己的接收器。
对于大多数接收器,我们添加了用于驱动逻辑的额外属性,例如路由/过滤等
所以对于我们来说,给定的日志语句可能看起来像这样
public class SomeClass
{
public String Name { get; set; }
public string AppType { get; set; }
}
var loggingEnvironment = new SomeClass()
{
Name = "foo",
AppType = "test",
};
Logger.Error("{Category} {Message} {@LoggingEnvironment}", LogCategory.BUS, "Oh no its gone bad jim", loggingEnvironment);
在需要LoggingEnvironment属性的地方,一路穿越MOST的所有接收器。
但是对于文件接收器输出,我们看看是否
2018-11-21 10:30:21.332 [ERR] BUS "Oh no its gone bad jim" SomeClass { Name: "foo", AppType: "test" }
我们希望文件书面文字仅仅是
2018-11-21 10:30:21.332 [ERR] BUS "Oh no its gone bad jim"
从Serilog https://github.com/serilog/serilog/wiki/Formatting-Output阅读本节的更多内容,它讨论Message的格式化程序。
Message-日志事件的消息,以纯文本形式呈现。 :l格式说明符切换字符串引用,而:j对所有嵌入式结构化数据使用JSON样式呈现。
但是由于这个额外的属性实际上并不是消息的一部分,因此我认为文档的这一部分不适用。
将Serilog.Sinks.File的所有代码都带入我们自己的代码库中,是否有办法摆脱写入到接收器输出中的这个(或任何其他属性)值?