1

ログに動的な名前を設定しようとしていますが、できません:

私のweb.configファイルのコードは次のとおりです。

<appender name="RollingFile" type="log4net.Appender.RollingPatternFileAppender">
  <file type="log4net.Util.PatternString" value="..l\log\%property{LogName}" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="-1" />
  <maximumFileSize value="5000KB" />
  <staticLogFileName value="true" />
  <countDirection value="1"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%m%n" />
  </layout>
  <filter type="log4net.Filter.PropertyFilter">
    <Key value="Version" />
    <StringToMatch value="1" />

  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />

  <root>
    <level value="DEBUG"/>
    <appender-ref ref="RollingFile"/>
  </root>

</appender>
<logger name="File">
  <level value="All" />
  <appender-ref ref="RollingFile" />
</logger>

は次のglobal.asaxとおりです。

log4net.Config.XmlConfigurator.Configure();

分離コード:

log = LogManager.GetLogger(
            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log4net.ThreadContext.Properties["LogName"] = 
            sito + "_Truck_Log_" + DateTime.Today.ToString("dd-MM-yyyy") + ".txt";

これはログファイルを作成しませんか? これはなぜでしょうか?

更新 1:

スレッド コンテキスト プロパティを設定した後に移動log4net.Config.XmlConfigurator.Configure();しましたが、とにかく動作しません。

更新 2:

@sgmoore: パーミッションに問題はなく、"sito" 変数に無効な文字が含まれていないことは確かです。私はこのようなことをしています:

私のコードビハインドで:

log4net.GlobalContext.Properties["LogName"] = 
           sito + "_Truck_Log_" + DateTime.Today.ToString("dd-MM-yyyy")+".txt";
log = LogManager.GetLogger(
           System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

global.asax

void Application_Start(object sender, EventArgs e) 
{
     log4net.Config.XmlConfigurator.ConfigureAndWatch(
          new System.IO.FileInfo(
            AppDomain.CurrentDomain.SetupInformation.ApplicationBase 
                                                       + "log4net.config")); 
}

しかし、これはまだうまくいきません。

4

2 に答える 2

1

log4net を構成する前に、スレッド コンテキスト プロパティを設定する必要があります。

于 2010-10-25T12:45:21.947 に答える
0

ファイルを作成しないとのことですが、これはパーミッションの問題ではありませんか? (つまり、動的な名前を使用しない場合、正しい場所にファイルが作成されますか?) また、sito 変数に無効な文字が含まれていませんか?

設定する前に LogName プロパティを評価しようとしている可能性があるため、できるだけ早くプロパティを設定してみます。(つまり、GetLogger、Configure、または実際のログの前に設定します)。

(私は似たようなことをしますが、Winforms アプリケーションでは、log4net.ThreadContext.Properties ではなく log4net.GlobalContext.Properties を使用します。どちらも明らかに作業を容易にします)。

于 2010-10-26T18:06:04.647 に答える