2012-04-30 3 views
0

После множества проблем, наконец, мне удалось настроить log4net для моего окна.log несколько сборок с использованием log4net

Я довольно новичок в этом, и сегодня я начал настраивать его. У меня эти сомнения.

1) Мне нужно использовать это в нескольких сборках. Скажем, у меня есть сборка «А», которая добавляется в качестве ссылки в сборке «В», которая является моей главной сборкой, где у меня есть ссылка на log4net. Мне нужно записывать обе сборки «А» и «В».

2) Мое приложение многопоточное и использует много потоков. Так log4net является потокобезопасным?

3) Я использую эту конфигурацию ниже в своем app.config. Я не очень понимаю, в чем его польза. Но я не хочу использовать ненужные параметры.

<log4net> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="C:\logs\log.txt"/> 
     <param name="AppendToFile" value="true"/> 
     <rollingStyle value="Size"/> 
     <maxSizeRollBackups value="10"/> 
     <maximumFileSize value="100KB"/> 
     <staticLogFileName value="true"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/> 
     </layout> 
    </appender> 
</log4net> 
+0

Что ваш вопрос excactly? – LueTm

+0

вопрос точно указан в пунктах 1 и 2 – sunder

+0

Пожалуйста, используйте вопросительные знаки (?) В следующий раз, так что это яснее. – LueTm

ответ

1

Используйте <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> под секцией appender. Я twill увеличиваю производительность регистрации.

log4net является потокобезопасным.

<maximumFileSize value="10MB" /> //For 100 Kb configuration there will be lot of files. 

<datePattern value="_yyyyMMdd" /> // Это намек на регистратор, чтобы создать новый файл на сегодняшний день.

Создайте статический класс для Logger и вызовите статическую функцию из каждой сборки, где вы хотите использовать.

Пример класса для регистрации:

public static class Logger 
    { 
     static Logger() 
     { 
      XmlConfigurator.Configure(); 
     } 

     public static void Log() 
     { 
      string methodName = new System.Diagnostics.StackFrame(1, true).GetMethod().Name; 
      string moduleName = new System.Diagnostics.StackFrame(1, true).GetMethod().ReflectedType.FullName; 

      var appLog = LogManager.GetLogger(loggername); 
      appLog.Error(...); 

     } 
    } 
+0

Спасибо за ответ, я делал то же самое. Скажем, я добавил ссылку на log4net в сборке A, которая добавлена ​​как ссылка в сборке B. Теперь, если я создам статический класс в сборке A, который будет использовать log4net, а Assembly B может его использовать, тогда в этом случае ссылка dll log4net должна быть добавлена ​​в сборку B также. Что ты говоришь. – sunder

+0

У вас нет необходимости добавлять log4net dll в dll B, потому что tou будет регистрироваться с использованием dll A. –

+0

Спасибо, Ромиль, я решил проблему. Метод методов log4net выходит только в текущей сборке, где он добавлен, например, A. Поэтому я создал класс, предложенный в ссылке ниже, в качестве помощи для тех, кто прочитает это сообщение позже. http://actcode.com/2009/11/net-application-logging-with-log4net-in-console-file-database/ – sunder

0
  1. , что это не проблема; просто используйте ILog, как обычно, в сборке B.
    просто убедитесь, что вы звоните Configure() один раз в срок вашей заявки.
  2. Да.
  3. Я рекомендую ознакомиться с log4net. простой google search или посмотрите на docs должен сделать трюк.
+0

Что я делаю сейчас. Я создал дополнительную ссылку в сборке B и использовал этот объект ILog для ведения журнала. В сборке A я не добавил ссылку log4net, и теперь есть способ, который без добавления ссылки log4net в обеих сборках я могу зайти в журнал. Сборка A добавляется в качестве ссылки в сборке B – sunder

+0

, поэтому вы спрашиваете, можете ли вы использовать 'ILog', не ссылаясь на сборку, в которой она определена? ответ, очевидно, «нет» ... –

+0

В сборке B я ссылаюсь на log4net dll. Для регистрации сборки A мне нужно добавить в нее ссылку log4net. – sunder

0
<root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 

Он будет регистрировать только в режиме отладки, так что следующая запись в конфигурации:

<root> 
     <level value="ALL"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 
Смежные вопросы