문제

우리는 C#배포 되는 서비스는 원거리에 있는 고객 시스템입니다.응용 프로그램이 쓰이 상당한 금액의"진단"정보를 콘솔(i.eConsole.WriteLine()).서비스하지 않고"그것이 무엇을 해야한다." 우리는 어떻게 캡처하는 콘솔에서 출력 서비스에는 다른 응용 프로그램?

WinForm 버전 응용 프로그램에 로드할 수 있습니다.그것은,불행하게도,정확하게 작용한다.

업데이트:

우리는 우리를 변경할 수 있는 서비스를 변경하지만,하지 않으려는 것을 주요 변경 사항에 이 시간입니다.

우리는 또한 로깅을 MSMQ,하지만"중요한"이벤트입니다.이 서비스와 상호 작용 MSMQ 를 위해 정상적인 작업입니다.또는,적어도,그것은 해야 합니다.서비스하지 않는 것 같이 될 때의 항목에서 MSMQ 때 WinForm 버전 않습니다.그래서 쓰는 메시지를 콘솔이 될 수 있는 문제입니다.

도움이 되었습니까?

해결책

당신은 당신을 변경할 수 있 코드 서비스 ?그렇다면,사용 Console.SetOut 파일에 쓰는 대신 것이 가장 눈에 띄는 최초의 포트를 호출합니다.다음 변경을 사용하여 적절한 로깅을 위해서 다음 버전:)

다른 팁

일반적으로,당신은 피해야 쓰기 진단에게 직접 정보를 콘솔,이벤트 로그 MSMQ 또는 다른 곳에서 당신의 응용 프로그램 코드입니다.대신 전화 로그 API 를 사용하고,구성하는 출력을 리디렉션 당신이 원하는 어디든지.

예를 들어,대체할 수 있는 모든 콘솔입니다.WriteLine 으로 추적합니다.WriteLine(*).할 수 있습니다 다음 출력을 리디렉션 콘솔,파일 또는 다른 곳에서 수정하여 응용 프로그램 configuration file:예를 들어를 출력하는 콘솔,사용 ConsoleTraceListener,다음과 같습니다.

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="configConsoleListener"
             type="System.Diagnostics.ConsoleTraceListener" />
      </listeners>
    </trace>
  </system.diagnostics>
 </configuration>

디버깅하는 동안,당신은 귀하의 산출에는 콘솔에서는 고객 사이트에 당신은 그것을 구성하여 리디렉션 추적 출력하는 파일의 이벤트 로그인 또는 비슷합니다.

더 나은 사용하여 제 3 자 logging framework(내가 권하고 싶 Log4Net)는 것입니다 당신보다 더 많은 옵션 시스템입니다.Diagnostics.추적합니다.

(*)추적합니다.쓰/추적합니다.WriteLine 은 같은 디버그.쓰/Debug.WriteLine 것을 제외하고,후자는 단지 컴파일된 경우에는 디버깅 심볼이 정의됩니다.그래서 선호하는 추적 디버깅을 하려면 출력에 사용할 수 있 릴리스 있습니다.

당신은 무리의 옵션리다이렉션 콘솔 출력하는 파일을 사용하여 적절한 로깅으로 라이브러리를 언급은 두 가지 좋은 사람이 있습니다.여기서 중요한 옵션:이벤트 로그에 기록합니다.

EventLog log;
string logsource = "MyService";

// execute once per invocation
if (!System.Diagnostics.EventLog.SourceExists(logsource))
{
    System.Diagnostics.EventLog.CreateEventSource(
        logsource, "Application");
}
log = new EventLog();
log.Source = logsource;
log.Log = "Application";

// replace console logging with this
log.WriteEntry(message, EventLogEntryType.Information);

다음 항목에 대한 응용 프로그램에 이벤트 로그(관리 도구->이벤트 뷰어)는 원본="MyService".

는 사용하지 않을 것 Console.WriteLine 에서 모든 창에서 서비스입니다.당신은 아마 이러한 오류를 기록하는 로그 파일이 있습니다.

다른 방법으로 이 일을 하도록 여러 응용 프로그램을 사용할 수 있습 로그 게시 로그 메시지를 MSMQ 큐가 있습니다.

사용하여 디버그.writeline 사용 sysinternals 명령 프롬프트를 엽?

내가 발견 이 게시물 MSDN 바인딩하는 콘솔에 출력한 텍스트 상자에 나를 위해 일을 매우 빠르고 쉽습니다.

재정의 WriteLine,그리고 확장 될 수 있을 재정의 다른 방법이 있습니다.

여기에 내가 어떻게 볼 콘솔 출력에서 실행되는 서비스는 윈도우 7.이 도움이 될 수 있는 경우에 당신은 절대적으로 수정할 수 없습의 소스 코드 서비스에 로그를 파일에 저장합니다.

  1. 실행 서비스입니다.msc 고의 속성을 편집 서비스입니다.에"로그온"탭에서 확인하"서비스와 상호 작용하는 데스크톱"

  2. 레지스트리 편집기를 사용하여 수정 이미지 경 귀하의 서비스:가 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\[사용자의 서비스 이름]고 편집 이미지 경로.Append cmd.exe /c 의 시작 부분에 이미지 경 문자열입니다.그래서 만약 당신의 원래 이미지 경가 c:\myService\myservice.exe 의 새로운 이미지 경야 cmd.exe /c c:\myService\myservice.exe.

  3. 시작 귀하의 서비스입니다.당신이 얻어야 하는 팝업 창에"라는 제목의 상호 작용하는 서비스를 탐지".보기"를 선택하는 메시지".귀하의 화면 컨텍스트 스위치 및 표시 콘솔창입니다.이 완료되면"돌아드"버튼을 누릅니다.

  4. 이 완료되면 디버깅,수정하는 이미지 경로 다시 원래 값입니다.그런 다음"체크 해제용 서비스 데스크톱과 상호 작용"체크박스에서 서비스 속성과 다시 시작 귀하의 서비스입니다.

경고:난 단지 이것을 하나의 서비스와 그것이 나를 위해 일했습니다.내가 알지 못하는 경우 작동을 위한 모든 서비스 또는 일으키는 원인이 되는 경우에는 예상치 못한 결과를 그래서 나는 좋은 당신만이 아닌 생산 환경이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top