Ist es möglich, den Namen einer Protokolldatei für einen Dateianwender ändern, während die Anwendung ausgeführt wird? Es wird ein paar Mal/Tag getan werden.Ändern Sie den Namen der Protokolldatei während der Laufzeit einige Male
Ich werde versuchen, mich ein wenig mehr zu erarbeiten: Meine App schreibt Firmware auf einem Gerät. Alle Geräte, an denen der Benutzer bereits gearbeitet hat, befinden sich in einem Raster. Der Benutzer kann einen neuen Schreibassistenten starten oder die Aktion auf einem bereits gestarteten Gerät fortsetzen oder neu starten. Was ich tun möchte, ist ein Protokoll über alle Schritte, die der Benutzer für ein bestimmtes Gerät ausführt.
Beispiel: Wenn der Benutzer auf dem Gerät AB0124 arbeitet, möchte ich in eine Protokolldatei namens AB0124.log schreiben. Wenn er mit der Arbeit an diesem Gerät endet und auf dem Gerät XY5618 startet, möchte ich diese Aktionen in XY5618.log protokollieren
Ich habe gelesen, dass es möglich ist, eine Context-Eigenschaft (here und here und viele andere Beiträge) zu verwenden , aber Sie müssen die Eigenschaft festlegen, bevor Sie den Logger erstellen. Anstatt also einen Logger in der Klasse zu erstellen, erstelle ich einen in meiner Methode nach dem Festlegen der Eigenschaft. Aber bis jetzt wird nichts geloggt.
Wenn ich den Dateinamen hardcodiert in der Konfig, funktioniert es. Fehle ich hier etwas?
log4net.config:
<appender name="StepsLogAppender" type="log4net.Appender.FileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<file type="log4net.Util.PatternString" value="%property{LogPathModifier}" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd/MM/yyyy - HH:mm:ss} - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="StepsLogAppender" />
</root>
C#:
public void WriteStepInfo(string device, int step)
{
log4net.ThreadContext.Properties["LogPathModifier"] = string.Format("D:\\StepsDevice_{0}.txt", device);
var log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log.Info(string.Format("Device {0} - step {1}.", device, step));
}
Und in den AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
Danke für das Beispiel. Genau das, was ich brauche! – AngieM
Dies ist die beste Implementierung, die ich gefunden habe ... Danke ... – Emerson