2012-12-18 5 views
0

스크립팅 배경에서 비롯된 C# 및 .net 작업을 시작했습니다. 나는 프로세스가 완료되었음을 알리는 텍스트 파일을 만드는 클래스를 만들었다. 콘솔 응용 프로그램에서이 클래스를 인스턴스화하고 끝에 쓰기 프로세스를 호출합니다. 내가하려고하는 일은 오류 또는 경고가 발생했을 때 다른 모든 수업을 추적하고 통지에 그 사건을 반영하는 것입니다."전역"설정을 사용하는 인스턴스 클래스

공용 정적 bool로 구현 했으므로 어떤 클래스가 실행 중인지 상관없이 catch가 발생할 때 bool을 true로 업데이트 할 수 있습니다. 나는 이것이 잘못된 것이라고 생각하지만 나는 지금해야 할 일을 찾기 위해이 시점을 충분히 모른다.

아무도 도와 줄 수 있습니까? 나는 다음과 같은 코드 주위에 시도 캐치 문을 사용하여 추적하는 것이 좋습니다

 private static void WriteNotice() 
    { 
     Notice newNotice = new Notice(); 
     newNotice.ProcessName = "NCOA"; 
     if (Notice.HasError == true) 
      newNotice.EndProcess(Notice.Status.Error_Incomplete); 
     else if (Notice.HasWarning == true) 
      newNotice.EndProcess(Notice.Status.Complete_With_Warnings); 
     else 
      newNotice.EndProcess(Notice.Status.Complete_Success); 

    } 
+1

코드 샘플을 공유하면 더 많은 의견을 제시 할 수 있습니다. –

답변

0

을 :

try 
     { 
      //your code goes here 

     } 
     catch (Exception ex) 
     { 
      //write exception detail to output window using .Net Tracing Tools 
      System.Diagnostics.Debug.WriteLine(ex.Message); 
     } 

더를 위해 코드 예제 : 나는 그것을 호출 할 경우

namespace Logging 
{ 
public class Notice 
{ 
    public static bool HasWarning { get; set; } 
    public static bool HasError { get; set; } 

    public string ProcessName {get; set;} 


    public enum Status 
    { 
     [Description("Complete Success")] 
     Complete_Success, 
     [Description("Complete with Warnings")] 
     Complete_With_Warnings, 
     [Description("Error Incomplete")] 
     Error_Incomplete 
    } 


    public void EndProcess(Status status) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append(string.Format("{0} is Complete!", ProcessName)); 
     sb.Append(Environment.NewLine); 
     sb.Append(Environment.NewLine); 
     sb.Append(string.Format("Completion Status: {0}", ToStringEnums(status))); 
     sb.Append(Environment.NewLine); 
     sb.Append(string.Format("Completion Time: {0}", DateTime.Now.ToString("MM/dd/yy H:mm:ss"))); 

     File.WriteAllText(string.Format(@"{0}\EndProcess.txt", Directory.GetCurrentDirectory()), sb.ToString()); 
    } 

입니다 고급 로깅 ​​메커니즘 NLOG을 다음과 같이 사용하는 것이 좋습니다.

static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); 
    try 
    { 
    //your code 
    } 
    catch (Exception ex) 
    { 
    logger.Error(ex.Message + System.Reflection.MethodBase.GetCurrentMethod()); 
    } 
+0

좋아요. 그게 실제로 제가하는 일 중 하나입니다. 따라서 작성한 bool에 작성하는 대신 시스템 디버그에 작성한 다음 나중에 읽을 수 있습니다. – reckless76

+0

System.Diagnostics.Debug에 작성하면 개발하는 동안 Trace 응용 프로그램을 사용할 수 있습니다 (Visual Studio의 "OUTPUT"창에서 작성중인 내용을 볼 수 있지만 로그 및 기록의 기록을 유지하려는 경우 나중에, 텍스트 파일을 만들고 응용 프로그램에 모든 예외를 기록하는 두 번째 방법 (NLOG)을 제안합니다. (try-catch 블록이있는 곳에서만 기록한다는 것을 명심하십시오!) –

+0

경고, 오류, Infos, 디버그 및 추적 로그는 다음 방법을 사용합니다. logger.Error (... logger.Warn (.. logger.Debug (... logger.Trace (... –