2009-11-25 20 views
12

Veritabanına ek alanlar eklemek ve bunları log4net'te kullanmak mümkün mü? log-table'da fazladan bir alana sahip olmak istediğim bir UserId var.Log4Net ve ekstra alanlar

ben log4net.config alanına eklemiş:

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.RawPropertyLayout" /> 
</parameter> 

Ama nasıl ekstra veritabanı alanını desteklemek için ILog arayüzünü güncelleyebilirim. Bu yüzden örneğin log olabilir:

log4net.LogManager.GetLogger("logname").Fatal(message, exception, userid); 

cevap

19

Log4net'te "içerik" özelliğini kullanabilirsiniz. Temel olarak, daha sonra log ekleyicinizde kullanabileceğiniz özellikleri ayarlamanıza izin verir. Bu özellikleri farklı kapsamlarda (Global, Thread vb.) Ayarlayabilirsiniz. Senin durumunda I (kullanıcı oturum örneğin hemen sonra) gitmek olabileceğini düşünüyorum:

yapılandırma dosyasında
log4net.ThreadContext.Properties["userid"] = userid; 

, daha sonra bu özelliği kullanmak ve günlük appender eklemek olabilir. Ben yukarıdaki snippet'lerimizi derlenmiş değil unutmayın, bu yüzden bazı verdiği gerekebilir Lütfen

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{userid}" /> 
    </layout> 
</parameter> 

o AdoNetAppender için böyle bir şey olacağını düşünüyorum, ama size nasıl bu olabilir genel bir fikir vermelidir çözülmeli. Bu here hakkında daha fazla bilgi alabilirsiniz.

Ps. İlk cevapta atıfta bulunulan MDC.Set'in eskimiş olduğunu düşünüyorum.