log4net - 记录通过COM互操作调用的DLL
-
05-07-2019 - |
题
我编写了一个.NET DLL,它是使用COM interop从另一个应用程序调用的。我想使用log4net,但我需要在运行时从其他应用程序指定日志文件的位置。
我总是以最简单的方式为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");
}
谢谢!
其他提示
我认为答案是我根本不需要新的存储库。我只是把事情弄得太复杂了。这个抽取版本似乎工作正常:
public void Initialize(String LogFileName)
{
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;
appender.ActivateOptions();
log4net.Config.BasicConfigurator.Configure(appender);
_logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
_logger.Debug("Application started");
}
尝试在Logger和Appender上明确将级别设置为DEBUG。
不隶属于 StackOverflow