2016-10-10 6 views
2

私はC#でASP.NET MVCのSerilogで作業しています。特定の列に書き込むSerilog ASP.NET MVC C#

ログの種類は、管理者レベルのものとユーザーレベルのものがあります。

「ロール」という余分な列に、Microsoftのメンバーシップに従って、管理者の場合は1、ユーザーの場合は2が含まれます。

私はこのコードを使用:

string connectionString = ConfigurationManager.........; 

      Log.Logger = new LoggerConfiguration() 
       .MinimumLevel.Debug() 
       .WriteTo.MSSqlServer(connectionString, "Logs") 
       .Enrich.WithExceptionDetails() 
       .Enrich.With<HttpRequestIdEnricher>() 
       .Enrich.FromLogContext() 
       .CreateLogger(); 

      Log.Information("Web4 starting"); 
      Log.Information("log location: {0}", AppDomain.CurrentDomain.BaseDirectory); 

を私はすでに、私は列に書き込むことができますどのように

た後、それを作成し、データベースに列を追加しましたか?

答えて

2

ColumnOptionsあなたは列に関するSQL Serverのシンクを伝えることができます:

ロガーの設定メソッドに渡さ
var columnOptions = new ColumnOptions 
{ 
    AdditionalDataColumns = new Collection<DataColumn> 
    { 
    new DataColumn {DataType = typeof (string), ColumnName = "Role"} 
    } 
}; 

.WriteTo.MSSqlServer(connectionString, "Logs", columnOptions: columnOptions) 

データは各ログイベントにアタッチする必要があります

class RoleEnricher : ILogEventEnricher 
{ 
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory pf) 
    { 
    var role = // Get the role from your identity provider 
    logEvent.AddOrUpdateProperty(pf.CreateProperty("Role", role)); 
    } 
} 

次に、エンハライザを使用するようにロガーを設定します。

.Enrich.With<RoleEnricher>() 
+0

このソリューションでは、RoleEnricherにHttpContextにアクセスしたり、別の方法で注入したりできますか?コンテキストからuserIdを取得しようとしていますが、独自の列を与えています。 - 必要に応じて新しい質問を作成できます。 – ttugates

関連する問題