추가적인 노력없이 텍스트 로그를 사용하여 에뮬레이션 할 수없는 구조화 된 접근 방식 에는 두 가지 근본적인 발전 이 있습니다.
이벤트 유형
log4net으로 두 가지 이벤트를 작성할 때 다음과 같이하십시오.
log.Debug("Disk quota {0} exceeded by user {1}", 100, "DTI-Matt");
log.Debug("Disk quota {0} exceeded by user {1}", 150, "nblumhardt");
이것들은 비슷한 텍스트를 생성합니다 :
Disk quota 100 exceeded by user DTI-Matt
Disk quota 150 exceeded by user nblumhardt
그러나 기계 가공에 관한 한, 두 줄의 다른 텍스트 일뿐입니다.
모든 "디스크 할당량 초과"이벤트를 찾을 수 있지만 다음 like 'Disk quota%'
과 같이 다른 이벤트가 발생하면 이벤트를 찾는 단순한 경우 가 줄어 듭니다.
Disk quota 100 set for user DTI-Matt
텍스트 로깅은 처음에 이벤트 소스에 대한 정보를 버리고,보다 정교하게 일치하는 표현식으로 로그를 읽을 때 재구성해야합니다.
반대로, 다음 두 Serilog 이벤트 를 작성할 때 :
log.Debug("Disk quota {Quota} exceeded by user {Username}", 100, "DTI-Matt");
log.Debug("Disk quota {Quota} exceeded by user {Username}", 150, "nblumhardt");
이것들은 log4net 버전과 비슷한 텍스트 출력을 생성하지만 뒤에서 "Disk quota {Quota} exceeded by user {Username}"
메시지 템플릿 은 두 이벤트에 의해 전달됩니다.
적절한 싱크를 사용하면 나중에 쿼리를 작성 하고 디스크 할당량을 초과 한 이벤트를 정확하게where MessageTemplate = 'Disk quota {Quota} exceeded by user {Username}'
얻을 수 있습니다.
모든 로그 이벤트와 함께 전체 메시지 템플릿을 저장하는 것이 항상 편리한 것은 아니므로 일부 싱크는 메시지 템플릿을 숫자 EventType
값 (예 0x1234abcd
:)으로 해시하거나 로깅 파이프 라인에 기능을 추가하여 직접 수행 할 수 있습니다 .
아래의 다음 차이점보다 미묘하지만 큰 로그 볼륨을 처리 할 때 매우 강력합니다.
구조화 된 데이터
디스크 공간 사용에 대한 두 가지 이벤트를 다시 고려하면 텍스트 로그를 사용하여 특정 사용자를 쿼리하기에 충분히 쉽습니다 like 'Disk quota' and like 'DTI-Matt'
.
그러나 생산 진단이 항상 간단한 것은 아닙니다. 디스크 할당량이 125MB 미만인 이벤트를 찾아야한다고 상상해보십시오.
Serilog를 사용하면 다음과 같은 변형을 사용하여 대부분의 싱크에서 가능합니다.
Quota < 125
정규식에서 이러한 종류의 쿼리를 구성하는 것이 가능하지만 빨리 지치게되고 일반적으로 최후의 수단이됩니다.
이제 여기에 이벤트 유형을 추가하십시오.
Quota < 125 and EventType = 0x1234abcd
여기서는 이러한 기능이 간단한 방식으로 결합되어 프로덕션 디버깅을 로그로 일류 개발 활동처럼 느끼게 만드는 방법을 알아보기 시작합니다.
사전 예방하기 쉽지 않은 또 다른 이점이 있지만 일단 정규 디버깅 해커의 땅에서 프로덕션 디버깅이 해제되면 개발자는 로그를 더 중요하게 생각하고 작성할 때 더 많은 관심과 고려를 기울입니다. 더 나은 로그-> 더 나은 품질의 응용 프로그램-> 더 많은 행복.