我正在尝试使用ASP.NET Core 2.0建立客户端-服务器应用程序的基本原型。作为此过程的一部分,我正在向Seq发送诊断信息。在每个应用程序的Startup
类中,我使用Seq.Extensions.Logging
并按以下方式配置Seq接收器:
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(builder =>
{
builder
.SetMinimumLevel(LogLevel.Debug)
.AddSeq();
});
这有效;所有事件均出现在Seq中。但是,不可能轻松地区分任何特定事件来自哪个应用程序。
过去,我可以使用Serilog向记录器添加属性,这些属性包含在每个事件中。通常,我会将应用程序的名称和运行它的主机添加为一对附加属性:
Log.Logger = new LoggerConfiguration()
.Enrich.WithMachineName()
// ...other configuration...
.CreateLogger();
是否可以将Microsoft日志记录扩展名配置为执行相同的操作?
答案 0 :(得分:0)
有两种选择。
使用内置的Seq
功能。
对于Seq
,它提供API Keys,用于标识客户端应用程序。您可以添加诸如项目名称之类的特定名称的Applied properties
,并通过
services.AddLogging(loggingBuilder =>
{
loggingBuilder.AddSeq(Configuration.GetSection("Seq"));
});
或
services.AddLogging(loggingBuilder =>
{
loggingBuilder.AddSeq("http://xxx:5341", apiKey: "K5HzACIfiQxr67CKlvUj");
});
使用Serialog
来配置输出模板,例如
var output = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message} {ActionName} {UserName} {NewLine}{Exception} {MachineName}";
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext() // Populates a 'User' property on every log entry
.Enrich.WithProperty("MachineName", Environment.MachineName) //new field
.WriteTo.RollingFile("Logs/app-{Date}.txt", outputTemplate: output)
.WriteTo.Seq("http://xxx:5341",apiKey: "K5HzACIfiQxr67CKlvUj")
.CreateLogger();
loggerFactory
//.AddFile("Logs/app-{Date}.txt")
.AddSerilog();