2016-09-09 5 views
0

.txt와 같이 중요한 것을 로그 파일에 기록하려고합니다. 이것을 위해 ErrorHandling 클래스를 만들었습니다. CSV 파일에서 오류 코드를 읽고 콘솔/GUI에 텍스트를 추가합니다. 이제 문제는, 다른 UserControls에서 오류 파일을 쓰고 싶지만 콘솔은 MainWindow에 있습니다. 어떻게하면 내 수업에서 출력 콘솔에 텍스트를 추가 할 수 있습니까?다른 UserControls에서 로그 파일을 작성하는 가장 좋은 방법

이것은 내 ErrorHandling 클래스입니다. 난 그냥 다른 UserControl에서 텍스트를 추가 할 때 에러 처리에서 새로운 인스턴스이기 때문에

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 
} 

, 동작은 발생하지 않습니다.

+2

자신에게 유리하게 기존 로깅 프레임 워크를 채택하십시오. 왜 그 일을 스스로하고 그것을 다시 생각해야합니까? 자신의 솔루션을 디버그하는 데 걸리는 시간은 하나를 채택하는 것보다 오래 걸릴 것입니다. –

답변

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)); 
} 

이 코드를 사용했다. 이것은 나를 위해 큰 역할을했습니다.