2017-02-13 16 views
3

ログファイル名を動的に設定すると、log4net.Appender.FileAppender+MinimalLockロックモデル で使用されるRollingFileAppenderはファイルに何も記録されません。しかし、このロッキングモデルなしでアペンダーを使用すると、ロギングが機能します。以下の設定ファイルでファイル名をプログラムで設定するときに、MinimalLockロックモデルが動作しない

Appender1作品が、Appender2しない:ここでは

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 

    <log4net> 
    <appender name="Appender2" 
    type="log4net.Appender.RollingFileAppender" > 
     <file type="log4net.Util.PatternString" value="%property{LogName}" /> 
     <encoding value="utf-8" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%logger] %message%n" /> 
     </layout> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    </appender> 
    <appender name="Appender1" 
    type="log4net.Appender.RollingFileAppender" > 
     <file type="log4net.Util.PatternString" value="%property{LogName}" /> 
     <encoding value="utf-8" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message%n" /> 
     </layout> 
    </appender> 
    <logger name="myLogger" additivity="false"> 
     <level value="DEBUG" /> 
     <appender-ref ref="Appender2" /> 
    </logger> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="Appender1" /> 
    </root> 
    </log4net> 
</configuration> 

は、サンプル・コードである私がテストしてい:

static void Main(string[] args) 
{ 
    ILog logger = LogManager.GetLogger("myLogger"); 
    GlobalContext.Properties["LogName"] = "Log1.log"; // <== The log file name is getting set here. 
    log4net.Config.XmlConfigurator.Configure(new FileInfo(@"Logger.config")); 

    logger.Info("Sample log entry"); 
} 

を私が作ったもう一つの観察は、私が削除した場合ということですルートレベルのロガー、ロギングが動作するようです。私はあなたが両方のアペンダに

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

を追加する必要が考える

答えて

4

、それはAppender1に存在しません。これはなぜルート要素の削除が機能するかを説明します。

+0

ロッキングモデルの異なるアペンダーを使用することはできませんか? – pmohandas

+0

はい、しかし、アペンダーが書き込む各ファイルは、同じロックモデルを持つ必要があります。 – Peter

関連する問題