问题描述
|
我有一个程序正在写入名为\“ 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
无论文件是否存在,都应始终工作。