1

我有一个程序正在写入一个名为“appname_yyyyMMdd.log”的日志文件,其中 appname 是我的应用程序的名称,yyyyMMdd 是当前日期;示例日志文件名可能是 "loglistener_20110615.log" 。无论如何,我的应用程序可以很好地创建日志文件,并按计划对其进行更新。但是,一旦日期更改,应用程序不会记录任何内容,也不会创建新文件。换句话说,由于今天是 6/15,我需要它在今晚午夜之后创建一个名为“loglistener_20110616.log”的文件,并且我需要它继续记录到该新文件。

以下是代码摘录:

public static void LogInfo(string format, params object[] args)
{
    lock (_logLock)
    {
        using (StreamWriter sw = File.AppendText(GetLogPath()))
        {
            sw.WriteLine(GetTimeStamp() + String.Format(format, args));
        }
    }
}

private static string GetLogPath()
{
    string appName = "loglistener";
    string today = DateTime.Today.ToString("yyyyMMdd");
    string fileName = appName + "_" + today + ".log";
    string fullLogPath = AppDomain.CurrentDomain.BaseDirectory + fileName;

    return fullLogPath;
}

我检查了这个类似的问题,但该问题描述了不同的场景(带有不适用的修复)。

更新 - 万一谷歌人登陆这个页面,我后来发现了一个完全不同的原因。我的日志正在记录来自电子邮件收听服务的信息。服务本身存在半小时后超时的问题。所以,我的问题不在于 CreateText / AppendText ......我的问题是没有什么可记录的。很烦人,但我希望其他人不会被这个问题/答案误导。

4

1 回答 1

1

您应该首先检查以确保该文件存在。

File.AppendText文档

类型:System.IO.StreamWriter 将 UTF-8 编码文本附加到现有文件的 StreamWriter。

public static void LogInfo(string format, params object[] args)
{
    lock (_logLock)
    {
        using (StreamWriter sw = File.Exists(GetLogPath) ? File.AppendText(GetLogPath()) : File.CreateText(GetLogPath())
        {
            sw.WriteLine(GetTimeStamp() + String.Format(format, args));
        }
    }

}

试试那个

查看评论并重新阅读文档后。

File.AppendText

无论文件是否存在,都应该始终有效。

于 2011-06-15T18:26:47.287 回答