StreamWriter在新的一天不会更新其路径

问题描述

| 我有一个程序正在写入名为\“ 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;
}
我检查了这个类似的问题,但是那个问题描述了一个不同的情况(具有不适用的修复程序)。 更新-以防万一Google员工登陆此页面,后来我发现了一个与此完全不同的原因。我的日志正在记录来自电子邮件监听服务的信息。该服务本身存在一个问题,即半小时后超时。因此,我的问题不是w / CreateText / AppendText ...我的问题是没有什么可记录的。很烦人,但我希望其他人不会被这个问题/答案所误导。     

解决方法

        您应该检查以确保该文件首先存在。 摘自
File.AppendText
文档   类型:System.IO.StreamWriter A   附加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
无论文件是否存在,都应始终工作。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...