Frage

Ich habe versucht, das Datum meinem Log -Dateinamen hinzuzufügen, und ich konnte es zum Laufen bringen, indem ich den wenigen Vorschlägen, die ich in Stackoverflow gefunden habe, befolgt. Alles funktioniert gut, aber aus irgendeinem Grund hat die erste Datei immer das Datum zweimal angehängt.

Zum Beispiel statt von log.2009-02-23.log, Ich bekomme log.2009-02-23.log.2009-02-23.log.

Ich fand es so seltsam und fyi, dass dies ein sehr einfacher Code ist. Es ist nicht so, als hätte ich es in einer Umgebung mit mehreren Threads.

Meine log4net -Konfiguration:

<log4net>
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
    <file value="../../Logs/Mylog"/>
    <staticLogFileName value="false" />
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value=".yyyy-MM-dd.lo\g" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/>
    </layout>
</appender>
<root>
    <level value="INFO"/>
    <appender-ref ref="MyLog"/>
</root>
</log4net>

Irgendwelche Ideen warum?

Bearbeiten: Ich möchte die Informationen über die Umgebung hinzufügen, in der ich dies teste.
- ASP.NET
- .NET Framework 2.0
- Windows Server 2003 64-Bit Service Pack 2
- log4net 1.2.10

War es hilfreich?

Lösung 2

Es ist ein Erlaubnisproblem. Zumindest passiert mir das.

Ich bin neu in der Verwendung von Log4Net, also wusste ich nicht, dass es interne Protokollierung hat, aber ich habe es gefunden, also habe ich versucht, mich zu drehen interne Protokollierung an. Ich war mir nicht sicher, wie es sagt, aber so sieht es für mich aus: 1. Gehen Sie das Datum dem Dateinamen an. 2. Versuchen Sie, auf die Datei zuzugreifen, um darauf zu schreiben (fehlgeschlagen). 3. Fügen Sie das Datum dem Dateinamen hinzu wieder. 4. Greifen Sie erfolgreich auf die Datei zu (die jetzt den seltsamen Dateinamen enthält)

Bevor ich das weiß, habe ich die Lösung für dieses Problem mit Schlüsselwörtern wie dem, was ich als Titel in dieser Stackoverflow-Frage habe, auf die Lösung dieses Problems geführt. Es gab da draußen so viele Informationen. Ich habe vielleicht einen Mann gefunden, der sagte, dass es einigen Leuten passiert, aber nie wirklich erklärte, warum noch die Lösung. Mit diesen neuen Informationen (+der internen Fehlermeldung von Log4Net) habe ich verschiedene Threads von den Suchmaschinen angesehen. Damit fand ich Hinweise, dass es sich um ein Erlaubnisproblem handeln könnte.

Es scheint, dass die Schreibanmeldung keine ausreichende Berechtigung für den Protokollordner hat. Die Standardidentität der Anwendung ist in der Regel Network_Service. Nachdem ich mehr die Erlaubnis geboten habe (ich habe die volle Kontrolle übergeben, aber ich weiß nicht, was das Minimum für den Ordner ist), funktioniert es gut.

Wenn jemand dies besser erklären kann als ich, zögern Sie bitte nicht zu bearbeiten.

Andere Tipps

Dies geschieht, wenn ein Problem beim Zugriff auf die Protokolldatei beim Initialisieren des Protokollsystems besteht. Es kann passieren, wenn Sie das Protokollsystem zweimal initialisieren, Ihr Programm ausführen, während eine andere Kopie ausgeführt wird und in die Protokolldatei schreibt oder wenn Sie die Protokolldatei in einem Texteditor bearbeiten. Grundsätzlich alles, was eine Schreibschloss in der Protokolldatei verursacht, wenn log4Net init ausgeführt wird.

Überprüfen Sie Ihren Code für doppelte Aufrufe bei LOG4NET Init - möglicherweise initialisieren Sie beispielsweise in einem Konstruktor anstelle in einem Singleton -statischen Konstruktor oder globalen Init.

Dies kann auch passieren, wenn Sie in einer "Webgarten" -Konfiguration ausgeführt werden und die PID nicht in den Dateinamen aufnehmen, da jeder verschiedene Webserverprozess versucht, in dieselbe Datei zu schreiben. Wenn Sie Web Gardens verwenden und in Dateien schreiben, fügen Sie das PID zum Dateiname -Muster hinzu, sodass jeder Serverprozess eine eigene Datei erhält.

Ich bin auf das gleiche Problem stoße. Für mich war es eine Kombination aus der Verwendung von RollingFileAppender für meine Testprotokolle und meine Nunit -Tests mit Resharper.

Es stellt sich heraus, dass Resharper verwendet zwei Prozesse zum Ausführen der Tests:

2 TaskRunners

Dies erstellt eine Rennbedingung in der Protokolldatei.

Wenn wir nun den Namen der Protokolldatei ändern, um die Prozess -ID einzuschließen:

<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="MyLog.pid.%processid" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="false"/>
  <datePattern value="_yyyy-MM-dd'.log'"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p '%40.40c' - %m%n" />
  </layout>
</appender>

das Problem ist gelöst. Jede Datei erhält ihren eigenen, eindeutigen Namen:

MyLog.pid.5440_2010-10-13.log
MyLog.pid.1496_2010-10-13.log

Beachten Sie die Verwendung von Musterstring für 'Typ'.

Ich hoffe, das hilft.

Wie Olle betonte. Ihr Problem hängt mit dem " g" zusammen, den Ihr log4net als ein weiteres DateFormat interpretiert. Versuchen Sie, das ".yyyy-mm-dd.lo g" zu löschen und sie durch "Yyyy-Mm-dd" zu ersetzen.

Das ".log" gehört nicht zum DateFormat

Ich benutze Folgendes:

<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/>

Damit bekomme ich Dateinamen wie: 2009.02.23.log

Versuchen <datePattern value=".yyyy-MM-dd.lo\g" /> Ich verstehe nicht, wofür das g ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top