2015-02-11 7 views
0

У меня есть очень простой конфигурационный файл Log4Net для использования с моей C# DLL. Ведение журнала работает отлично, если я создаю исполняемый файл вместо DLL для тестирования в автономном режиме, и он отлично работал с exe в прошлом. Но когда я переключаюсь в DLL-режим (Class Library) для работы с другим приложением, DLL просто не будет регистрироваться. Вместо этого, когда он загружает конфигурационный файл (XmlConfigurator.Configure (файл)) Я вижу error- "Вы попытались установить нулевой уровень искоренять"Log4Net in C# DLL не может загрузить конфигурацию

Config File

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
</configSections> 
<log4net> 
<root> 
    <level value="Full" /> 
    <appender-ref ref="LogFileAppender" /> 
</root> 
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > 
    <file value="log/eft.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="3" /> 
    <maximumFileSize value="2MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="[%d] %-5p (%logger{1}:%line) - %m%n" /> 
    </layout> 
</appender> 
</log4net> 
</configuration> 

У меня есть попытался настроить конфигурацию журнала через код, даже если это не сработало. Я не ошибся с этим, но он все еще не регистрировался. У меня есть все права на создание/запись в файлы, так как я зарегистрирован как admin.

Использование кода вместо конфигурации file-

 Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 
     hierarchy.Root.RemoveAllAppenders(); 
     hierarchy.Root.Level = log4net.Core.Level.All; 
     hierarchy.Configured = true; 

     FileAppender fileAppender = new FileAppender(); 
     fileAppender.AppendToFile = true; 
     fileAppender.LockingModel = new FileAppender.MinimalLock(); 
     fileAppender.File = "log.txt"; 
     PatternLayout pl = new PatternLayout(); 
     pl.ConversionPattern = "%d [%2%t] %-5p [%-10c] %m%n%n"; 
     pl.ActivateOptions(); 
     fileAppender.Layout = pl; 
     fileAppender.ActivateOptions(); 
     log4net.Config.BasicConfigurator.Configure(fileAppender); 

Что может быть проблема?

+1

Какой процесс принимает ваши DLL? Конфигурация log4net должна находиться в файле конфигурации для этого процесса. – Polyfun

+0

Существует стороннее приложение, которое обращается к DLL, написанному на C++, которое по очереди вызывает мою DLL, написанную на C#. Я написал только на C# и не могу касаться двух других. – highflyer

+1

_you попытался установить нулевой уровень на root_ - '' - нет уровня, называемого 'Full'. Вместо этого используйте 'All'. – stuartd

ответ

0

Предполагая, что стороннее приложение называется ThirdPartyApp.exe, и на нем размещена ваша dll, вам необходимо создать файл ThirdPartyApp.exe.config, содержащий указанную вами конфигурацию log4net.

+0

Не работает. По-прежнему такая же ошибка. После выполнения Configure я попробовал это: 'bool val = log4net.LogManager.GetRepository(). Configured;' и он возвращает true. Не знаете, почему уровень корня не задан. Даже установка уровня root вручную не позволяет создать файл журнала - '((log4net.Repository.Hierarchy.Logger) logger.Logger) .Level = log4net.Core.Level.All;' – highflyer