我已經編寫了一個.NET DLL,它是使用COM interop從另一個應用程序中調用的。我想使用log4net,但我需要在運行時從其他應用程序指定日誌文件的位置。log4net - 通過COM interop調用一個dll的日誌記錄
我一直以最簡單的方式爲WinForms項目使用log4net,但由於DLL項目沒有app.config,我的調用應用程序也沒有(甚至不是.NET) ,我已經試過了解一下log4net是如何工作的,並試圖在不使用.config文件的情況下設置它。
我它得到它編譯和排序都符合我的log4net的微小的認識階段,但它並沒有寫入日誌文件。
這裏是我到目前爲止,任何人都可以指出我的明顯的錯誤/誤解,或者告訴我,從我的dll記錄的更好的辦法?
private log4net.Core.ILogger _ilogger;
private ILog _logger;
public void Initialize(String LogFileName)
{
log4net.Repository.ILoggerRepository Repo = null;
try {
Repo = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly().FullName);
} catch (log4net.Core.LogException) {
//ignore, domain not yet created
}
if (Repo == null) {
Repo = log4net.LogManager.CreateRepository(Assembly.GetExecutingAssembly().FullName);
log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender();
appender.Layout = new log4net.Layout.PatternLayout("%d - %m%n");
appender.File = LogFileName;
appender.MaxSizeRollBackups = 10;
appender.MaximumFileSize = "100MB";
appender.AppendToFile = true;
appender.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug
appender.ActivateOptions();
Repo.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug
log4net.Config.BasicConfigurator.Configure(Repo, appender);
}
// This doesn't seem to create the interface I need for logging
_ilogger = Repo.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
// This doesn't seem to write to the log file for some reason.
_logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
_logger.Debug("Application started");
}
謝謝!
多麼可怕的想法! :)我的調用應用程序確實有它自己的日誌記錄,並且這個DLL不僅僅用於日誌記錄,我不想將詳細信息傳遞迴父應用程序以進行日誌記錄,這是COM流量的保存,我讀過的流量很慢,而且在出現某種故障並且父應用程序無法記錄的情況下可以進行一些活動。我對COM的世界有點新鮮......我想這可能不是祕密。如果我無法得到這個工作,那麼我會讓我的DLL報告絕對一切的調用應用程序,然後記錄在那裏。 – 2009-09-11 11:39:18
我重讀了你的問題,我想我現在得到你要問的東西。 – RichardOD 2009-09-11 11:42:07
有沒有辦法使用這種方法更改日誌文件的目標?我可能會感到困惑。 – 2009-09-11 13:03:36