如何清除log4net日志文件?

时间:2012-07-29 12:57:13

标签: c# log4net

我正在使用log4net。 我想在我的GUI中添加一个按钮,当用户点击该按钮时, 日志文件将被清除。 我怎么能这样做?

非常感谢

5 个答案:

答案 0 :(得分:8)

我也有这个问题。

您需要在配置中使用此功能:

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

答案 1 :(得分:5)

log4net不支持“开箱即用”。但是,您可以使用RollingFileAppender并创建手动类/方法来清理/删除日志文件。

供参考,Log4Net: set Max backup files on RollingFileAppender with rolling Date

避免文件被锁定的另一种方法是通过以下方式在日志文件上设置最小锁定级别:

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

答案 2 :(得分:3)

如果您不想遭受最小锁定的性能影响(请参阅answer),那么您可以临时配置appender以使用最小锁定,删除文件,然后使用默认值行为回来。

当您仅使用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();
    }
}

现在可以毫无问题地删除文件。

答案 3 :(得分:2)

谢谢你们 我成功清除了日志。 在日志配置文件的appender块中,我添加了该行:

<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();
                }

            }
        }

谢谢大家

答案 4 :(得分:0)

只需使用命令

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

在申请开始时。