app.config의 Visual Studio Debug 출력 창으로 콘솔 리디렉션
-
05-07-2019 - |
문제
나는 내 것을 얻고 싶다 Console.WriteLine()
내 "출력"창에 내 명령이 내 Debug.WriteLine()
진술. 나는 이것을 한 번 수행하는 방법을 알아 냈다고 생각하지만 Google에서 다시 수행하는 방법을 기억할 수 없습니다. 나는 이것을 할 수 있다는 것을 기억하는 것 같습니다. app.config
파일.
콘솔의 출력에 콘솔 및 디버그 명령문을 얻는 방법에 대한 많은 지침을 발견하지만 "출력"창에 표시되는 방법은 아닙니다.
가능합니까?
해결책
기본적으로 가장 간단한 솔루션은 다음과 같습니다.
public class ToDebugWriter : StringWriter
{
public override void WriteLine(string value)
{
Debug.WriteLine(value);
base.WriteLine(value);
}
}
프로그램의 초기화 에이 줄을 추가해야합니다.
Console.SetOut(new ToDebugWriter());
다른 팁
@avram의 대답 그의 코드의 단일 오버로드가 Log4net의 코드가 아니었다는 점을 제외하고는 저를 위해 일했습니다. ConsoleAppender
내 시스템에서 사용하고있었습니다. (나는 관심이있다 Console.SetOut
그래서 log4net ConsoleAppender
Visual Studio의 "Debug"출력 창에 대한 출력.) StringWriter
'에스 Write
그리고 WriteLine
방법을 수락합니다 string
, object
, char[]
, 이들 중 하나 이상이 무엇이라고 가정하자마자 ConsoleAppender
전화를 걸고 있었다 Console
.
이것은 성공했고 로그 4net 로깅은 이제 "디버그"창에 나타납니다.
비슷한 목표를 가진 사람의 이익을 위해 아래 코드를 포함하고 있습니다. (완전히 안전하기 위해서는 나머지를 무시할 수 있습니다. StringWriter.Write
그리고 .WriteLine
방법.) 전화를 제거했습니다 base
불필요한 것처럼 보이기 때문에 내부에 큰 버퍼를 쌓는 것 같습니다. StringWriter
(보통 해당 수업을 통해 액세스합니다 .ToString()
.)
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);
}
}
}
출력 창에 스트림을 잡을 수 있다면 사용할 수 있습니다. Console.setout () 그것으로 리디렉션합니다. 그러나이 접근법은 불가능한 것 같습니다.
System.debug 모든 것에 대한 출력 tracelistener 그것에 tracelistenercollection. 처음에 등록 된 Tracelistener는 하나뿐입니다. DefaultTraceListener. 스트림 객체를 사용하지 않고 대신 출력을 위해 기본 메소드를 사용합니다.
Visual Studio API를 사용하는 접근 방식은 아마도 갈 길입니다.