2009-09-11 4 views
1

Я написал .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"); 
    } 

Спасибо!

ответ

3

Редактировать-Обновить. Перечитайте вопрос. Похоже, вам просто нужно call the overloaded version of this (прохождение подробных сведений о файле конфигурации) - вы просто хотите настроить ведение журнала из COM-библиотеки DLL?

В шутку я google'd log4com и found this. Я не использовал его, но он может стоить !

+0

Какая страшная мысль! :) У моего вызывающего приложения есть своя регистрация, и эта DLL предназначена не только для ведения журнала, но и я думаю о том, чтобы не передавать подробную информацию обратно в родительское приложение для ведения журнала, это экономия в COM-трафике, который я читал, был медленным, и бит resiliance в случае какой-то неудачи, и родительское приложение не могло зарегистрировать его. Я новичок в мире COM ... это, возможно, не обязательно. Если я не смогу получить эту работу, я заставлю свою DLL сообщать абсолютно все обратно вызывающему приложению, а затем зарегистрировать его там. –

+0

Я перечитываю ваш вопрос, и я думаю, что теперь я получаю то, что вы просите. – RichardOD

+0

Есть ли способ изменить назначение файла журнала с помощью этого метода? Я мог бы смутить. –

1

Попробуйте явно установить уровень в DEBUG как на вашем Регистраторе, так и на Appender.

+0

Хмм ... Он все еще ничего не пишет в файл журнала –

2

Я думаю, что ответ был вовсе не нужен новому репозиторию. Я просто делал слишком сложные дела. Этот сокращенный вариант, похоже, работает нормально:

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"); 
    } 
+0

Спасибо за это - только то, что мне нужно ... – Matt

Смежные вопросы