.NET Core Serilog通过扩展或中间件将用户名添加到日志

时间:2018-10-02 11:13:22

标签: c# asp.net asp.net-core serilog

我正在尝试将用户名添加到我的日志中。文档显示:

new_comain.com

但是,我读过其他一些文章,我需要使用中间件将用户名添加到日志中。

这是我到目前为止所拥有的:

使用中间件获取当前用户的用户名

class ThreadIdEnricher : ILogEventEnricher
{
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
    {
        logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(
                "ThreadId", Thread.CurrentThread.ManagedThreadId));
    }
}

Startup.cs

public class UserNameEnricher 
{
    private readonly RequestDelegate next;

    public UserNameEnricher(RequestDelegate next)
    {
        this.next = next;
    }

    public Task Invoke(HttpContext context)
    {
        LogContext.PushProperty("UserName", context.User.Identity.Name);

        return next(context);
    }
}

Program.cs

app.UseAuthentication();
app.UseMiddleware<UserNameEnricher>();

尽管进行了所有这些配置,但用户名仍然没有出现。我想念什么?

Serilog配置:

Log.Logger = new LoggerConfiguration()
   .ReadFrom.Configuration(Configuration)
   .Filter.ByExcluding(Matching.FromSource("Microsoft"))
   .Filter.ByExcluding(Matching.FromSource("System"))
   .Enrich.FromLogContext()
   .CreateLogger();

1 个答案:

答案 0 :(得分:1)

要使其正常工作,您需要指定outputTemplate

  

事件的属性,包括使用扩充程序附加的属性,也可以显示在输出模板中。

Output templates

这是一个用于RollingFile的演示代码。

var output = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message} {ActionName} {UserName} {NewLine}{Exception}";

        Log.Logger = new LoggerConfiguration()
               .Enrich.FromLogContext() // Populates a 'User' property on every log entry
               .WriteTo.RollingFile("Logs/app-{Date}.txt",outputTemplate: output)
               .CreateLogger();

注意

输出中的

{UserName}应该映射UserName中的LogContext.PushProperty("UserName", context.User.Identity.Name);

更新:

通过appsetting.json

进行配置
  "Serilog": {
"MinimumLevel": "Information",
"Override": {
  "Microsoft": "Critical"
},
"WriteTo": [
  {
    "Name": "RollingFile",
    "Args": {
      "pathFormat": "Logs/app-{Date}.txt",
      "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message} {UserName} {ActionName}  {NewLine} {Exception}"
    }
  }
]
   }