从不同的用户控件编写日志文件的最佳方法

Best way to Write a Logfile from Different UserControls

我只想将重要的事情记录到日志文件中,就像 .txt 一样。 我为此创建了一个 class ErrorHandling。我从 CSV 文件中读取错误代码并将文本添加到控制台/GUI。现在是问题所在,我想从不同的 UserControls 写入错误文件,但控制台在 MainWindow 中。我怎样才能将文本从 Class 添加到我的输出控制台?

这是我的错误处理 class。

    public class ErrorHandling
    {
    public static Action WriteErrorLog;
    private static object writeLock = new object();

    public enum errorState
    {
        INFO, WARNING, CRIT
    }

    public string getErrorString(int ErrorCode)
    {
        var errorString = string.Empty;
        var reader = new StreamReader(File.OpenRead(@"errorCodes.csv"));

        List<string> Codes = new List<string>();
        List<string> Error = new List<string>();

        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(';');

            Codes.Add(values[0]);
            Error.Add(values[3]);
        }

        var index = Codes.FindIndex(p => p == ErrorCode.ToString());

        if (index == -1)
            return "Unbekannter Fehler aufgetreten!";
        else
            return Error[index] + " (" + Codes[index] + ")";
    }

    public void addToLogFile(errorState error, int errorCode = 0, string errorText = null)
    {
        var errorTextResult = error.ToString();

        if (errorCode == 0 && errorText == null)
        {
            return;
        }
        else if (errorCode != 0 && errorText != null)
        {

            errorTextResult += " - " + DateTime.Now.ToString();
            errorTextResult += " : " + getErrorString(errorCode) + "\n";
            errorTextResult += errorText;

        }
        else if (errorCode != 0 && errorText == null)
        {
            errorTextResult += " - " + DateTime.Now.ToString();
            errorTextResult += " : " + getErrorString(errorCode);
        }
        else if ( errorCode == 0 && errorText != null)
        {
            errorTextResult += " - " + DateTime.Now.ToString() + " : ";
            errorTextResult += errorText;
        }

        ThreadPool.QueueUserWorkItem(writeToLogFile, errorTextResult);

    }

    #region LogDatei schreiben
    public static void writeToLogFile(object text)
    {
        try
        {
            if (!File.Exists(Properties.Settings.Default.LogFilePath))
            {

                using(var writer = File.AppendText(Properties.Settings.Default.LogFilePath))
                    writer.WriteLine(Properties.Settings.Default.LogFilePath, "LatikeManager Logfile " + DateTime.Now.ToString());
            }
            using (var writer = File.AppendText(Properties.Settings.Default.LogFilePath))
                writer.WriteLine(Properties.Settings.Default.LogFilePath, text + "\n");

            WriteErrorLog();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Fehler beim schreiben der Log Datei : \n" + text + "\n" + ex.ToString());
        }
    }
    #endregion
}

当我只是从另一个 UserControl 添加文本时,操作不会触发,因为它是来自 ErrorHandling 的新实例。

我刚刚找到了可行的解决方案。

我现在正在使用trace方法

刚刚将此代码添加到我的 App.conf

   <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="myTrace" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\LogFile\mytrace.log"></add>
      </listeners>
    </trace>
  </system.diagnostics>

然后用

public static void writeToLogFile(object text)
{
    Trace.Write(string.Format("{0}\r\n",text));
}

我的 ErrorHandling 方法中的此代码。这对我很有用。