私はこのコードと以下の設定ファイルを持っています:
ILog log = LogManager.GetLogger(typeof(MyClass));
log.Debug("Testing");
TestProj
ディレクトリは作成されません。作成した場合、TestLog.txt
ファイルもログもありません...何もありません。
何か案が?
おかげで、
構成ファイル
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\\TestProj\\TestLog.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
Configure
のXmlConfigurator
functionを呼び出す必要があります
log4net.Config.XmlConfigurator.Configure();
最初のログイン呼び出しの前に呼び出すか、Global.asaxで次のように呼び出します。
protected void Application_Start(Object sender, EventArgs e) {
log4net.Config.XmlConfigurator.Configure();
}
これを行う別の方法は、この行をWebアプリケーションのアセンブリ情報に追加することです。
// Configure log4net using the .config file
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]
シュリークに似ています。
1:AssemblyInfoクラスに次の行を追加します
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]
2:.Net Framework 4 Client Profile
をTarget Framework
として使用しないようにしてください(そうしないとコンパイルできないので、これはあなたの側で問題ないと思います)
3:プログラムの非常に早い段階でログを記録してください。そうしないと、一部のシナリオでは、適切に初期化されません(詳細については log4net FAQ を参照してください)。
Global.asaxでアプリケーションの起動中に何かを記録する
public class Global : System.Web.HttpApplication
{
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(Global));
protected void Application_Start(object sender, EventArgs e)
{
Log.Info("Startup application.");
}
}
4:指定されたパスにファイルとフォルダーを作成する権限があることを確認します(フォルダー自体も存在しない場合)
5:与えられた情報の残りは大丈夫に見える
多くの場合、これは権限がないためです。ローカルIISアプリケーションプールが実行されているWindowsアカウントには、アプリケーションディレクトリへの書き込み権限がない可能性があります。どこかにディレクトリを作成し、全員に書き込み権限を付与し、log4net configにそのディレクトリを指定できます。ログファイルがそこに作成された場合、アプリプールが書き込みできるように、目的のログディレクトリのアクセス許可を変更できます。
もう1つの理由は、log4netが初期化されていないことです。 winformsアプリでは、通常、アプリケーションの起動時にlog4netを構成します。 Webアプリでは、これを動的に行うことができます(ロギングコンポーネントで、名前を使用して特定のIlogロガーを作成できるかどうかを確認します) 。
私も同様の問題を抱えていました。ログが作成されていませんでした。
ロガーの属性名がLogManager.GetLogger( "name")と一致することを確認してください
<logger name="Mylog">
<level value="All"></level>
<appender-ref ref="RollingLogFileAppender" />
</logger>
private static readonly ILog Log = LogManager.GetLogger("Mylog");