如何保持StringBuilder在同一行追加两次

时间:2018-12-06 14:51:23

标签: c# logging 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

2 个答案:

答案 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();
            }
        }
    }