편집할 수 없는 외부 프로그램이 있습니다. 로그를 파일에 기록합니다.
프로그램이 로그 파일에 쓸 때 각 줄에 타임스탬프를 어떻게 추가할 수 있나요?
출력을 표준 출력에 기록하지 않습니다. 타임스탬프에는 최소 초가 포함되어야 합니다. 파이프, bash, cron 등과 같은 표준 Linux 도구를 사용하는 것이 더 좋습니다.
몇 가지 샘플 스크립트를 테스트한 후 프로그램이 구성을 다시 로드하기 위해 로그 파일을 닫은 다음 동일한 파일을 일반 빈 텍스트 파일로 다시 생성한다는 사실을 발견했습니다. 이것은 파일 내용의 지속적인(cron) 재검사와 같은 다른 방법을 사용해야 한다는 것을 의미한다고 생각합니다.
답변1
fifo
하나를 만들고 여기에 로그를 기록하도록 프로그램을 구성 할 수 있습니까 ?
그렇다면 FIFO를 생성하고 여기에서 데이터를 읽고 이를 로그 파일에 기록하는 간단한 쉘 스크립트를 작성하고 타임스탬프를 추가합니다. 그것은 다음과 같습니다:
#!/bin/sh
FIFOFILE=/tmp/program_log.fifo
LOGFILE=/var/log/program.log
mkfifo $FIFOFILE
awk '{printf("%s - %s\n", systime(), $0);}' < $FIFOFILE > $LOGFILE
두 번째 버전
프로그램이 정기적으로 로그 회전을 수행하고 fifo를 삭제하는 경우 다른 방법을 사용해야 합니다.
tail
프로그램 로그 파일을 사용하여 모니터링 할 수 있습니다 . 테일 체크에 주의하세요정기적으로파일이므로 (운이 좋지 않으면) 일부 로그 줄이 손실될 수도 있습니다.
#!/bin/sh
PROGRAMLOGFILE=/tmp/program.log
MARKEDLOGFILE=/var/log/program.log
tail -F $PROGRAMLOGFILE \
| awk '{printf("%s - %s\n", systime(), $0);}' \
> $MARKEDLOGFILE
답변2
내 의견의 syslog 아이디어를 기반으로 합니다.
tail -n1 -q -f --retry $YOURFILE 2>/dev/null |logger
CentOS 5에서 작동하는 것 같습니다. tail 및 logger에 대해서는 로컬 매뉴얼 페이지를 참조하십시오.
CentOS에는 "--retry" 사용에 대한 경고가 있습니다.표준 에러그리고 진압해야 합니다.
logger
syslog에 메시지를 보낼 수 있습니다. syslog에는 일반적으로 타임스탬프가 앞에 붙습니다 .