2015-01-22 4 views
0

Я использую log4net для регистрации ошибки в моем приложении. Но файл журнала не создается. Насколько я могу судить, код в порядке.Log4Net не создает файл журнала

Web.config код

<configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
</configSections> 
<log4net> 
<appender name="Console" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <!-- Pattern to output the caller's file name and line number --> 
     <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" /> 
    </layout> 
</appender> 
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Demo\example.log" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="100KB" /> 
    <maxSizeRollBackups value="2" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level %thread %logger - %message%newline" /> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="Console" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 

В файле AssemblyInfo.cs, я добавил следующий код

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)] 

В классе, где я хочу, чтобы отслеживать ошибки, я добавил следующий код

private static readonly ILog logger = LogManager.GetLogger(typeof(ProviderRepository)); 

Я использую регистратор как таковой в блоке catch.

logger.Error(Ex.Message); 

Но я не вижу файл журнала. Я делаю что-то неправильно здесь?

+0

Простой приватный статический readonly ILog _log = LogManager.GetLogger (MethodBase.GetCurrentMethod(). DeclaringType); – Ryan

+0

Также попробуйте отделить конфигурацию к отдельному файлу log4net.config и настроить объявление в AssemblyInfo - я думаю, это сработало для меня. – Ryan

+0

Я внес изменения, упомянутые вами. К сожалению, я все еще сталкиваюсь с той же проблемой. –

ответ

0

Вы должны проверить, если ваш AppPool пользователь имеет доступ к C: \ Demo \, следующий вы можете включить log4net внутренней отладки, который расскажет вам, если есть какие-либо проблемы в вашей конфигурации или доступа к файлам и т.д.:

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

... 

    <system.diagnostics> 
     <trace autoflush="true"> 
      <listeners> 
       <add 
        name="textWriterTraceListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="C:\tmp\log4net.txt" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
</configuration> 

Log4net FAQ

0

большое спасибо за все ваши предложения guys.I был в состоянии понять это один out.I был написать ниже строки кода в Global.asax файл

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

Я писал это ранее в файле Assembly.info.cs.

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