从不同的UserControls编写日志文件的最佳方法

时间:2016-09-09 10:02:35

标签: c# user-controls action logfile

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

这是我的ErrorHandling类。

    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添加文本时,Action不会触发,因为它是来自ErrorHandling的新实例。

1 个答案:

答案 0 :(得分:0)

我刚刚找到了工作决议。

我现在正在使用跟踪方法。

刚刚将此代码添加到我的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方法中的此代码。这对我很有用。