log4netを使用しています。GUIにボタンを追加したいのですが、ユーザーがそのボタンをクリックすると、ログファイルがクリアされます。どうやってやるの?
どうもありがとう
私もこの問題を抱えていました。
あなたはあなたの設定でこれを必要とします:
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
log4netからの「箱から出して」はサポートされていません。ただし、RollingFileAppenderを使用して手動のクラス/メソッドを作成し、ログファイルをクリーンアップ/削除することはできます。
参考までに、Log4Net:RollingFileAppenderに最大バックアップファイルをローリング日付で設定します
ファイルがロックされないようにする別のアプローチは、次の方法でログファイルに最小ロックレベルを設定することです。
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
最小限のロックを使用することによるパフォーマンスへの影響を望まない場合は(回答を参照)、最小限のロックを使用するようにアペンダーを一時的に構成し、ファイルを削除してから、デフォルトの動作に戻すことができます。
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();
}
}
これで、ファイルを問題なく自由に削除できるようになりました。
みんなありがとう私はログをクリアすることに成功しました。ログ構成ファイルのアペンダーブロックに、次の行を追加しました。
<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();
}
}
}
皆さん、ありがとうございました
コマンドを使用するだけです
File.WriteAllText("C:/Users.../log.xml", "");
アプリケーションの開始時。