2009-06-17 5 views
7

Ich habe eine harte Zeit, die Dokumentation verschiedener auf der Suche nach ‚in dem Feld‘ Muster wieGibt es ein log4net Muster für machine

%logger 
%level 
%timestamp 

Es gibt natürlich the example page aber ich bin nicht sicher, das ist die volle Liste der Optionen.

Ich weiß auch, dass es möglich ist, MDC-Parameter aus der App an den Logger, aber das beinhaltet eine Codeänderung, die ein anderes Biest als eine Konfigurationsänderung ist.

Gibt es eine %machineName Option oder machineIP Option? Das Problem besteht darin, dass sich alle unsere Server in der Webfarm im selben Datenbankprotokoll anmelden. Wir denken nun, dass eine unverhältnismäßig große Anzahl von Nachrichten von einem Computer kommt.

Antwort

2

Schauen Sie sich die PatternString API an, es sieht so aus, als müssten Sie% property in Ihrem Muster verwenden. Sehen Sie sich auch this article an. Möglicherweise müssen Sie den Computernamen beim Start der Anwendung in den globalen Kontext injizieren.

+0

@AgileJon - dieser Artikel war genau das, wonach ich suchte! Vielen Dank!!! –

10
%property{log4net:HostName} 
11

Was habe ich nur über stolpern ist

<layout type="log4net.Layout.PatternLayout" value="${COMPUTERNAME}"/> 

und das scheint zu funktionieren --- fragen, was der Unterschied zwischen diesem und den anderen Optionen vorgeschlagen. wie %property{log4net:HostName}

+1

$ {...} hängt von Umgebungsvariablen ab. –

+1

das funktioniert auf allen Windows-Rechnern, auf denen ich versucht habe. Sehr hilfreich! –

+0

Ich mag es, warum brauchen Sie eine Abhängigkeit von einer benutzerdefinierten Klasse, wenn Sie nicht müssen? –

3

Erstellen Sie eine Klasse, die den Computernamen bekommt: set

using System; 
using System.IO; 
using log4net.Layout.Pattern; 

namespace YourNameSpace.Converters 
{ 
    public class MachinePatternConverter : PatternLayoutConverter 
    { 
     protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent) 
     { 
      writer.Write(Environment.MachineName);    
     } 
    } 
} 

dann log4net Konfiguration wie folgt:

Ich mag diesen Ansatz, wie es wiederverwendet werden kann und ich kann die Informationen verwalten, wie ich will . Wenn Sie die IP-Adresse beispielsweise anmelden, nur das Gleiche tun und den Konverter erstellen wie folgt:

public class IPPatternConverter : PatternLayoutConverter 
{ 
    protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent) 
    { 
     if (HttpContext.Current == null) 
      return; 

     writer.Write(HttpContext.Current.Request.UserHostAddress); 
    } 
} 

Weitere Informationen über den Link: http://devstuffs.wordpress.com/2012/01/12/creating-your-own-pattern-layout-converter-for-log4net/

2

Mit dieser Antwort https://stackoverflow.com/a/2096452/1224858 über das Hinzufügen von GlobalContext Eigenschaften, I war in der Lage, dies zur Arbeit zu bringen.

Ich habe den folgenden Code in meiner Klasse-Datei:

log4net.GlobalContext.Properties["hostname"] = Environment.MachineName; 

Und dann in der Konfigurationsdatei I Hostnamen verweisen kann, und es wird das hilft

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{hostname}] - %message%newline" /> 
</layout> 

Hoffnung erscheinen.