8

log4netを使用しています。GUIにボタンを追加したいのですが、ユーザーがそのボタンをクリックすると、ログファイルがクリアされます。どうやってやるの?

どうもありがとう

4

5 に答える 5

10

私もこの問題を抱えていました。

あなたはあなたの設定でこれを必要とします:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
于 2012-07-29T21:09:05.157 に答える
7

log4netからの「箱から出して」はサポートされていません。ただし、RollingFileAppenderを使用して手動のクラス/メソッドを作成し、ログファイルをクリーンアップ/削除することはできます。

参考までに、Log4Net:RollingFileAppenderに最大バックアップファイルをローリング日付で設定します

ファイルがロックされないようにする別のアプローチは、次の方法でログファイルに最小ロックレベルを設定することです。

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
于 2012-07-29T13:02:50.863 に答える
5

最小限のロックを使用することによるパフォーマンスへの影響を望まない場合は(回答を参照)、最小限のロックを使用するようにアペンダーを一時的に構成し、ファイルを削除してから、デフォルトの動作に戻すことができます。

RollingFileAppendersのみを使用している場合の例:

// Release the lock on the log4net log files
var appenders = log4net.LogManager.GetRepository().GetAppenders();
foreach (var appender in appenders)
{
    var rollingFileAppender = appender as log4net.Appender.RollingFileAppender;
    if (rollingFileAppender != null)
    {
        rollingFileAppender.ImmediateFlush = true;
        rollingFileAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock();
        rollingFileAppender.ActivateOptions();
    }
}

これで、ファイルを問題なく自由に削除できるようになりました。

于 2013-07-04T17:59:53.120 に答える
2

みんなありがとう私はログをクリアすることに成功しました。ログ構成ファイルのアペンダーブロックに、次の行を追加しました。

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

ログファイルをクリアするコードは次のとおりです。

        RollingFileAppender fileAppender = LogManager.GetRepository()
                        .GetAppenders().FirstOrDefault(appender => appender is RollingFileAppender) as RollingFileAppender;


        if (fileAppender != null && File.Exists(((RollingFileAppender)fileAppender).File))
        {
            string path = ((RollingFileAppender)fileAppender).File;
            log4net.Appender.FileAppender curAppender = fileAppender as log4net.Appender.FileAppender;
            curAppender.File = path;

            FileStream fs = null;
            try
            {
                fs = new FileStream(path, FileMode.Create);
            }
            catch(Exception ex)
            {
                (log4net.LogManager.GetLogger(this.GetType())).Error("Could not clear the file log", ex);
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }

            }
        }

皆さん、ありがとうございました

于 2012-08-12T13:32:48.267 に答える
-1

コマンドを使用するだけです

 File.WriteAllText("C:/Users.../log.xml", "");

アプリケーションの開始時。

于 2016-09-16T10:34:00.390 に答える