Лучший способ написать лог-файл из разных пользовательских элементов управления

Я просто хочу записывать важные вещи в файл журнала, как. TXT. Я создал класс ErrorHandling для этого. Я читаю коды ошибок из файла CSV и добавляю текст в консоль / графический интерфейс. Теперь проблема в том, что я хочу записать файл ошибок из разных 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, действие не запускается, потому что это новый экземпляр ErrorHandling.

1 ответ

Решение

Я только что нашел рабочее разрешение.

Я сейчас использую метод трассировки.

Просто добавил этот код в мой 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. Это отлично сработало для меня.

Другие вопросы по тегам