2011-12-28 16 views
24

benim ASP.NET MVC3 projesinde Log4net kullanıyorum, ancak tüm giriş özellikleri gibi IsDebugEnabled == falseNeden tüm log4net düzeyleri yanlış mı?

benim AssemblyInfo olarak

Ben:

Benim günlük sınıfta
[assembly: XmlConfigurator(Watch = true)] 

Ben

var Web.config içinde
public Log4NetLogger() 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
} 

My ilgili yapılandırma şeyler:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
     </sectionGroup> 
    </configSections> 

    <log4net debug="false"> 
     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="100" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <connectionString value="{removed}" /> 
     <commandText value="INSERT INTO Logging ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
     <parameter> 
      <parameterName value="@log_date" /> 
      <dbType value="DateTime" /> 
      <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
      <parameterName value="@thread" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%thread" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@log_level" /> 
      <dbType value="String" /> 
      <size value="50" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%level" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@logger" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@message" /> 
      <dbType value="String" /> 
      <size value="4000" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@exception" /> 
      <dbType value="String" /> 
      <size value="2000" /> 
      <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
     </appender> 
     <!--Possible levels:--> 
     <!--DEBUG--> 
     <!--INFO--> 
     <!--WARN--> 
     <!--ERROR--> 
     <!--FATAL--> 
     <root> 
     <level value="All" /> 
     <appender-ref ref="AdoNetAppender" /> 
     </root> 
    </log4net> 

    </applicationSettings> 

</configuration> 

Zaten sadece

public Log4NetLogger() 
{ 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 


    Logger.IsDebugEnabled = true; 
} 

yapmak isteyen bir noktaya sinirli var Ancak tabii Logger.IsDebugEnabled herhangi ayarlayıcıları yok: Bu lanet şeyi ne işe ben almak için ne gerekiyor/

?

+0

Bu sorunu sıraladıysanız lütfen aşağıdaki yanıtlardan birini onaylayabilir misiniz? –

cevap

2

<level value="All" />'u daha önce hiç görmedim, genellikle value'u düzeylerden birine ayarladım (çünkü bunların üstlerindeki düzeylerden ya da bunların altındakiler, yapılandırmada listeleniyor gibi)). Böyle bir şey:

<level value="DEBUG" /> 

Ayrıca sorun başka bir şey olabilir eğer sadece görmek için, açık bir kaydedicisi ile test deneyebilirsiniz. Böyle appender düğüm (ler) bitişik basit bir şey:

LogManager.GetLogger("Log4NetTEST"); 
+2

'' yıllardan beri başarıyla kullanıyorum :-) –

+2

fwiw: Log4Net için olası değerler şunlardır: ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Unutmayın, bunlar da büyük küçük harfe duyarlıdır. –

6

Log4Net onun yapılandırma bölümüne değil bekler: Sonra

<logger name="Log4NetTEST" > 
    <level value="DEBUG" /> 
    <appender-ref ref="AdoNetAppender" /> 
</logger> 

böyle logger ediyorum kodunuza test ederken gruplandırılmış Çünkü yapılandırmanızda, log4net bölümünüzü bir ApplicationSettingsGroup (applicationSettings) log4net içine koyduğunuzdan, yapılandırmasını bulamazsınız. Gruba dışında log4net bölümünü taşıyabilirsiniz yoksa gruba belirtebilirsiniz XmlConfigurator.Configure çağrılırken:

XmlConfigurator.Configure(
    ConfigurationManager.GetSection(
     "applicationSettings/log4net") as XmlElement); 
+0

Harika düzeltme! Bu da beni NUTS sürdü! – nterry

3

Giriş seviyesi harfe duyarlıdır, bu nedenle yerine:

<level value="All" />

olmalıdır

<level value="ALL" />

Ben de çok daha kolay ayrı log4net conf oluşturmak için bulmak igurasyon dosyası. Bir dosya adı verilen log4net.config oluşturun ve Output Directory için kopyala özelliğini ayarlayın hep Kopya için - konfigürasyon kullanımını ayarlarken, Sonra

(bu dosya içine App.config adresinin yapılandırmasını kopyalama):

XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));

23

Aynı problemi yaşadım. Global.asax.cs dosyasındaki Application_Start yönteminde aşağıdaki kod satırını kullanarak bunu alıyorum (a.Net web uygulama)

log4net.Config.XmlConfigurator.Configure(); 
16
AssemblyInfo.cs aşağıdaki hattınızı değiştirin

:

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

ve bu dosyada Log4net yapılandırmasını koydu.

sadece okunur olarak IsDebugEnabled için var ayarlayıcı değildir
0

..

Kullanım log4net.Config.XmlConfigurator.Configure(); Eğer

ve App.Config giriş kullanmadan önce herhangi bir yöntemde ayarı olmalıdır:

[assembly: log4net.Config.XmlConfigurator

<root> 
     <level value="ALL" /> 
     <appender-ref ref="AppenderName" /> 
    </root> 
0

AssemblyInfo.cs aşağıdaki hattınızı değiştirin (izle = true)]

log4net dll olun eklenmiş ve aynı zamanda

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" /> 
    </configSections> 
    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="C:\LOGS\IDMUserRoleManagement\IDMUserRoleManagement.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="1000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{yyyy-MM-ddTHH:mm:ss} %-5p [%t] - %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 
olarak web.config dosyasında log4net yapılandırmasını konur 210
2

Yapılandırma dosyası özellik ayarını değiştirdiğiniz anlaşılıyor Kopyalama dizinine kopyala = "Her zaman kopyala" Lütfen daha fazla ayrıntı için bu ayar resmini kontrol edin. Config file setting Properties

0

applicationSettings açılış etiketini kaçırıyorsunuz. [assembly: log4net.Config.XmlConfigurator (C .... aynı sınıf kitaplığında olması gerektiğini sınıf günlük dosyası (Log4NetLogger) bir yalnız sınıf kitaplığında ise

0

ardından kod nedeni olabilir .

örneğin

: lib 1: my.web (a mvc projesi) lib 2: my.common (bir sınıf kütüphanesi projesi)

sonra, my.common içinde logmanager kodu sarmak eğer "[ assembly: log4net.Config.XmlConfigurator (C ... my.common'um olmalıdır, eğer my.web içine koyarsanız, işe yaramaz!