我正在使用StringBuilder和File.AppendAllText为我的应用程序创建日志。但是我不明白为什么它总是在同一行两次重复-除了毫秒稍有不同。我放了两个sb.Clear()
,这是我的代码。我想念我找不到的东西吗?
if (_bRealLog == true)
{
StringBuilder sb = new StringBuilder();
sb.Clear();
if (_bAppend == true)
{
sb.AppendLine();
}
sb.Append($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,FFF")} [SY] {_szLabel} {_szLogMessage}");
File.AppendAllText(Properties.Settings.Default.szDirectoryPath + "\\" + "log.log", sb.ToString());
sb.Clear();
}
[编辑]
我得到的是这个
2018-12-06 15:36:08,585 [SY] INFO Node aquisition and loading of cables
2018-12-06 15:36:08,589 [SY] INFO Node aquisition and loading of cables
2018-12-06 15:36:30,414 [SY] NOTICE 43 cables are loaded
2018-12-06 15:36:30,419 [SY] NOTICE 43 cables are loaded
我什么时候应该得到
2018-12-06 15:36:08,585 [SY] INFO Node aquisition and loading of cables
2018-12-06 15:36:30,414 [SY] NOTICE 43 cables are loaded
答案 0 :(得分:0)
我在这段代码中看不到任何可重复的行。您必须两次运行此代码块。在File.AppendAllText()
之后立即设置一个断点,然后打开您的文本文件,以在恢复之前查看该行是否存在两次。
答案 1 :(得分:0)
我发现了我的问题,实际上这很愚蠢。我为InvokeRequired
设置了一个条件,并将日志部分放置在else条件之外,这显然使它运行了两次。谢谢您,感谢您的宝贵时间。
public void WriteLog(string _szMessage, bool _bRealLog, bool _bAppend = true, string _szLogMessage = "", string _szLabel = "")
{
if (this.rtbLogs.InvokeRequired)
{
PrintLogDelegate d = new PrintLogDelegate(WriteLog);
this.Invoke(d, new object[] { _szMessage, _bRealLog, _bAppend, _szLogMessage, _szLabel });
}
else
{
if (String.IsNullOrEmpty(rtbLogs.Text))
{
rtbLogs.AppendText($"{_szMessage}");
rtbLogs.ScrollToCaret();
}
else
{
rtbLogs.AppendText(Environment.NewLine + $"{_szMessage}");
rtbLogs.ScrollToCaret();
}
if (_bRealLog == true)
{
StringBuilder sb = new StringBuilder();
sb.Clear();
if (_bAppend == true)
{
sb.AppendLine();
}
sb.Append($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,FFF")} [SY] {_szLabel} {_szLogMessage}");
File.AppendAllText(Properties.Settings.Default.szDirectoryPath + "\\" + "log.log", sb.ToString());
sb.Clear();
}
}
}