我正在设计一个新的服务器应用程序,其中包含一个子程序,用于将输入分析到控制台窗口,例如
LogAlways("--- CPU detection ---")
将写成:
[net 21:8:38.939] --- CPU detection ---
这是子程序:
Public Sub LogAlways(ByVal input As String)
Dim dm As String = "[net " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + ":" + Date.Now.Second.ToString + "." + Date.Now.Millisecond.ToString + "] "
Console.WriteLine(dm + input)
Dim fName As String = Application.StartupPath() + "\LogBackups\" + Date.Now.Day.ToString + Date.Now.Month.ToString + "" + Date.Now.Year.ToString + ".log"
Dim stWt As New Global.System.IO.StreamWriter(fName)
stWt.Write(dm + input)
stWt.Close()
End Sub
这样可行,但是只将我想要的输入的最后一行写入文件。
为什么会发生这种情况,如何才能使其不会覆盖日志文件? 这是使用Wildfire服务器API。
这不是重复,因为目标问题有不同的答案,否则不会回答这个问题。
答案 0 :(得分:1)
这是因为没有告诉StreamWriter将输出追加输出到文件的末尾,参数设置为True
,Visual Studio实际上将它作为版本的StreamWriter的:
要正确声明:
Dim stWt As New Global.System.IO.StreamWriter(fName, True)
或在子程序中:
Public Sub LogAlways(ByVal input As String)
Dim dm As String = "[net " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + ":" + Date.Now.Second.ToString + "." + Date.Now.Millisecond.ToString + "] "
Console.WriteLine(dm + input)
Dim fName As String = Application.StartupPath() + "\LogBackups\" + Date.Now.Day.ToString + Date.Now.Month.ToString + "" + Date.Now.Year.ToString + ".log"
Dim stWt As New Global.System.IO.StreamWriter(fName, True)
stWt.Write(dm + input)
stWt.Close()
End Sub
要求以下内容为Imports
:
现在它会正确地写到文件的末尾,但是请注意stWt.Close()
每次调用上的文件可能会导致问题,因此排队系统可能更好:
Timer
将此数组转储到每个日志文件中,比如五到十秒