2014-01-14 3 views
5

私log4netの構成はこれで、働いていませんログインlog4netの - のasp.net MVC

<?xml version="1.0" encoding="utf-8" ?> 
    <log4netConfiguration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <appSettings> 
    <add key="log4net.Config" value="log4net.config" /> 
    </appSettings> 
    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file type="log4net.Util.PatternString" value="C:\my_logs/my_web_logs/my_log_%date{ddMMyyyy}.log" /> 
     <appendToFile value="true" />  
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="30MB" /> 
     <datePattern value="yyyyMMdd" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%4t %d{ABSOLUTE} %-5p %m%n"/> 
     <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />--> 
     </layout> 
    </appender> 
    <root> 
     <level value="INFO" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 
</log4netConfiguration> 

私は私のアセンブリ情報で

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

     public static log4net.ILog Log 
     {    
      get { return log; } 
     } 
    } 

、としてロガーヘルパークラスを持っているが、私は、このエントリを持っています

// Configure log4net using the .config file 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

log4net.configは、Webプロジェクトに追加された設定ファイルです。私はロガークラスを使用してログインするコードで

私は上記の設定を設定するとき、

Logger.Log.Info("User visits Sign In Page."); 

ロギングが取り組んできました。しかし突然ロギングが機能しなくなりました。 しかし、上記の設定で新しいasp.net mvc Webサイトを作成したとき、ロギングが機能します。 私はIIS ExpressとローカルIISを試しました。いずれの場合も、私が作成したテストアプリケーション用のロギングが動作します。

なぜロギングされていないのかわかりません。どうすればこのことを診断できますか?考えられる問題は何ですか?

答えて

11

自分で解決しましたが、理由は「何らかの理由で」log4net構成がアセンブリ情報から読み込まれていませんでした。それでも私はなぜそれが起こるのか分からない。

私は非常に多くの修正をさまざまな投稿によって提案しました。最後に問題を修正しました。 this postに記載されている解決策は、私がこの問題を解決するのを助けました。

私は、それはロギングを開始した構成、

<!--These settings load the log4net configuration.--> 
     <add key="log4net.Config" value="log4net.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 

次追加されました!

は、その後、私は

// Configure log4net using the .config file 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 
+0

ありがとうございます!奇妙なことにAssemblyInfoからそれを拾いませんが、彼らのアプリの設定はトリックでした! –

2

理由はlog4netのは、最初のLogManager.GetLogger()を使用してアセンブリから設定をロードしようとするということである、アセンブリ情報から次の行を削除しました。クラスライブラリの1つであれば、他のすべてのアセンブリの属性を無視します。

それを修正する最も簡単な方法は、(Program.csまたはGlobal.asaxのような)あなたのスタートファイルにLogManagerを呼び出すことです:

var logger = LogManager.GetLogger(typeof(Program)); 
logger.Info("Application started."); 

//rest of app init. 

それはあなたのアセンブリ属性と期待される動作を取得します行います。

0

log4net.Config.XmlConfigurator.Configure();を呼び出さない限り、log4netはwebconfig設定をロードしません。始めるとき。

protected void Application_Start() 
    { 
     // your other codes 

     log4net.Config.XmlConfigurator.Configure(); // must have this line 
     Logger = log4net.LogManager.GetLogger(typeof(MvcApplication)); 

    } 
関連する問題