Ich schreibe ein separates Protokoll für jedes Mal, wenn ich einen bestimmten Prozess in meinem WCF-Dienst mache. Ich habe ein Standardprotokoll für die gesamte Anwendung, die bereits log4net verwendet. Sollte ich nur einen Appender und Filter für den bestimmten Prozess hinzufügen, dann entfernen Sie es? Dieser Prozess befasst sich mit der Verarbeitung einer Datei, die hochgeladen wurde. Irgendwelche anderen Ideen ???log4net .... separate Protokolldateien
2
A
Antwort
1
I'ved etwas tun ähnlich vor, wir Code etwa wie folgt verwendet:
Ollie
class Program
{
static void Main(string[] args)
{
log4net.Config.BasicConfigurator.Configure();
var file = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
var log = InitialiseLogToFile(file);
log.Info("Made it here!");
log.Error("Made it here!");
var file2 = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
var log2 = InitialiseLogToFile(file2);
log2.Info("Made it here!");
log2.Error("Made it here!");
}
public static ILog InitialiseLogToFile(string file)
{
LogManager.ResetConfiguration();
var hierarchy = (Hierarchy)LogManager.GetLoggerRepository();
var patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
patternLayout.ActivateOptions();
var appender = new FileAppender {File = file, AppendToFile = true, Layout = patternLayout};
appender.ActivateOptions();
var logger = (Logger)hierarchy.GetLogger(file);
logger.AddAppender(appender);
hierarchy.Configured = true;
return LogManager.GetLogger(file);
}
}
1
Okay, wie wäre das Sie eine benutzerdefinierte Implementierung der ILog Schnittstelle erstellen, die auch IDisposable implementiert - Sie Fügen Sie den Appender hinzu, wenn er erstellt wird, und entfernen Sie ihn, wenn er entsorgt wird ...
z.
class Program
{
static void Main(string[] args)
{
log4net.Config.BasicConfigurator.Configure();
var file = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
using (var log = new CustomFileLogger(file))
{
// Process file...
log.Info("file: Made it here!");
log.Error("file: Made it here!");
}
var file2 = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
using (var log = new CustomFileLogger(file2))
{
// Process file...
log.Info("file2: Made it here!");
log.Error("file2: Made it here!");
}
}
}
public sealed class CustomFileLogger : ILog, IDisposable
{
private ILog _log;
private FileAppender _appender;
private string _file;
public CustomFileLogger(string file)
{
_file = file;
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Configured = false;
var patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
patternLayout.ActivateOptions();
var appender = new FileAppender { File = file, AppendToFile = true, Layout = patternLayout };
appender.ActivateOptions();
var logger = (Logger)hierarchy.GetLogger(file);
logger.AddAppender(appender);
hierarchy.Configured = true;
_log = LogManager.GetLogger(file);
}
public ILogger Logger
{
get { return _log.Logger; }
}
public void Dispose()
{
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Configured = false;
var logger = (Logger)hierarchy.GetLogger(_file);
logger.RemoveAppender(_appender);
hierarchy.Configured = false;
_appender = null;
_log = null;
_file = null;
}
public void Debug(object message)
{
_log.Debug(message);
}
public void Debug(object message, Exception exception)
{
_log.Debug(message, exception);
}
public void DebugFormat(string format, params object[] args)
{
_log.DebugFormat(format, args);
}
public void DebugFormat(string format, object arg0)
{
_log.DebugFormat(format, arg0);
}
public void DebugFormat(string format, object arg0, object arg1)
{
_log.DebugFormat(format, arg0, arg1);
}
public void DebugFormat(string format, object arg0, object arg1, object arg2)
{
_log.DebugFormat(format, arg0, arg1, arg2);
}
public void DebugFormat(IFormatProvider provider, string format, params object[] args)
{
_log.DebugFormat(provider, format, args);
}
public void Info(object message)
{
_log.Info(message);
}
public void Info(object message, Exception exception)
{
_log.Info(message, exception);
}
public void InfoFormat(string format, params object[] args)
{
_log.InfoFormat(format, args);
}
public void InfoFormat(string format, object arg0)
{
_log.InfoFormat(format, arg0);
}
public void InfoFormat(string format, object arg0, object arg1)
{
_log.InfoFormat(format, arg0, arg1);
}
public void InfoFormat(string format, object arg0, object arg1, object arg2)
{
_log.InfoFormat(format, arg0, arg1, arg2);
}
public void InfoFormat(IFormatProvider provider, string format, params object[] args)
{
_log.InfoFormat(provider, format, args);
}
public void Warn(object message)
{
_log.Warn(message);
}
public void Warn(object message, Exception exception)
{
_log.Warn(message, exception);
}
public void WarnFormat(string format, params object[] args)
{
_log.WarnFormat(format, args);
}
public void WarnFormat(string format, object arg0)
{
_log.WarnFormat(format, arg0);
}
public void WarnFormat(string format, object arg0, object arg1)
{
_log.WarnFormat(format, arg0, arg1);
}
public void WarnFormat(string format, object arg0, object arg1, object arg2)
{
_log.WarnFormat(format, arg0, arg1, arg2);
}
public void WarnFormat(IFormatProvider provider, string format, params object[] args)
{
_log.WarnFormat(provider, format, args);
}
public void Error(object message)
{
_log.Error(message);
}
public void Error(object message, Exception exception)
{
_log.Error(message, exception);
}
public void ErrorFormat(string format, params object[] args)
{
_log.ErrorFormat(format, args);
}
public void ErrorFormat(string format, object arg0)
{
_log.ErrorFormat(format, arg0);
}
public void ErrorFormat(string format, object arg0, object arg1)
{
_log.ErrorFormat(format, arg0, arg1);
}
public void ErrorFormat(string format, object arg0, object arg1, object arg2)
{
_log.ErrorFormat(format, arg0, arg1, arg2);
}
public void ErrorFormat(IFormatProvider provider, string format, params object[] args)
{
_log.ErrorFormat(provider, format, args);
}
public void Fatal(object message)
{
_log.Fatal(message);
}
public void Fatal(object message, Exception exception)
{
_log.Fatal(message, exception);
}
public void FatalFormat(string format, params object[] args)
{
_log.FatalFormat(format, args);
}
public void FatalFormat(string format, object arg0)
{
_log.FatalFormat(format, arg0);
}
public void FatalFormat(string format, object arg0, object arg1)
{
_log.FatalFormat(format, arg0, arg1);
}
public void FatalFormat(string format, object arg0, object arg1, object arg2)
{
_log.FatalFormat(format, arg0, arg1, arg2);
}
public void FatalFormat(IFormatProvider provider, string format, params object[] args)
{
_log.FatalFormat(provider, format, args);
}
public bool IsDebugEnabled
{
get { return _log.IsDebugEnabled; }
}
public bool IsInfoEnabled
{
get { return _log.IsInfoEnabled; }
}
public bool IsWarnEnabled
{
get { return _log.IsWarnEnabled; }
}
public bool IsErrorEnabled
{
get { return _log.IsErrorEnabled; }
}
public bool IsFatalEnabled
{
get { return _log.IsFatalEnabled; }
}
}
1
Sie können dies ganz einfach, aber es bedeutet, sich auf eine bestimmte Implementierung anstatt die Schnittstellen zu binden. Zum Beispiel:
log4net.ILog log = log4net.LogManager.GetLogger(loggerName);
log4net.Repository.Hierarchy.Logger logImpl = log.Logger as log4net.Repository.Hierarchy.Logger;
if (logImpl != null)
logImpl.AddAppender(uploadLogAppender);
else {
// unexpected logger type - handle this case somehow
}
ProcessUpload(); // does logging
if (logImpl != null)
logImpl.RemoveAppender(uploadLogAppender);
Als appender ist nur vorhanden, während ProcessUpload
läuft, sollte dies Ihnen den Effekt, den Sie brauchen. uploadLogAppender
ist nur eine FileAppender
Instanz mit einem von Ihnen bestimmten Dateinamen, z. B. pro Upload.
Verwandte Themen
- 1. So verschlüsseln Sie log4net-Protokolldateien
- 2. separate Protokolldateien für verschiedene Anwendungen
- 3. Debug-Info und Fehlerinfo in zwei verschiedene Protokolldateien (Log4net) einfügen
- 4. So schreiben Sie Java-Serverprotokolle in separate Protokolldateien
- 5. Veröffentlichen von Protokolldateien
- 6. Programmatically verschiedene Protokolldateien mit log4j
- 7. Gibt es eine Möglichkeit, alte Protokolldateien von einem log4net RollingLogFileAppender in einen anderen Ordner zu verschieben?
- 8. Rollen von Protokolldateien und Entfernen von alten Protokolldateien
- 9. zum Schreiben von Protokolldateien in zwei verschiedene Dateien
- 10. Log4net erstellt keine Protokolldatei
- 11. Analyse von Glassfish-Protokolldateien
- 12. Mehrere Protokolldateien mit Winston?
- 13. Schreiben in separaten Protokolldateien
- 14. binäre Protokolldateien Analyse
- 15. Externe Protokolldateien von Ant
- 16. Legendes IIS 7 Protokolldateien
- 17. Plesk löschen IIS-Protokolldateien?
- 18. Serilog - mehrere Protokolldateien
- 19. Log4j Protokolldateien nicht gefunden
- 20. Wie log4net-Ausgabedateien mit dem Assemblynamen benennen?
- 21. Wie Sie log4net davon abhalten, in zwei separate Dateien zu schreiben
- 22. Wie machst du die log4net-Ausgabe zum aktuellen Arbeitsverzeichnis?
- 23. Protokolldateien im selben Ordner wie Protokolldatei teilen
- 24. Wie häufig Anwendungsdatenordner für log4net angeben?
- 25. log4net zentralisierte Protokollierung für mehrere Komponenten
- 26. Vertrauliche Informationen in Protokolldateien ausblenden
- 27. Löschen von Protokolldateien mit EntLib
- 28. Protokolldateien Rotation mit .net Listener
- 29. Java Logging API leere Protokolldateien
- 30. WSS-Protokolldateien wachsen außer Kontrolle
Das Problem habe ich, das war wohl nicht klar aus meiner Frage. Ich führe eine Datei nach einem Upload aus, und ich möchte eine Protokolldatei für jede Verarbeitung einer Datei. Wenn Sie einen Appender hinzufügen und keinen Filter verwenden, werden alle Protokollnachrichten zu dieser Datei hinzugefügt, anstatt nur die Nachrichten für die Verarbeitung der einen Datei. – CSharpAtl
Deshalb haben wir 'ResetConfiguration' aufgerufen ... – AwkwardCoder
Aber das bedeutet, dass ich jetzt nur noch 1 Appender habe und wenn es andere Dinge in der App gibt, die protokolliert werden müssen, werden sie in die neue Datei eingeloggt ... I NUR wollen Logging von diesem Prozess in die neue Datei und alle anderen Logging in der regulären Protokolldatei gehen. – CSharpAtl