2014-10-31 4 views
4

Я работаю с консольным приложением с C#, visual studio 2008, .net framework 3.5, Windows 7. Я создал библиотеку log4net и планирую использовать ее в нескольких проектах на моем решении.Использование log4net в качестве библиотеки классов?

Это как мой log4net библиотека классы выглядят следующим образом:

public class LibraryLogClass1 
{ 
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

    public static void Method3(string message) 
    { 
     log.Debug(message); 
    } 
} 

В моем главном проекте консоли у меня есть это:

class Program 
    { 

     static void Main(string[] args) 
     { 
      LibraryLog3.LibraryLogClass1.Method3("test3"); 
     } 
    } 

Я добавил эту строку в моем AssemblyInfo.cs в моем консольный проект:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

Это мой App.config в моей консоли проекта:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 
    <log4net> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > 
     <file value="C:\test3.txt"/> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d [%t] %-5p %c %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

Когда я запустил программу, файл не был создан.

Как я могу это решить?

благодаря

+1

Что вы ожидаете имя файла, чтобы быть где вы ожидаете, что это будет расположена вы смотрели в весь каталог проекта (включая подкаталоги)? для файлов журналов, чтобы узнать, было ли это так, что вы не ожидали? Возможно ли, что вызов 'log.Debug' бросил ex что ваша программа раздалась, не давая вам увидеть ее? –

+0

@JimMischel привет Джим. Как вы можете видеть, я добавил эту строку в App.config: ** **. Поэтому я просмотрел этот путь, но файла там нет. Я смотрел в каталоге проекта и в подкаталогах, но там ничего не было ............ если действительно log.Debug бросил исключение, как я могу его искать? – pyram

ответ

3

Если вы посмотрите на log4net documentation for assembly attributes он говорит, что это:

«Поэтому, если вы используете настройки атрибутов вы должны вызвать log4net , чтобы позволить ему прочитать атрибуты Простой вызов LogManager.GetLogger. приведет к тому, что атрибуты на вызывающей сборке должны быть считаны и обработаны. Поэтому обязательно необходимо сделать регистрационный вызов как можно раньше во время запуска приложения и , прежде чем какие-либо внешние сборки будут загружается и вызывается. "

В вашем случае, ваш вызов method3 загружает сборку библиотеки, поэтому статическое поле пытается загрузить атрибуты из класса журнала библиотеки, где атрибуты не определены.

Я, как правило, что-то вроде этого в начале моей основной программы:

LogManager.GetLogger("Initialise log4net from the current assembly attributes"); 
+0

Это сработало. большое спасибо! – pyram

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