我正在将程序事件写入txt文件作为日志,但时间戳不会在每个点更新。我已经声明了以下字符串:
string timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff");
string taskComplete = (timeStamp) + " Task Complete";
我通过该计划在不同的地方打电话:
using (StreamWriter w_Log = new StreamWriter(file_Log, true))
{
w_Log.WriteLine(taskComplete);
w_Log.Close();
}
虽然该程序也使用timeStamp
声明了更多字符串。以下是日志文件的示例:
2014/02/22 10:07:26.71 Process started
2014/02/22 10:07:26.71 Task Complete
2014/02/22 10:07:26.71 Task Complete
2014/02/22 10:07:26.71 Process complete, time elapsed: 0.496 seconds
正如您所看到的,即使完成了49毫秒,时间似乎也是静态的。当程序再次运行时,时间已经变为当前时间,但同样的问题,写入的时间始终相同。
我是否需要使用其他方法,或者我是否错误地使用了这种方法?
答案 0 :(得分:7)
因此,在步骤1中,您将字符串定义为具有特定格式的DateTime.Now
在每一点上,你只是显示相同的字符串。字符串是固定的,每次运行时都不会调用DateTime.Now
。
因此,如果您希望更改 - 您每次都需要致电DateTime.Now
。
w_Log.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff") + " Task Complete ");
答案 1 :(得分:2)
您将taskComplete
定义为字符串一次并反复使用它。无论您如何定义它,它都不会更新。您现在可以设置一次,让方法运行10年,它仍将包含相同的值。
每次要更新时,实际上需要更新时间戳值。如果您尝试限制此方法中的代码,则可以将taskComplete
更改为返回带有更新时间戳的字符串的方法
void SomeMethod()
{
//doing other stuff
using (StreamWriter w_Log = new StreamWriter(file_Log, true))
{
w_Log.WriteLine(GetTaskCompleteMessage());
w_Log.Close();
}
//doing other stuff
}
String GetTaskCompleteMessage()
{
string timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff");
return = (timeStamp) + " Task Complete";
}
答案 2 :(得分:1)
每次要更新日志时都应重新定义字符串,因为现在变量timeStamp
已在类实例的生命周期内得到修复
string timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff");
string taskComplete = (timeStamp) + " Task Complete";
//在这里调用log方法
using (StreamWriter w_Log = new StreamWriter(file_Log, true))
{
timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff");
taskComplete = (timeStamp) + " Task Complete";
w_Log.WriteLine(taskComplete);
w_Log.Close();
}