로그 파일은 심각한 응용 프로그램의 중요한 부분입니다. 앱의 로깅이 양호하면 어떤 주요 이벤트가 언제 발생했는지 확인할 수 있습니다. 어떤 오류가 발생했는지; 일반적으로 문제에 대해 듣고 응용 프로그램의 내장 진단 (웹 콘솔을 열거 나 JMX와 같은 진단 도구를 사용)을 확인한 다음 검사를 수행하는 것이 일반적입니다 로그 파일.
텍스트가 아닌 형식을 사용하는 경우 즉시 장애물이 발생합니다. 이진 로그를 어떻게 읽습니까? 프로덕션 서버에없는 로그 읽기 도구를 사용하십시오! 아니면, 그러나, 우리는 새로운 분야를 추가했고 이것은 오래된 독자입니다. 우리는 이것을 테스트하지 않았습니까? 예, 그러나 아무도 여기에 배포하지 않았습니다. 한편, 사용자가 핑을하면서 화면이 밝아지기 시작합니다.
아니면 이것이 앱이 아니지만 지원하고 있으며 다른 시스템과 WTF라는 것을 알고 있다고 생각하십니까? 로그는 이진 형식입니까? 좋아, 위키 페이지를 읽기 시작하고 어디에서 시작합니까? 이제 로컬 컴퓨터로 복사했지만 손상 되었습니까? 비 이진 전송을 수행 했습니까? 아니면 로그 읽기 도구가 엉망입니까?
요컨대, 텍스트 읽기 도구는 크로스 플랫폼과 어디에나 있으며, 로그는 오래 지속되기도하며 서둘러 읽을 필요가 있습니다 . 이진 형식을 발명하면 잘 이해되고 사용하기 쉬운 도구로 가득한 세상에서 벗어날 수 있습니다. 필요할 때 심각한 기능 손실.
대부분의 로깅 환경은 타협을합니다. 현재 로그를 읽고 읽을 수 있도록 유지하고 이전 로그를 압축합니다. 즉, 바이너리 형식으로 로그 메시지가 줄어들지 않기 때문에 압축의 이점을 얻을 수 있습니다. 동시에 덜 사용 하고 grep 등을 사용할 수 있습니다 .
그렇다면 바이너리를 사용하면 어떤 이점이 있습니까? 소량의 공간 효율성-점점 더 중요하지 않습니다. 글이 적거나 적습니까? 글쎄, 실제로-쓰기 수는 디스크 커밋 수와 관련이 있으므로 로그 라인이 디스크 블록 크기보다 훨씬 작 으면 SSD는 계속해서 새로운 블록을 할당합니다. 따라서 바이너리는 다음과 같은 경우에 적합한 선택입니다.
- 방대한 양의 구조화 된 데이터를 쓰고 있습니다
- 로그는 특히 빠르게 만들어야합니다
- "지원 조건"에서 분석 할 필요가 없습니다.
그러나 이것은 응용 프로그램 로깅처럼 들리지 않습니다. 이들은 출력 파일 또는 활동 레코드입니다. 그것들을 파일에 넣는 것은 아마도 데이터베이스에 파일을 쓰는 것에서 한 걸음 떨어져있을 것입니다.
편집하다
여기서는 "프로그램 로그"(로깅 프레임 워크 별)와 "레코드"(액세스 로그, 로그인 레코드 등) 사이에 일반적인 혼동이 있다고 생각합니다. 나는 그 질문이 후자와 가장 밀접하게 관련되어 있다고 생각하며,이 경우 문제는 잘 정의되어 있지 않다. 메시지 레코드 또는 활동 로그는 컴팩트 한 형식이어야합니다. 특히 문제 해결이 아니라 잘 정의되고 분석에 사용될 수 있기 때문입니다. 이를 수행하는 도구로 tcpdump
는 Unix 시스템 모니터가 sar
있습니다. 반면에 프로그램 로그는 훨씬 임시적인 경향이 있습니다.