使用FileStream锁定文件进行日志记录,文件打开时是否还要修剪?

时间:2015-03-20 12:17:56

标签: c# log4net filestream outlook-addin outlook-2010

我正在使用Outlook插件尝试将日志记录添加到代码中。我计划接下来看看Log4net,因为每个人都提到这是一个更好的选择,但是现在我试图使用内置的System.Diagnostics类进行日志记录。此外,我不确定是否可以使用Log4Net写入%appdata%或者是否需要使用配置文件。

所以,我的问题是,我已经收到了一份我写的文件 -

public static string logFilePath = Environment.ExpandEnvironmentVariables("%userprofile%") + @"\AppData\Roaming\OutLookPlugin\Application.log";
public static FileStream hlogFile = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);

我希望能够将文件缩小以使其不会变大

public static void PerformFileTrim(string filename)
{
   var FileSize = Convert.ToDecimal((new System.IO.FileInfo(filename)).Length);

   if (FileSize > 250000)
   {
    var file = File.ReadAllLines(filename).ToList();
    var AmountToCull = (int)(file.Count * 0.33);
    var trimmed = file.Skip(AmountToCull).ToList();
    File.WriteAllLines(filename, trimmed);
   }
}

我知道如果我关闭文件(即 - hlogFile.Close();)我可以修剪我的文件,但我不想关闭我的文件,因为我的日志记录将停止。

鉴于我正在使用Outlook插件,我唯一能想到的就是尝试使用启动

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    //trim file here
}

在记录开始修剪文件之前,但我不想影响磁盘IO的加载时间性能。

有没有办法在不关闭的情况下写入文件?

1 个答案:

答案 0 :(得分:-1)

我不会在运行时执行文件大小测试但仅在Outlook结束时 - 然后记录结束。