Я написал .NET DLL, которая вызывается из другого приложения с использованием COM-взаимодействия. Я хотел бы использовать log4net, но мне нужно указать расположение файла журнала во время выполнения из другого приложения.log4net - протоколирование DLL, вызванное через COM-взаимодействие
Я всегда использовал log4net самым простым способом для проекта WinForms, но поскольку проект 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-трафике, который я читал, был медленным, и бит resiliance в случае какой-то неудачи, и родительское приложение не могло зарегистрировать его. Я новичок в мире COM ... это, возможно, не обязательно. Если я не смогу получить эту работу, я заставлю свою DLL сообщать абсолютно все обратно вызывающему приложению, а затем зарегистрировать его там. –
Я перечитываю ваш вопрос, и я думаю, что теперь я получаю то, что вы просите. – RichardOD
Есть ли способ изменить назначение файла журнала с помощью этого метода? Я мог бы смутить. –