我將爲每次在WCF服務中執行特定過程時寫出單獨的日誌。我有一個使用log4net的整個應用程序的標準日誌。我是否應該爲特定的進程添加appender和過濾器,然後將其刪除?該過程處理處理上傳的文件。任何其他的想法?log4net ....單獨的日誌文件
2
A
回答
1
I'ved做類似的東西之前,我們使用的代碼是這樣的:
奧利
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
好了怎麼樣創建ILog的接口也實現IDisposable的自定義實現 - 你當它被創建時添加appender並且在它被丟棄時將它移除...
例如。
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
你可以很容易地做到這一點,但它意味着將自己綁定到特定的實現而不是接口。例如:
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);
由於附加器是目前唯一同時ProcessUpload
運行,這應該給你你需要的效果。 uploadLogAppender
只是一個FileAppender
實例,其文件名由您決定,比如說每上傳一次。
相關問題
- 1. 與log4net獨特的日誌文件
- 2. 日誌事件在一個單獨的log4net的日誌
- 3. Log4net:每個類的單獨日誌文件
- 4. Log4net - 每日重置日誌文件
- 5. log4net的 - 任何日誌文件產生
- 6. log4net的+ Common.Logging +天青=空日誌文件
- 7. Log4net的空NHibernate日誌文件
- 8. 單獨的日誌文件爲同一類的單獨實例
- 9. 如何解析log4net日誌文件?
- 10. Log4net不爲NHibernate創建日誌文件
- 11. 如何清除log4net日誌文件?
- 12. log4net日誌文件沒有創建
- 13. 使用Log4Net創建ReadOnly日誌文件
- 14. 未創建Log4net日誌文件?
- 15. log4net動態創建日誌文件
- 16. log4net - 只創建一個日誌文件
- 17. Log4Net VB日誌文件問題
- 18. 無法寫入日誌文件log4net
- 19. 如何加密log4net日誌文件
- 20. log4net日誌文件在哪裏?
- 21. Log4net EventLogAppender日誌事件ID
- 22. log4net日誌記錄沒有創建日誌文件
- 23. 使用NLog的特定類實例的單獨日誌文件
- 24. 爲多個日誌文件滾動的log4net文件 - 文件名
- 25. 需要爲jar文件創建單獨的日誌文件嗎?
- 26. Log4j單獨的日誌
- 27. log4net - 缺少日誌
- 28. Log4Net消息日誌
- 29. 滾動的Log4Net日誌文件中的自定義文件名?
- 30. log4net的事件日誌已滿
我有問題,這可能不是我的問題。上傳後我正在運行一個文件,並且我希望每個文件處理都有一個日誌文件。如果添加appender並且不使用過濾器,我會將所有日誌消息添加到該文件中,而不是僅處理該文件的消息。 – CSharpAtl 2009-08-21 13:36:49
這就是爲什麼我們稱爲'ResetConfiguration'... – AwkwardCoder 2009-08-21 13:40:53
但是這意味着現在我只有1 appender,如果應用程序中有其他東西需要記錄,他們將記錄到新文件中...我只需要從此進程登錄到新文件以及常規日誌文件中的所有其他日誌記錄中即可。 – CSharpAtl 2009-08-21 13:46:49