나는 안전에 중요한 실시간 시스템으로 작업하고 로깅은 종종 보름달이 될 때마다 53 번째 화요일마다 푸른 달에 한 번 나타나는 희귀 한 버그를 잡을 수있는 유일한 방법입니다. 이런 종류의 주제에 대해 강박 관념을 느끼게되므로 입에서 거품이 나기 시작하면 사과하겠습니다. 다음은 네이티브 코드 디버그 로그 용으로 작성되었지만 대부분 관리되는 세계에도 적용됩니다.
텍스트 로그 파일을 사용하십시오. 명백한 것처럼 보이지만 일부 사람들은 이진 로그 파일을 생성하려고 시도합니다. 현장에있을 때 리더 도구를 찾을 필요가 없기 때문에 바보입니다. 또한 텍스트이고 디버그가 장황한 경우 현장 엔지니어가 파일을 읽고 다시 돌아 오지 않고도 문제를 진단 할 수 있습니다. 모두가 이깁니다.
나는 거의 모든 것을 기록 할 수있는 시스템을 설계하지만 기본적으로 모든 것을 켜지는 않습니다. 디버그 정보는 숨겨진 디버그 대화 상자로 전송되어 타임 스탬프되어 목록 상자에 출력되며 (삭제하기 전에 약 500 줄로 제한됨) 대화 상자에서 정보를 중지하거나 로그 파일에 자동으로 저장하거나 연결된 디버거 이 전환을 통해 여러 응용 프로그램의 디버그 출력을 모두 깔끔하게 직렬화하여 볼 수 있으며 때로는 생명을 구할 수 있습니다. 내가 사용하는 숫자 로깅 수준 (높은 당신이 레벨을 설정은, 더 캡처) 사용 :
off
errors only
basic
detailed
everything
그러나 이것은 너무 융통성이 없습니다-버그로 나아가는 과정에서 많은 양의 이물질을 처리하지 않고도 필요한 것에 정확하게 집중할 수있어 훨씬 더 효율적이며, 특정 종류의 거래 또는 운영 일 수 있습니다 오류가 발생합니다. 만약 모든 것을 켜야한다면, 당신은 자신의 일을 더욱 어렵게 만드는 것입니다. 더 세밀한 것이 필요합니다.
이제 플래그 시스템을 기반으로 로깅으로 전환하는 과정에 있습니다. 기록되는 모든 것은 어떤 종류의 작동을 나타내는 플래그를 가지고 있으며, 기록되는 것을 정의 할 수있는 체크 박스가 있습니다. 일반적으로 해당 목록은 다음과 같습니다.
#define DEBUG_ERROR 1
#define DEBUG_BASIC 2
#define DEBUG_DETAIL 4
#define DEBUG_MSG_BASIC 8
#define DEBUG_MSG_POLL 16
#define DEBUG_MSG_STATUS 32
#define DEBUG_METRICS 64
#define DEBUG_EXCEPTION 128
#define DEBUG_STATE_CHANGE 256
#define DEBUG_DB_READ 512
#define DEBUG_DB_WRITE 1024
#define DEBUG_SQL_TEXT 2048
#define DEBUG_MSG_CONTENTS 4096
이 로깅 시스템은 릴리스 빌드 와 함께 제공 되며 기본적으로 설정되어 파일로 저장됩니다. 평균 6 개월에 한 번만 버그가 발생하고이를 재현 할 방법이 없다면 버그가 발생한 후에 로깅을해야한다는 것을 알기에는 너무 늦었습니다. 디버그 빌드에서만 작동하는 로깅은 간단합니다. 평원. 우둔한.
소프트웨어는 일반적으로 ERROR, BASIC, STATE_CHANGE 및 EXCEPTION이 켜져있는 상태로 제공되지만 디버그 대화 상자 (또는 레지스트리 / ini / cfg 설정이 저장되는 경우)를 통해 필드에서 변경할 수 있습니다.
아 그리고 한 가지-내 디버그 시스템은 하루에 하나의 파일을 생성합니다. 요구 사항이 다를 수 있습니다. 그러나 디버그 코드 는 날짜, 실행중인 코드 버전 및 가능한 경우 고객 ID, 시스템 위치 등을 나타내는 모든 파일을 시작해야합니다 . 현장에서 들어오는 로그 파일을 엉망으로 만들 수 있으며 실제로 데이터 자체에있는 시스템의 위치와 버전을 기록하고 고객을 신뢰할 수없는 기록이 필요합니다. / field engineer는 가지고있는 버전을 알려줍니다. 생각했던 버전을 알려줄 수 있습니다. 더 나쁜 것은 디스크에있는 exe 버전을보고하지만 이전 버전은 교체 후 재부팅을 잊었 기 때문에 여전히 실행 중입니다. 코드 자체를 알려주십시오.
마지막으로, 코드가 자체 문제를 생성하는 것을 원하지 않으므로 타이머 기능을 사용하여 며칠 또는 몇 주 후에 로그 파일을 제거하십시오 (지금 시간과 파일 생성 시간의 차이를 확인하십시오). 이것은 항상 실행되는 서버 응용 프로그램에 적합하며, 시작할 때 이전 데이터를 제거하여 얻을 수있는 클라이언트 응용 프로그램에서 얻을 수 있습니다. 일반적으로 엔지니어가 자주 방문하지 않는 시스템에서는 30 일 정도 후에 제거합니다. 분명히 이것은 로그 파일의 크기에 따라 다릅니다.