2009-09-10 2 views
10

Debug.WriteLine() 문과 함께 내 Console.WriteLine() 명령을 "출력"창에 표시하려고합니다. 이 작업을 한 번 수행하는 방법을 알아 냈다고 생각하지만 Google에서 기억하고 다시 찾을 수는 없습니다. 내가 할 수있는 것을 기억하고있는 것 같습니다. app.config콘솔을 app.config의 시각적 스튜디오 디버그 출력 창으로 리디렉션

콘솔 및 디버그 문을 콘솔 출력에 표시하는 방법에 대해서는 많은 정보가 있지만 " 출력 "창을 엽니 다.

아는 사람 있습니까?

답변

18

기본적으로 가장 간단한 솔루션은 다음과 같습니다.

public class ToDebugWriter : StringWriter 
    { 
     public override void WriteLine(string value) 
     { 
      Debug.WriteLine(value); 
      base.WriteLine(value); 
     } 
    } 

하고 프로그램의 초기화에 추가해야이 줄 "Console.SetOut (새 ToDebugWriter());"

+0

좋은 대답. 감사! –

+1

젠장! 드디어 Visual Studio에서 내 NHibernate 쿼리를 볼 수 있습니다! –

+0

감사합니다. 'base.WriteLine'에 대한 호출을 왜 귀찮게합니까? –

1

출력 창에 대한 스트림을 확보 할 수 있다면 Console.SetOut()을 사용하여 리디렉션 할 수 있습니다. 그러나이 접근법은 가능하지 않습니다.

System.Debug은 모두 TraceListenerTraceListenerCollection에 출력됩니다. 처음 등록 된 TraceListener는 DefaultTraceListener입니다. 스트림 객체를 사용하지 않고 대신 원시 메소드를 사용하여 출력합니다.

아마도 Visual Studio API를 사용하는 방법이 좋습니다.

3

@Avram's answer 그의 코드에서 단일 오버로드가 log4net의 ConsoleAppender이 내 시스템에서 사용하지 않은 것을 제외하고는 저에게 효과적이었습니다. (그래서 비주얼 스튜디오의 "디버그"출력 창. 해당 log4net의 ConsoleAppender 출력 내가 Console.SetOut에 관심이 있어요) 그래서 가정에 string, object, char[] 등을 수용 StringWriterWriteWriteLine 모든 메소드를 오버라이드 하나 이상의 이 중 ConsoleAppenderConsole을 통해 전화를 걸었습니다.

이 작업이 성공했으며 "디버그"창에 log4net 로깅이 나타납니다.

유사한 목표를 가진 사람에게 이익을주기 위해 아래 코드를 포함 시켰습니다. (전적으로 안전하기 위해 나머지 StringWriter.Write.WriteLine 메쏘드를 오버라이드 할 수 있습니다. 불필요한 것처럼 보이기 때문에 base으로 전화를 제거했습니다. 그들은 방금 StringWriter (대개 그 클래스의).

namespace GeneralLibrary.Logging 
{ 
    using System.Diagnostics; 
    using System.IO; 

    public class DebugWriter : StringWriter 
    { 
     public override void Write(string format, object arg0) 
     { 
      Debug.Write(string.Format(format, arg0)); 
     } 

     public override void Write(string format, object arg0, object arg1) 
     { 
      Debug.Write(string.Format(format, arg0, arg1)); 
     } 

     public override void Write(string format, object arg0, object arg1, object arg2) 
     { 
      Debug.Write(string.Format(format, arg0, arg1, arg2)); 
     } 

     public override void Write(string format, params object[] arg) 
     { 
      Debug.Write(string.Format(format, arg)); 
     } 

     public override void Write(object value) 
     { 
      Debug.Write(value); 
     } 

     public override void Write(string value) 
     { 
      Debug.Write(value); 
     } 

     public override void Write(char[] buffer) 
     { 
      Debug.Write(buffer); 
     } 

     public override void Write(char[] buffer, int index, int count) 
     { 
      Debug.Write(new string(buffer, index, count)); 
     } 

     public override void WriteLine(string value) 
     { 
      Debug.WriteLine(value); 
     } 

     public override void WriteLine(object value) 
     { 
      Debug.WriteLine(value); 
     } 

     public override void WriteLine(string format, object arg0) 
     { 
      Debug.WriteLine(format, arg0); 
     } 

     public override void WriteLine(string format, object arg0, object arg1) 
     { 
      Debug.WriteLine(format, arg0, arg1); 
     } 

     public override void WriteLine(string format, object arg0, object arg1, object arg2) 
     { 
      Debug.WriteLine(format, arg0, arg1, arg2); 
     } 

     public override void WriteLine(string format, params object[] arg) 
     { 
      Debug.WriteLine(format, arg); 
     } 

     public override void WriteLine(char[] buffer) 
     { 
      Debug.WriteLine(buffer); 
     } 

     public override void WriteLine(char[] buffer, int index, int count) 
     { 
      Debug.WriteLine(new string(buffer, index, count)); 
     } 

     public override void WriteLine() 
     { 
      Debug.WriteLine(string.Empty); 
     } 
    } 
}