[asp.net] ASP.NET에서 Console.WriteLine은 어디에 있습니까?

J2EE 애플리케이션 (WebSphere에서 실행되는 것과 같은)에서을 사용할 때 System.out.println()텍스트가 표준 출력으로 이동하여 WebSphere 관리 콘솔에서 파일에 맵핑됩니다.

IIS에서 실행되는 것과 같은 ASP.NET 응용 프로그램에서 출력은 Console.WriteLine()어디로 이동합니까? IIS 프로세스에는 stdin, stdout 및 stderr이 있어야합니다. 그러나 stdout이 Windows 버전의 / dev / null에 매핑되어 있습니까? 아니면 여기서 핵심 개념이 누락 되었습니까?

부탁하지 내가 거기에 로그인해야하는 경우 (내가 log4net를 사용)하지만 여기서 출력 이동합니까? 내 최고의 정보는이 토론에서을Console.SetOut() 변경할 수 있다고 말 TextWriter했지만 콘솔의 초기 값이 무엇인지 또는 런타임 코드의 구성 / 외부에서 설정하는 방법에 대한 질문에는 여전히 대답하지 않았습니다.



답변

당신이 보는 경우 Console에 클래스 .NET 반사판 , 당신은 프로세스가 연관된 콘솔이 없습니다, 경우에 그것을 찾을 수 있습니다 Console.OutConsole.Error모의 Stream.Null(A 내부에 랩 TextWriter의 더미 구현 인) Stream즉 기본적으로 모든 입력을 무시보고, 출력을 제공하지 않습니다.

따라서 이는 개념적으로와 동일 /dev/null하지만 구현이 더 간소화됩니다. null 장치에서는 실제 I / O가 발생하지 않습니다.

또한을 호출하는 것 외에 SetOut기본값을 구성 할 방법이 없습니다.


답변

System.Diagnostics.Debug.WriteLine(...)대신에 를 사용 Console.WriteLine()하면 Visual Studio 의 출력 창 에서 결과를 볼 수 있습니다 .


답변

DataContext의 Log 출력을 출력 창으로 변경 하여이 질문을 찾았습니다. 그래서 다른 사람이 똑같이하려고하면, 내가 한 일은 이것을 만들었습니다.

class DebugTextWriter : System.IO.TextWriter {
   public override void Write(char[] buffer, int index, int count) {
       System.Diagnostics.Debug.Write(new String(buffer, index, count));
   }

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

   public override Encoding Encoding {
       get { return System.Text.Encoding.Default; }
   }
}

그 후 발표 : dc.Log = new DebugTextWriter () 출력 창에서 모든 쿼리를 볼 수 있습니다 (dc는 DataContext입니다).

자세한 내용은 다음을 참조하십시오 : http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers


답변

IIS Express를 사용하고 명령 프롬프트를 통해 시작하면 DOS 창이 열린 상태로 유지되며 Console.Write여기에 명령문이 표시됩니다.

예를 들어 명령 창을 열고 다음을 입력하십시오.

"C:\Program Files (x86)\IIS Express\iisexpress" /path:C:\Projects\Website1 /port:1655

C : \ Projects \ Website1에 웹 사이트 디렉토리가 있다고 가정합니다. IIS Express가 시작되고 웹 사이트 디렉토리의 페이지를 제공합니다. 명령 창을 열어두고 출력 정보를 볼 수 있습니다. 이 코드와 함께 default.aspx 파일이 있다고 가정 해 보겠습니다.

<%@ Page Language="C#" %>
<html>
<body>
    <form id="form1" runat="server">
    Hello!

    <% for(int i = 0; i < 6; i++) %>
       <% { Console.WriteLine(i.ToString()); }%>

    </form>
</body>
</html>

브라우저와 명령 창을 정렬하여 화면에서 모두 볼 수 있도록하십시오. 이제 브라우저에 입력하십시오 : http://localhost:1655/. 안녕하세요! 웹 페이지에는 있지만 명령 창에는 다음과 같은 내용이 표시됩니다

Request started: "GET" http://localhost:1655/
0
1
2
3
4
5
Request ended: http://localhost:1655/default.aspx with HTTP status 200.0

마크 업의 코드 블록으로 코드를 작성하여 간단하게 만들었지 만 코드 뒤에 또는 코드의 다른 곳 에서 콘솔 문도 여기에 표시됩니다.


답변

System.Diagnostics.Debug.WriteLine(...);Visual Studio 2008의 직접 실행 으로 가져옵니다 .

메뉴 디버그 -> Windows- > 즉시로 이동하십시오 .

여기에 이미지 설명을 입력하십시오


답변

기본적으로 콘솔 청취는 없습니다. 디버그 모드로 실행하면 콘솔이 연결되어 있지만 프로덕션 환경에서는 의심의 여지가 없으므로 아무것도 듣고 있지 않으므로 메시지가 이동하지 않습니다.


답변

엄격한 콘솔 응용 프로그램에 있지 않으면 실제로 볼 수 없기 때문에 사용하지 않을 것입니다. 프로덕션에서 켜고 끌 수있는 디버깅 유형 정보에 Trace.WriteLine ()을 사용합니다.