Frage Log4Net und zusätzliche Felder


Ist es möglich, zusätzliche Felder in die Datenbank einzufügen und sie in log4net zu verwenden? Ich habe eine UserId die ich gerne in einem extra Feld in der log-table.

Ich habe das Feld in der hinzugefügt log4net.config:

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

Aber wie aktualisiere ich die ILog Schnittstelle zur Unterstützung des zusätzlichen Datenbankfeldes. So könnte ich zum Beispiel protokollieren:

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

12
2017-11-25 07:49


Ursprung


Antworten:


Sie könnten die "Kontext" -Funktion in log4net verwenden. Grundsätzlich können Sie Eigenschaften festlegen, die Sie dann in Ihrem Log Appender verwenden können. Sie können diese Eigenschaften in verschiedenen Bereichen festlegen (Global, Thread usw.). In deinem Fall denke ich, du könntest gehen (zum Beispiel direkt nachdem der Benutzer sich eingeloggt hat):

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

In Ihrer Konfigurationsdatei könnten Sie dann diese Eigenschaft verwenden und sie zum Logging Appender hinzufügen. Ich denke, es wäre so etwas für den AdoNetAppender

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

Bitte beachten Sie, dass ich keine der obigen Snippets kompiliert habe, so dass sie möglicherweise etwas optimiert werden müssen, aber es sollte Ihnen eine allgemeine Vorstellung davon geben, wie dies gelöst werden könnte.

Sie können mehr darüber lesen Hier.

Ps. Ich denke, dass das MDC.Set, auf das in der ersten Antwort Bezug genommen wird, veraltet ist.


19
2017-11-25 11:15



Ich denke du musst es benutzen MDC.Set um zusätzliche Kontextwerte festzulegen. Prüfen Tipp # 4 in diesem Blog.


2
2017-11-25 08:10