如何让StringBuilder在同一行中追加两次



我正在使用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

我在这段代码中没有看到任何会重复这一行的内容。您必须运行此代码块两次。在File.AppendAllText()之后立即设置一个断点,然后打开文本文件,查看该行是否存在两次,然后再继续。

我发现了我的问题,实际上它非常愚蠢。我为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();
}
}
}

最新更新