'표준 출력'에 해당되는 글 2

  1. 2011.03.30 표준 출력을 사용하는 어플리케이션을 테스트하는 방법
  2. 2010.08.27 Tomcat 표준출력을 파일로 남기기

표준 출력을 사용하는 어플리케이션을 테스트하는 방법

간혹 UI 를 표준 입/출력을 사용하는 어플리케이션이 있다.
표준 출력으로 메뉴를 보여주고 해당하는 문자를 누르면 다른 기능이 화면에 뿌려진다.
(예전의 PC 통신처럼)

또는 어떤 기능의 실행 성공여부가 표준 출력을 확인해야 하는 경우도 있다.
에러는 나지 않았는데 표준 출력으로 ERROR 이런 문자열만 출력되고 마는 경우가 종종 있는데, 이런 어플리케이션의 테스트를 자동화하는게 힘들다.

고민을 하다보니 표준 출력을 잡아서 비교하면 될거 같다.

System.setOut(PrintStream) 을 사용하면 됨.
바이트 기반 스트림이 필요한데 찾지를 못해서 조금 헤맸다.(감이 떨어지는구나...)
필요하면 File 스트림을 이용해서 파일로 남겨서 처리해도 됨.

Tomcat 표준출력을 파일로 남기기

고객사에 모듈 업그레이드를 했는데 에러가 난다.
로그를 확인해야 하는데 로그가 없다.
클래스 로딩되는 상황을 확인해야 하는데 표준출력이 어디로 가는건지...

콘솔에서 starup.bat 를 실행시키거나 startup.bat 를 더블클릭해서 Tomcat을 시작하는 경우 표준출력이 콘솔에 출력되어서 지나간 로그를 확인하기가 힘들다.
(Tomcat 버전에 관계없이 당연한 현상임)


Tomcat이 새창으로 구동되어서 표준출력을 파일로 리다이렉션을 시켜도 파일이 제대로 남지 않는다.
로그가 많아서 필요한 로그는 새창에서 지나가 버림.
startup.bat, catalina.bat 를 이것저것 수정해도 안됨.

로그를 남기려면 새창을 띄우면 안됨.
새창을 띄우는 부분을 찾아서 수정하면 될거 같다.


또는
rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% > c:/tomcat.log
goto end

이렇게 하면 표준출력이 파일로 떨어진다.
(서비스로 구동시키면 stdout.log, stderr.log 가 생길거야.)

- 회고
운영되는 서버를 왜 이렇게 구동시키지? 우....띠
예전에 이런 문제가 발생했을때 확실히 분석해서 방법을 알아뒀으면 오늘같은 고생은 안했을건데.

로그보고 에러 잡는 일이 남았다. 이제부터 진짜 일이지.