2012-04-26 4 views
10

모든 Console.Write [Line]에 접두어 (날짜와 시간)를 삽입하는 방법을 찾고 있습니다. 출력을 변경하는 권장 방법이 Console.SetOut을 사용하는 것과 같이 그렇게 할 수있는 권장 방법을 찾고 있습니다.Console.Write 접두어를 붙이기위한 권장 방법은 무엇입니까?

저는 String.Format ("{0} {1}", DateTime.Now, msg)을 할 수 있다는 것을 잘 알고 있습니다. 그러나 저는 이것을 최후의 수단으로 남겨 두려고합니다.

문제는 런타임에 출력을 변경할 수 있으며 기본값은 이미 현재 시간을 추가한다는 것입니다. 내 코드에 추가하면 날짜가 중복됩니다.

그런 것이 있습니까? Monotouch를 사용하고 있으므로 컴파일 된 라이브러리 만 사용할 수 있습니다.

답변

11

, 예를 들어, 대한 Encoding 및 대체를 제공합니다 ... 모든 코드 파일의 MyConsole로 한 단계 더 및 별칭 Console를 취할 수 WriteLineWrite. Console.setOut(x)으로 변경하기 전에 원본 Console.Out을 보관하십시오. 내가 지금 뭘하는지

class PrefixedWriter : TextWriter 
{ 
    private TextWriter originalOut; 

    public PrefixedWriter() 
    { 
     originalOut = Console.Out; 
    } 

    public override Encoding Encoding 
    { 
     get { return new System.Text.ASCIIEncoding(); } 
    } 
    public override void WriteLine(string message) 
    { 
     originalOut.WriteLine(String.Format("{0} {1}", DateTime.Now, message)); 
    } 
    public override void Write(string message) 
    { 
     originalOut.Write(String.Format("{0} {1}", DateTime.Now, message)); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.SetOut(new PrefixedWriter()); 
     Console.WriteLine("test 1 2 3"); 
     Console.ReadKey(); 
    } 
} 
+0

그게 최선의 방법입니다. MonoTouch 5.3+는 iOS 5.1에 추가 된 ** stdout ** 제한을 해결하기 위해'Console.Write *'를'NSLog '로 리디렉션합니다. 소스 코드의 예비 버전은 내 블로그에서 볼 수 있습니다. http://spouliot.wordpress.com/2012/03/13/ios-5-1-vs-stdout/ – poupou

+0

문제를 잘 통합하고 해결하는 방법을 좋아합니다. 질문에 언급 된 두 배의 날짜 –

9

콘솔 호출을 자신의 클래스로 바꿀 수 있습니다.

class MyConsole 
{ 
    public static void WriteLine(string msg) 
    { 
     Console.Write(String.Format("{0} {1}", DateTime.Now, msg)); 
    } 
} 

그런 다음 물론, Console.Write에 대한 모든 호출은 MyConsole.Write을하게된다.

또한

당신은 System.IO.TextWrite에서 inherit 필요
using Console = MyNamespace.MyConsole; 
+0

이 정확히 :

은 여기에 전체 코드의 예입니다. 현재 아키텍처에 플러그 인 할 수있는 방법이 있는지 궁금합니다. –

+0

이 솔루션은 작동하지만 원본 콘솔 출력을 사용할 때 이중 날짜는 처리하지 않습니다. –

관련 문제