2015년 4월 14일 화요일

로그 출력하며 저장하기

임베디드 시스템 설계 시 유지/보수 및 디버깅을 위한 로깅은 일반적으로 serial interface를 사용하여 구현된다.  이는 시스템의 특정 serial interface를 표준 입출력 및 에러로 지정하는 것으로 printf를 사용한 로그 메세지가 serial 로 출력되며 따라서 serial interface가 연결된 상태에서만 로깅이 가능하므로 개발이나 유지 보수에 불편한 점이 많다.

만일 기기 내부에 임시로 로그를 저장하거나, 로그의 양을 조절하기 위한 우선순위 지정등의 추가 기능이 필요할 경우 이를 위한 자체 로깅 API를 작성하거나 혹은 시스템에서 제공하는 syslog()등의 사용을 고려할 수 있다.  하지만 재빌드가 불가능한 3rd party library등에서 printf를 사용하고 있다면 여기에 새 로깅 API를 적용할 수는 없다.

위와 같이 별도의 로깅 시스템이 고려되지 못한 상황에서 표준 출력과 표준 에러에만 의존하는 프로그램을 로깅하기 위해서 아래와 같은 방법을 사용할 수 있다.

# program 2>&1 | tee /tmp/log.txt
  • program : 프로그램명
  • 2>&1 : 표준 에러를 표준 출력과동일한 곳으로 설정
  • | :표준 출력을다음 프로그램의 표준 입력으로전달 
  • tee : 표준입력을 표준출력으로 보내면서 동시에 인자로 지정 된 경로에 전달

댓글 없음: