문제

배경: 나는 상속되는 웹 응용 프로그램을 만들 목적으로 on-the-fly 연결이 사이의 로컬 및 원격 장비입니다.엄청난 숫자의 움직이는 부분은 최근:응용 프로그램 자체가 크게 변경되었;개발 툴체인 업데이트되었;모두 로컬과 원격 장비 되었을"수정"을 지원하는 사항을 변경했습니다.

밝은 측면은 그것은 합리적인 로깅하는 시스템이 작성 디버그 메시지를 파일로,그것은 로그를 파일을 두고 실시간으로 사용자 화면입니다.내가 있는 기회를 다시 작업은 전체 로그인/디버깅 메커니즘이 있습니다.

예제:

  • 모든 메시지를 타임 스탬프 접두사가 심각도는 수준입니다.
  • 로그는 대한 고객입니다.그들은 레코드 시스템의 응답은 그/그녀의 요청이 있습니다.
  • 모든 로그를 식별하는 문제한을 제안 솔루션입니다.
  • 디버깅은 개발자 및 기술 지원합니다.들이 공개 시스템 내부.
  • 디버깅을 나타내는 기능 그리고/또는 줄 생성됩니다.
  • 고객이를 조정할 수 있는 디버그 수준에 비행을 설정 표시.

질문: 무엇 최상의 방법이 사용자의 사용으로 개발자,또는 본 소비자를 생성하는 유용한 로그 및 디버깅?


편집: 많은 도움이 되는 지금까지 제안 감사합니다!을 명확히:내가에 더 관심이 what 로그인:콘텐츠 형식 etc..--항과 소집이유를 서면에 적어 이렇게 하기--특정 도구입니다.

그것은 무엇이었에 대한 최고의 로그는 당신이 볼 수있는 것들이 그들을 가장 도움이 되었습니까?

당신의 도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

로깅 프레임 워크로 수행 된 Absolutley의 가장 귀중한 것은 애플리케이션이 고객에게 속하는 컴퓨터에 애플리케이션을 배포 할 때에도 모든 로그를 수집하고 저에게 우편으로 보내는 "1- 클릭"도구입니다.

그리고 응용 프로그램의 주요 경로를 대략적으로 따를 수 있도록 기록해야 할 사항을 잘 선택하십시오.

프레임 워크로서 나는 표준을 사용했습니다 (log4net, log4java, log4c ++)

이미 좋은 상자가있는 경우 자신의 로깅 프레임 워크를 구현하지 마십시오. 바퀴를 재창조하는 대부분의 사람들.

다른 팁

어떤 사람들은 디버거를 사용하지 않고 모든 것을 기록합니다. 그것은 다른 철학이므로, 당신은 당신 자신의 선택을해야합니다. 많은 조언을 찾을 수 있습니다 이것들처럼, 또는 이 하나. 이 조언은 언어 관련이 아닙니다 ...

코딩 공포 남자 갖다 흥미로운 게시물 ~에 대한 로깅 문제 그리고 왜 학대 로깅이 특정 조건에서 시간 낭비가 될 수 있는지.

나는 단순히 로깅이 생산에 남아있을 수있는 것들을 추적하기위한 것이라고 생각합니다. 디버그는 개발을위한 것입니다. 어쩌면 그것은 사물을 보는 너무 간단한 방법 일 수도 있고, 어떤 사람들은 디버깅을 위해 로그를 사용 할 수 없기 때문에 디버깅을 위해 로그를 사용하기 때문일 수 있습니다. 그러나 디버거 모드도 시간 낭비가 될 수 있습니다. 일종의 테스트 케이스처럼 사용할 필요는 없습니다. 기록되지 않았습니다 디버그 세션 후에 사라집니다.

그래서 이것에 대한 나의 의견은 다음과 같습니다.

  • 로그 프레임 워크를 사용하여 개발 및 생산 수준을 통해 개발 및 생산 환경을 통해 필요한 흔적을위한 로깅 (로그 4 가족 도구)
  • 일이 통제 할 수없는 특별한 이상한 경우에 대한 디버깅 모드
  • 테스트 사례는 중요하며 방지 방지 방법으로 사용되는 지옥 미로 디버깅 세션에서 시간을 절약 할 수 있습니다. 대부분의 사람들은 시험 사례를 사용하지 않습니다.

코딩 공포가 말했다 모든 것을 기록하는 경향에 저항합니다. 맞습니다. 그러나 나는 이미 예쁜 방식으로 (그리고 데이터베이스를 통해) 정확히 반대하는 Hudge 앱을 보았습니다 ...

로깅, 추적 및 오류보고를 혼동하지 마십시오. 일부 사람들은 내가 아는 사람들이 원하는 정보를 얻기 위해 로그 파일의 하나의 지옥을 만듭니다.

모든 것을 휘젓고 싶다면 다음과 같이 분리됩니다.

  • 트레이싱 -> 해당 단계의 입력 및 출력 데이터를 사용하여 모든 작업 및 단계를 타임 스탬프로 덤프합니다 (Ugliest and Lost File)
  • 벌채 반출 -> 비즈니스 프로세스 단계 만 기록하고 클라이언트는 문의를 수행하여 문의 기준을 기록하고 데이터를 더 이상 출력하지 않습니다.
  • 오류보고 / 디버깅 -> 예외 예외가 발생한 위치, 타임 스탬프, 입력/출력 데이터, 사용자 정보 등에 대한 자세한 내용

이렇게하면 오류가 발생하고 오류/디버그 로그에 내 취향에 대한 충분한 정보가 포함되어 있지 않으면 언제든지 할 수 있습니다. grep -A 50 -B 50 'timestamp' tracing_file 자세한 내용을 얻으려면.

편집하다:또한 말했듯이 Python 용 내장 로깅 모듈과 같은 표준 패키지를 사용하는 것이 항상 좋습니다. 언어가 표준 라이브러리에있는 언어가 없다면 자신을 굴리는 것은 좋은 생각이 아닙니다. 나는 작은 함수로 로깅을 감싸는 것을 좋아합니다. 1- 추적, 2- 로깅, 4- 디버깅을 통해 7 방울의 값을 모두 3 등으로 보내십시오.

나는 단지 설정의 로깅스가 여러 로그 수준에서 서비스를 쓰고 나는 로깅/감사에 대한 거의 모든 행동과 그것은 할당된 감사 level1-5 높은 수를 더 감사한 이벤트를 얻는다.

  1. 매우 기본적인 기록:시작,중지,그리고 다시 시작
  2. 기본적인 기록:가공 x 파일의 개수 등
  3. 표준 로깅:시작하고 처리,처리,etc.
  4. 고급 로깅:처음과 끝의 모든 단계에서 처리
  5. 모든 것:취한 모든 조치

당신이 설정한 감사를 수준 설정파일에 그래서 그것을 변경할 수 있습니다.

일부 일반적인 규칙 규칙은 서버 측 응용 프로그램에 유용한 것으로 밝혀졌습니다.

  • requestId - 각 들어오는 (HTTP) 요청에 요청 ID를 할당 한 다음 모든 로그 라인에 로그인하여 해당 ID로 나중에 해당 로그를 쉽게 녹음하고 모든 관련 라인을 찾을 수 있습니다. 모든 로그 명령문에 ID를 추가하는 것이 매우 지루하다고 생각되면 적어도 Java Logging Frameworks는 사용으로 투명하게 만들었습니다. 진단 컨텍스트 매핑 (MDC).
  • 객관적인 - 응용 프로그램/서비스가 기본 키가있는 일부 비즈니스 객체를 조작하는 것을 처리하는 경우 진단 컨텍스트에 해당 기본 키를 첨부하는 것이 유용합니다. 나중에 누군가가 "이 개체는 언제 조작 되었습니까?" 당신은 객체에 의해 쉽게 grep하고 해당 객체와 관련된 모든 로그 레코드를 볼 수 있습니다. 이러한 맥락에서 실제로 사용하는 것이 (때로는) 유용합니다. 중첩 진단 컨텍스트 MDC 대신.
  • 언제 로그인할까요? - 최소한 중요한 서비스/구성 요소 경계를 넘을 때마다 기록해야합니다. 이렇게하면 나중에 콜 플로우를 재구성하고 오류를 일으키는 것처럼 보이는 특정 코드베이스로 드릴 다운 할 수 있습니다.

Java 개발자이기 때문에 Java API 및 프레임 워크에 대한 경험도 제공 할 것입니다.

API

사용하는 것이 좋습니다 Java를위한 간단한 벌목 정면 (SLF4J) - 내 경험상, 그것은 로깅에 가장 적합한 외관입니다.

  • 완전한 기능 : 그것을 따르지 않았습니다 최소 공통 분모 접근법 (공통점과 같은); 대신 사용 중입니다 우아하게 저하하십시오 접근하다.
  • 실질적으로 인기있는 모든 Java 로깅 프레임 워크에 대한 어댑터가 있습니다 (예 : LOG4J)
  • 모든 레거시 로깅 API (LOG4J, Commons-Logging)를 SLF4J로 리디렉션하는 방법에 대한 솔루션이 있습니다.

구현SLF4J와 함께 사용하기 가장 좋은 구현은입니다 로그백 - SLF4J API를 만든 같은 사람이 작성했습니다.

Apache에서 사용하는 것과 같은 기존 로깅 형식을 사용하면 형식을 분석하는 데 사용할 수있는 많은 도구를 피기 백으로 만들 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top