2009-11-25 25 views
12

Czy jest możliwe wstawienie dodatkowych pól do bazy danych i użycie ich w log4net? Mam UserId chciałbym mieć w dodatkowym polu w log-table.Log4Net i dodatkowe pola

Dodałem pole w log4net.config:

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

Ale jak mogę zaktualizować interfejs ILog wspierania pole bazy danych dodatkowych. Mogę na przykład zalogować:

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

Odpowiedz

19

Można użyć funkcji "kontekstu" w log4net. Zasadniczo pozwala to na ustawienie właściwości, które można następnie użyć w aplikacji dołączającej do dziennika. Możesz ustawić te właściwości na różnych zakresach (Globalny, Wątek itp.). W twoim przypadku myślę, że może się udać (na przykład tuż po zalogowaniu się użytkownika):

log4net.ThreadContext.Properties["userid"] = userid; 

w pliku konfiguracyjnym, można następnie wykorzystać tę właściwość i dodać go do appender rejestrowania. Myślę, że byłoby coś takiego dla AdoNetAppender

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

Należy pamiętać, że nie opracowano żadnej z powyższych fragmentów, więc mogą potrzebować trochę skomplikowany, ale powinno dać ogólne pojęcie, jak to może być rozwiązany.

Możesz przeczytać więcej na ten temat here.

Ps. Myślę, że MDC.Set, o którym mowa w pierwszej odpowiedzi, jest przestarzałe.