2013-06-10 6 views
5

나는 영원히 사용하는 nodej와 함께 몇 개의 서버 스크립트 (다른 ​​포트에서)를 계속 실행합니다.영원히 실행되는 node.js 스크립트에서 로깅 사용 안 함

이러한 서버 중 일부에는 많은 양의 트래픽이 있습니다. console.log 추적 연결 비정상에 대한 명령으로 인해 디버깅 전용으로 항상 필요하지 않은 비 대한 로그 파일이 생성됩니다. 밤늦게 스크립트를 수동으로 중지하고 파일을 자르고 다시 시작했습니다. 장기적으로는 그렇게되지 않으므로 해결책을 찾기로했습니다.

내 시스템의 다른 누군가가 내 지식없이 각 서버에 대해 설정 한 로그 파일을 삭제했습니다. 을 명령 줄에 영원히으로 호출하면 서버 스크립트가 여전히 실행 중이지만 지금은 노드가 어떻게 작동하는지 로그 파일을 확인할 수 없습니다.

노드 중단 시간은 최소한으로 유지해야하므로 일광 절약 시간 동안 서버를 몇 분 이상 중지하는 것을 주저합니다. 클라이언트 측의 초기 테스트는 스크립트가 정상적으로 작동하고 있음을 나타내는 것으로 보이지만 존재하지 않는 파일에 로깅 시도가 실패했기 때문에 오류가 없음을 100 % 확신 할 수 없습니다..

나는 실제로 몇 가지 질문이 있습니다

  1. 는이 같은 실행 영원히 계속 확인인가?
  2. 그렇지 않은 경우 로깅을 사용 중지하는 방법은입니다. github repository은 영원히 내가 원하지 않는 기본 파일에 계속 로그온 함을 나타냅니다. 그렇지 않으면 정기적으로 스크립트를 중지하고 로그를 잘라낸 다음 스크립트를 다시 시작하는 cronjob을 작성할 수 있습니다.
  3. 스크립트가 실행 중일 때 touch logfile_name.log과 같이 로그 파일을 다시 작성하면 어떻게됩니까? 영원히 괴물이되거나 그럴듯한 해결책입니까?

감사합니다.

+1

+1 아주 좋은 질문입니다. – verybadalloc

+1

대부분의 로깅 시스템이하는 것과 같은 것을 구현하는 것을 고려 했습니까? console.log를 직접 호출하는 대신 래퍼 함수 (또는 라이브러리 사용)를 작성하여 메시지뿐 아니라 로깅 수준을 할당 한 다음 구성에 따라 출력 로그 만 어떤 의미 이상. 나는 그것이 로깅을 비활성화하는 "적절한"방법이라고 말하고 싶습니다. –

+0

@Bret 나는 더 이상 그 회사에서 일하지 않는다. 그러나 그것이 내가 끝내었던 것이다 - 다양한 수준의 로깅을 생성한다. 파일을 작게 유지하여 재시작하기 전에 스크립트를 중지하지 않아도 로그를 지울 수 없었습니다. – Cubis

답변

1

logrotate라는 유용한 도구가 있습니다. 살펴보기 here

특히 copytruncate 옵션은 매우 유용합니다.

2

에 따르면 https://github.com/foreverjs/forever에 따라 -s를 전달하여 모든 로그를 무음으로 설정하십시오.

forever -s start YOURSCRIPT

확실히,이 일을하기 전에, 최신 영원히 업데이트하려고 :

sudo curl -L https://npmjs.com/install.sh | sudo sh

sudo npm update -g합니다.

+1

-s는 console.logs를 표시하지 않습니다. –

1

1) 영원히 로그를 지우려면 정기적 기능 또는 관리 옵션을 구축하십시오. 설명서에서 forever cleanlogs

2) 적어도 Linux의 경우. 각 로그 파일을 /dev/null으로 보냅니다. 각 로그 유형은 -l-o-r 옵션으로 지정됩니다.append log에 대한 -a 옵션은 이미 존재하는 로그에 대해 불평을하지 않게 할 것입니다. 내가 노드 프로세스가 계속 실행되는 동안 로그 파일을 삭제하면

forever start -a -l /dev/null -o /dev/null -r /dev/null your-server.js 

아마도 자신의 로깅 시스템을 채택, 내가 log4js를 사용, 그것은 불평하지 않습니다.