![매일 장기 실행 프로세스의 출력을 새 로그 파일로 리디렉션](https://linux55.com/image/155761/%EB%A7%A4%EC%9D%BC%20%EC%9E%A5%EA%B8%B0%20%EC%8B%A4%ED%96%89%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%83%88%20%EB%A1%9C%EA%B7%B8%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98.png)
프로세스 시작 시간을 기준으로 출력이 로그 파일에 캡처되는 장기 실행 프로세스 1 이 있습니다.
export LOG_FILE=${LOGS_DIR}/$LOGNAME/${LOGNAME}-`date +%Y%m%d-%H%M%S`.txt
...
${TARGET_SCRIPT} ${OPERATION} ${ARGS} >> ${LOG_FILE} 2>&1
문제는 대부분의 애플리케이션 로깅이 로깅 프레임워크를 통해 수행되지만 일부 항목은 여전히 stdout 및 stderr에 몰래 들어가고 문제가 발생하면 콘솔 출력 로그가 매우 커질 수 있다는 것입니다.
모든 로그(콘솔 로그 및 로깅 프레임워크의 로그 포함)는 공간이 제한된 고성능 파일 시스템에 기록되므로 Jenkins 작업을 실행하여 일주일 동안 손대지 않은 파일을 보관합니다(필요한 경우 압축).
이는 전날의 로그를 압축하기 전 자정에 로그 파일을 롤링하는 기본 로깅 프레임워크에 매우 효과적입니다. 런어웨이 로그는 압축되지 않은 출력이 최대 1일만 가능하며, 런어웨이 로그를 압축할 때 압축 효율성이 매우 높을 수 있으므로 자동 보관을 통해 파일 시스템이 가득 차는 위험을 최소화합니다.
그러나 콘솔 로그는 파일이 한 번에 몇 달 동안 저장될 수 있기 때문에 잘 작동하지 않으며 프로세스를 다시 시작해야만 새 파일이 생성되어 일주일 후에 jenkins 작업이 파일을 압축하고 보관할 수 있습니다.
그렇다면 콘솔 로그를 매일 분할하려면 어떻게 해야 합니까?
내가 원하는 것은 이 프로그램/스크립트를 작성(그리고 철저하게 테스트)하지 않고도 유사한 프로그램/스크립트 >> ${LOG_FILE}
로 바꾸는 것 입니다. 이런 것이 이미 존재했으면 좋겠지만 내 Google foo는 지금까지 나를 실망시키지 않았습니다.| logsplitter --append ${FILE_SPEC}
logsplitter
1 - 몇 달 동안 실행될 수 있습니다.
2 - 우리가 사용하는 일부 라이브러리는 콘솔에 직접 오류 메시지를 생성합니다.
3 - 로깅 프레임워크의 결함으로 인해 stderr 로깅으로 대체될 수 있습니다.