2013-07-23 2 views
7

Я хочу добавить новый журнал для file.this мой Appender:Log4Net не запишет в файл

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="mylogfile.txt"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="5"/> 
    <maximumFileSize value="10MB"/> 
    <staticLogFileName value="true"/> 
    <filter type="log4net.Filter.StringMatchFilter"> 
    <stringToMatch value="test"/> 
    </filter> 
    <filter type="log4net.Filter.StringMatchFilter"> 
    <stringToMatch value="error"/> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/> 
    </layout> 
</appender> 
<root> 
    <level value="All"/> 
    <appender-ref ref="RollingFileAppender"/> 
</root> 

и на моем классе я добавить

[assembly: XmlConfigurator(Watch = true)] 

и добавляю всех доступа к file: log4net не записывается в файл. Зачем?

ответ

23

Log4Net терпит неудачу тихо, когда есть проблема. Конструктивное тщеславие заключается в том, что ни одна регистрация не является предпочтительной для удаления приложения. Для того, чтобы выяснить, что случилось, включите внутренней отладки Log4Net, добавляя этот ключ к вашему [приложение/веб] .config файл:

<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

Сообщения отладки будут записаны в консоль или в системе System.Diagnostics.Trace. Более подробная информация от Phill Haack по телефону http://haacked.com/archive/2006/09/26/Log4Net_Troubleshooting.aspx/

Существует несколько причин, по которым Log4net может выйти из строя. Проблемы с разрешениями в каталоге файлов журналов для стартеров (особенно это относится к серверным процессам, где, скорее всего, работает под ограниченным набором разрешений для обеспечения безопасности).

+0

Отличный совет! Через 2 минуты решил вопрос, который я застрял в течение часа. – StinkyCat

+0

Это, похоже, не работало для меня, пока я не понял, что вывод для отладки идет в окно Immediate, а не в Output one – JayJay

0

Вам необходимо инициализировать регистрацию в качестве первого шага в вашем приложении, и из той же сборки, что у вас есть [assembly] тег:

Из docs:

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

Добавить что-то подобное в вашем Запускают код:

LogManager.GetLogger("Initialises logging from assembly attributes"); 
0

Вы должны добавить этот раздел конфигурации:

<configSections> 
<section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
</configSections> 

для обозначения конфигурации log4net.

2

Вам просто нужно позвонить Настройка:

log4net.Config.XmlConfigurator.Configure(); 

Вы можете посмотреть более подробную информацию здесь: Log4net does not write the log file

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