인쇄 자세는 문제 해결에 매우 실용적, 더 편리한, 자바 프로젝트에서 오류 로그를 해결!

프로그램의 주요 목표에서 비트 오류 로그는 중요한 단서 더 나은 문제 해결을위한 지침을 제공하고 문제를 해결하는 것입니다. 그러나 실제로 연주하는 것은 오류가 다양한 내용과 형식 로그, 오류, 불완전 어떤 배경이 될 수 없다, 그 의미를 알 수없는 문제를 해결하기 위해 조사를 만드는 것은 매우 불편하거나 시간이 많이 걸리는 작업을하게된다.

사실, 조심스럽게 약간의 프로그래밍 시간이 있다면, 그것은 문제를 해결하기 위해 낭비되는 많은 노력을 줄일 수 있습니다. 오류가 생성되는 방식을 이해하기위한 효과적인 오류 로그를 작성하는 방법을 설명, 그것은 매우 중요합니다.

확인하는 방법 오류

현재 시스템의 경우, 오류가 세 곳의 도입에 의해 생성 :

1. 불법 매개 변수 레벨 시스템을 도입했다.  불법 매개 변수 오류의 도입의 경우, 오류가 절편을 확인하고 매개 변수의 전제 조건을 확인 할 수 있습니다;

생성 된 기본 시스템 오류 2. 인터랙트.  그리고 기본 상호 작용에 의해 생성 된 오류는 두 가지가 있습니다 :

. 하부 시스템 프로세스는 성공적이지만, 통신 오류, 이는 서브 시스템 사이의 데이터 불일치가 발생할 것이다;

이 경우, 타임 아웃이 사용될 보상기구 이전에 후속 데이터 수정을 통해 예약 된 작업에 의해 기록 된 작업이 될 수있다.

무엇보다 디자인, 당신은 메시지를 남길 수 있습니다.

B. 성공적인 통신하지만 낮은 에러 처리.

이 경우, 기본 필요가 개발자와 통신 서브 시스템 간의 상호 작용을 조정하는;

적절한 치료 요구는 합리적인 메시지 또는 오류 코드와 오류 설명 낮은 수익을 제공 할 수 있습니다.

각각의 경우에, 우리는 가정해야하는 일반, 좋은 디자인 고려 사항 오류의 기본 시스템의 신뢰성.

3 층 시스템 처리 오류.

이 레이어 시스템 오류 발생 :

한 가지 이유 :  과실.  과실은 프로그래머에 완전히 같은 오류를 방지 할 수있는 능력을 의미하지만, 실제로 그것을하지 않았다. 노크 될 & && 것 같은 = == 노킹되고, 에러 경계 복합 에러 판정 논리. 앉아서 프로그램을 쓰는 동안 과실 또는 프로그래머, 초과 근무 밤, 피로의 상태로, 집중력 부족, 서둘러 하나가 계정으로 프로그램의 안정성 등을 고려하지, 기능을 실현하기 위해.

개선 : 문제를 효과적으로 방지 할 수 단위 테스트함으로써 정적 코드 분석 도구, 라인 적용을 사용한다.

두 가지 이유 :  오류 및 예외 처리에 의한 철저한 충분합니다.   예를 들어, 입력 문제. 오버 플로우를 계산 고려뿐만 아니라 불법 입력의 경우를 고려하는 것이 아니라, 두 개의 숫자를 계산합니다. 전자의 경우, 아마도 이해, 경험이나 실수를 방지 할 수 있고, 후자를 들어,이 같은 잘못된 입력을 필터링하는 정규 표현식을 사용하는 것과, 제어 할 수있는 우리의 지능의 범위 내에 있도록 제한해야합니다. 정규 표현식을 테스트해야합니다. 불법 입력의 경우, 가능한 한하는 이해하기 쉽게, 설명 친화적 인 메시지, 원인을 제공하고 솔루션을 추천합니다.

개선 : 신중 같은 다양한 오류 조건과 예외를 고려한다.  가능한 오류 및 예외, 합리적인 반환 오류 코드와 오류 설명의 다양한 신중 조사 : 주요 흐름, 추가 단계의 실현 후. 각 인터페이스 모듈은 유효 또는 인해 복잡한 상호 작용 시나리오에 효율적으로 발생하는 버그를 방지 할 수 있습니다 자신의 오류와 예외를 처리합니다.

예를 들어, 비즈니스 유스 케이스 시나리오는 ABC의 상호 작용에 의해 수행. AB는 실제 실행은 반환 B A 롤백에 따라, 그리고 롤백 합리적인 코드 메시지에 대한 메시지 반환에 따라 적절한 코드 C를 반환하는 C, 다음 B와의 필요성을 실패, 성공 및 클라이언트에 반환 합리적인 코드 및 메시지. 이 세그먼트 롤백 메커니즘이 롤백 예외가 고려되어야한다 각 장면에 필요하다.

세 가지 이유 :  논리 밀접하게 결합 리드.  비즈니스 로직이 밀접하게 결합으로 소프트웨어 제품의 단계 개발로 단계, 논리 관계의 모든 종류의 예측할 수없는 문제 원인, 글로벌 범위를 수정하는 지역의 영향력 확산에 선도, 글로벌 상황을보고, 어려운 복잡하고 있습니다.

개선 : 짧은 기능 짧은 기록 방법, 또는 각 기능에있어서, 바람직하게는 50 개 라인.  비 저장 쓰기 기능 및 방법, 읽기 전용 글로벌 상태 및 출력이 항상 같은 결과를위한 전제 조건, 외부 상태에 의존하지 않는 그들의 동작을 변경, 인터페이스 및 로직 부분의 구조의 합리적인 정의를 그래서 그 사이의 인터페이스 가능한 상호 직교 낮은 결합 연속 리모델링, 모듈화를 유지하고 느슨하게 결합 된 애플리케이션 정렬 로직 의존성, 서비스 계층 인터페이스 직교 가능한 간단한로 제공한다.

서비스 인터페이스의 다수가 서로 영향을 미치는 경우, 비즈니스 로직의 프로세스 전체 최적화, 인터페이스 및 상호 의존성을 준비해야 엔티티 많은 수의 상태뿐만 아니라 상태를 마무리, 서비스 인터페이스 사이의 적절한 전환을 제압해야합니다 관계.

네 가지 이유 :  알고리즘이 정확한 원인이 아니다.

개선 첫째, 알고리즘은 애플리케이션으로부터 분리된다.  다중 알고리즘이 구현되는 경우, 이러한 연산을 분류로서 교차 검증 유닛을 시험해 의해 발견 될 수 있으며, 알고리즘의 가역 특성은 암호화 및 암호 해독 연산 등 가역적 유닛 테스트를 확인하여 알 수있는 경우.

5 가지 이유 :  주문 오류에 전달 된 매개 변수의 동일한 유형.  예를 들어, modifyFlow (INT의 RX, TX는 INT ), 실제 통화가 modifyFlow이다 (TX, RX)

개선 : 콘크리트의 가능한 유형만큼.  매개 변수와 같은 오프셋 타입; 부동 소수점과 부동 소수점 숫자, 문자열 문자열, 객체의 특정 개체 유형의 특정 유형을 사용하는 위의 캔이 충족되지 않을 경우,이 확인 될 필요가있는 인터페이스를 테스트하여 인터페이스 파라미터 값이 달라야한다.

여섯 가지 이유 :  널 포인터 예외입니다.  널 포인터 예외는 일반적으로 개체가 제대로 초기화되지 않았거나 어떤 객체는 객체를 사용하기 전에 테스트 할 비어 있지 않습니다.

개선 :  성공적으로 초기화 된 경우 구성 객체의 경우, 감지,  일반 객체에 대해, 비어 여부를 감지하기 위해 사용하기 전에 엔티티 객체를 인수했다.

세븐 이유 :  네트워크 통신 오류가 발생했습니다.  네트워크 지연, 방해 또는 장벽이 발생하기 때문에 일반적으로 잘못된 네트워크 통신 오류가 발생했습니다. 네트워크 통신 에러는 일반적으로 작은 확률 이벤트이지만 작은 확률 이벤트 가능성이 큰 영역에 장애가 발생하는 것, 상기 버그를 재현하는 것이 곤란하다.

개선 :  INFO 로그를 재생 후 서브 시스템 및 서브 시스템 진입 점 각각의 프론트 엔드 포인트.  둘 사이의 시간 차이에 의해 단서를 제공합니다.

그 이유 팔 :  트랜잭션과 동시성 오류.  트랜잭션과 함께 동시, 그것을 찾을 매우 어려운 오류가 발생하는 경향이다.

개선 :  공유 변수와 중요한 상태 변경을 포함하는 동시 작업에서 프로그램의 경우, 및 인상에 정보 로그.

보다 효과적인 방법이있는 경우, 환영 메시지는 말했다.

그 이유 나인 :  구성 오류.

개선 :  응용 프로그램을 시작하거나 적절한 구성을 시작할 때, 모든 형상 항목이 발견, 모든 구성이 성공적으로로드되는 것을 보장하기 위하여 적절한 정보 로그를 인쇄 할 수 있습니다.

이유 열 :  비즈니스 익숙하지 않은 오류입니다.  대형 시스템에서, 비즈니스 로직 및 비즈니스 상호 작용의 일부가 더 복잡, 전체 비즈니스 로직은 학생들의 여러 두뇌 발달에 존재할 수있는, 모두의 이해는 완전하지 않습니다. 이것은 쉽게 사업 코딩 오류가 발생할 수 있습니다.

개선 :  토론과 의사 소통 이상으로는 비즈니스 로직의 사용 사례를 작성하는 사업에 따라 오른쪽 비즈니스 유스 케이스를 설계하고 구현,  궁극적 인 비즈니스 로직 및 비즈니스 사용 사례가 완료 보관해야하며 전제 조건이 서비스 인터페이스에서 서비스를 나타냅니다, 후면 체크섬 로직을 처리하고,주의 사항, 코드 검토, 트래픽 변화가 동 기적으로 서비스 설명을 업데이트 할 필요가있을 때. 비즈니스 노트는 중요한 비즈니스 문서 인터페이스는, 사업이 캐시를 이해하는 데 중요한 역할을합니다.

이유 XI :  설계 문제로 인한 오류.  예를 들어, 성능 동기식 시리얼 방식으로, 느린 응답의 문제가 될 것입니다, 비동기 및 동시 성능, 느린 응답의 문제를 해결할 수 있지만, 위험의 정도를 보안을 가져올 것이다. 비동기 프로그래밍 모델은 변경 될 새로운 것을 추가 등 비동기 메시지 푸시 등을받을 수 있습니다. 우리는 성능 향상을 위해 캐싱을 사용할 수 있지만 것이다 문제 캐시 업데이트가 있습니다.

개선 :  작성 및 설계 문서의주의 깊은 검토.  그 변화를 확인하기 위해, 테스트 및 수용을 통과, 설계 문서는 전체 디자인 아이디어, 자세한 프로그램, 장점과 단점 가능한 영향을 예견 프로그램에 영향을 미칠 수있는 비즈니스 성과 지표를 달성하기 위해, 배경은, 요구, 비즈니스 목표를 충족 정교해야한다 디자인은 충족 비즈니스 목표 및 비즈니스 성과 측정을 수행합니다.

이유 12 :  오류가 알 수없는 세부 사항에 의해 발생.  이러한 버퍼 오버 플로우, SQL 인젝션 공격 등. 보기의 기능적인 관점에서이 문제가되지 않습니다,하지만보기의 악성 포인트의 사용은 취약하다. 새 필드 개체 구문 분석 오류가 발생할 수 있습니다 때 또 다른 예는, 기본적으로, 잭슨 라이브러리 JSON 문자열 구문 분석을 선택합니다. @JsonIgnoreProperties를 추가해야합니다 (ignoreUnknown는 = TRUE) 응답에 주석 개체에 적절하게 변경합니다. 다른을 선택하면 JSON 라이브러리는이 문제가되지 않습니다.

개선 :  경험을 통해 한 손으로, 다른 한편으로는, 보안 문제와 예외를 고려은 엄격하게 테스트 라이브러리를 성숙 선택합니다.

열세 이유 :  버그 시간이 지남에 따라 발생합니다.  지난 나타납니다 일부 솔루션은 아주 좋은 것은 아니지만 어색하거나 현재 또는 미래의 시나리오도 쓸모가 될 수 있습니다, 그것은 일반적인 일이다. 과거가 완벽하게 고려 될 수있다 이러한 암호화 및 복호화 알고리즘으로, 우리는 휴식 후주의해야합니다.

개선 :  변경 및 버그 수정 뉴스, 날짜 코드, 라이브러리, 행동의시기 적절한 교정에 지불 관심을.

이유 14 :  하드웨어 관련 오류.  이러한 메모리 누수와 같은 저장 공간의 부족, OutOfMemoryError가 등등.

개선 :  증가 응용 프로그램 성능 시스템을 모니터링하여 CPU / 메모리 / 네트워크의 중요한 지표입니다.

시스템에서 발생하는 일반적인 오류 :

  • 법인은 법인이나 단체의 식별자를 지정해야합니다 존재하지 않는 데이터베이스에 기록합니다

  • 엔티티는 적절한 구성해야 무엇을하는 구성 문제를 지정해야 제대로 구성되어 있지 않습니다;

  • 물리적 자원, 당신은 현재의 자원이 필요합니다, 어떤 자원이 무엇인지 지정해야합니다 기준을 충족하지 않는다;

  • 법인 운영의 전제 조건은 현재 상태 무엇 충족 할 필요를 지정해야합니다 어떤 전제 조건이 충족되지 않습니다

  • 엔티티 세트의 교정 동작이 만족되지 않은 후, 만족해야하는 항목 나타내야 후방 검사는 현재 어떤 상태이고;

  • 성능 문제는 성능 문제의 원인을 표시해야합니다, 시간 제한을 유발하는 방법을 최적화에 대한 후속;

  • 쌍방향 커뮤니케이션 여러 서브 시스템 간의 일치하지 않는 데이터에 오류 상태 나 결과는?

일반적으로 어려운 오류가 상대적으로 낮은 수준의 장소에서 발생하는 찾습니다. 특정 비즈니스 시나리오를 예측할 수없는 기본 때문에, 주어진 오류 메시지가 상대적으로 일반적이다.

이 위 사업에 가능한 한 다양한 단서를 제공해야합니다. 잘못된는 레이어 스택 원인에 대한 사전 조건을 충족하지 않는 상호 작용 또는 여러 시스템의 특정 수준입니다. 프로그래밍 할 때, 스택의 각 계층은 비즈니스 계층이 차단 된 모든 전제 조건이 가능한 오류만큼, 바닥에 전달 된 잘못된 매개 변수를 피하기 위해 최대한 충족되도록주의해야합니다.

대부분의 오류는 여러 가지 이유를 생산하기 위해 결합된다.  그러나 모든 오류는 원인이 있어야합니다.  오류가 발생한 방법의 오류에 대한 심층적 인 분석을 해결하는 방법과 후 재발을 방지 할 수 있습니다.  노력은하지만, 성공할 수 : 진행 상황을 반영하기 위해!

어떻게 문제 해결을 쉽게 오류 로그를 작성하는

비트 오류 로그 기본 원칙 :

  1. 가능한 한 완전한으로.  오류 로그의 각각에 대한 자세한 설명은 다음과 같습니다 무엇을 어떤 시나리오에서 잘못된 것은 이유 (또는 무엇 가능한 이유), 어떻게 해결 (또는 해결 팁)하는 것입니다;

  2. 가능한 한 구체적으로.  예를 들어, NC 부적절한 자원, 특히 어떤 자원을 말한다 무엇 부족, 프로그램을 통해 직접 표시 할 수 있습니다, 현장에서 무슨 일이 있었는지 표시하는 등의 VM NOT에 존재하는 일반적인 오류는, 후속 통계의 작업을 용이하게 할 수있다.

  3. 직접 가능한 한.  첫 번째 본능이 어떻게 해결보다는 진짜 이유를 찾기 위해 여러 단계를 거쳐야하는 원인이 무엇인지 알고있다에 오류 로그는 최고의 인재해야합니다.

  4. 경험은 시스템에 직접 통합되었습니다.  모든 문제를 해결하고 시스템에 통합 가능한 한 쉬운 방법으로 경험을 가지고, 새로운 직원과 더 좋은 팁이 아닌 다른 곳에서 매장되었다.

  5. 레이아웃 표준화 된 형식으로 통합, 깨끗하고 정돈해야한다.  고밀도, 에세이 스타일 로그 걱정, 매우 불친절, 쉽지으로 문제 해결에 보였다.

  6. 복수 키워드를 사용하여 고유 한 식별 요청 , 키워드는 강조 : 시간, 개체 식별 (예 : VmName), 동작 이름을.

기본 단계는 문제를 해결하는 방법 :

응용 프로그램 서버에 로그온 -> 열기 로그 파일 -> 오류 로그 위치에 대한 탐색은 -> 문제를 해결하는 지침 단서 오류 로그에 따라 문제를 식별하고 문제를 해결.

장소 :

  1. 착륙에서 로그 파일을 엽니 다.  하나 개 이상의 응용 프로그램 서버에 있기 때문에이 편리하지 볼 하나 하나를 가기로 로그온합니다. 필요는 AG의 모든 서버 로그를 직접 AG보기에 도구를 작성하거나 심지어 직접 필요한 오류 로그를 심사합니다.

  2. 오류 로그의 위치를 찾습니다.  현재 쉬운 오류 로그로 이동, 조밀 한 배치를 기록합니다. 일반적으로 첫 번째 장소의 전면 근처의 오류 로그의 위치를 "시간"으로 사용할 수 있으며, 다음 엔티티 키워드 / 이름 조합 잠금 작업을 사용하여 위치를 오류 로그. 전통에 맞춰 더 있지만 오류 로그 RequestID가를 찾을 수 있지만, 처음 RequestID가를 발견하고 관련된 발명은 설명하지 않습니다. 그것은 바로 시간 / 내용 키워드를 기반으로 오류 로그의 위치를 찾을하는 것이 가장 좋습니다.

  3. 오류 로그를 분석합니다.  오류 로그의 내용은 더 간단하기 위해 최선이며, 문제는 명확하게 현재 조사의 특성을 확인 하였다 일관성이 중요한 단서를 제공하는 것입니다.

을 가지고, 당신은 코드 상황을두고 일단,이라고 정확히 알고 어렵다, 일반적으로, 문제의 응용 프로그램 오류 로그, 로그 내용이 현재 코드에 대한 컨텍스트를 이해하는 것입니다 간단 보이지만, 항상 쓰기 불완전, 반 영어 형식은 사람들에 대해 또는 로그의 의미는 말한다 무엇인지 이해하기 위해 코드를보고 생각합니다. 이것은 자신의 죄에 아닌가요?

예를 들면 :

if ((storageType == StorageType.dfs1 || storageType == StorageType.dfs2)
                && (zone.hasStorageType(StorageType.io3) || zone.hasStorageType(StorageType.io4))) {
// 进入dfs1 和dfs2 在io3 io4 存储。
} else {
      log.info("zone storage type not support, zone: " + zone.getZoneId() + ", storageType: "
+ storageType.name());
      thrownew BizException(DeviceErrorCode.ZONE_STORAGE_TYPE_NOT_SUPPORT);
}

영역은 저장 유형이 올바른지 무엇?하지 않음하자 내 생각 지원!

오류 로그가 수행해야합니다  심지어 맥락에서 코드를 떠나, 분명 무슨 일이 있었는지 설명 할 수 있습니다.

또한, 당신은 더 많은 에너지를 절약 할 수 있습니다 검사를 수행 할 로그인 오류 로그에 직접적으로 명확하게 이유를 설명 할 수있는 경우. 어떤 의미에서, 오류 로그는 매우 유용한 문서, 사용 사례의 잘못된 연산의 모든 종류의 기록이 될 수 있습니다.

현재 오류 로그의 내용은 다음과 같은 문제가있을 수 있습니다 :

1. 오류 로그는 오류 매개 변수 및 콘텐츠를 표시하지 않습니다

catch(Exception ex){
      log.error("control ip insert failed", ex);
      returnnew ResultSet<AddControlIpResponse>(
ControlIpErrorCode.ERROR_CONTROL_IP_INSERT_FAILURE);
}

그것은 실패 IP 제어의 삽입을 지정하지 않았습니다. 우리가 제어 IP 키워드, 검색 및 잠금 오류가 쉽게 추가 할 경우.

비슷한 있습니다 :

log.error("Get some errors when insert subnet and its IPs into database. Add subnet or IP failure.", e);

그것은 어떤에서 IP 서브넷 가치가 뭔가 추가 할을 식별 할 것을 지적하는을 약간 성능에 영향을 미칠 수 지정하지 않았습니다. 이 시간의 트레이드 오프 성능과 디버깅.

해결 방법 : 사용 및 String.format ( "ErrorObj에 일부 오류 : % S", errobj) 메소드는 오류 매개 변수 및 콘텐츠를 나타냅니다.

이것은 일반적으로 객체의 toString 메소드의 준비 읽을 수 DO가 필요합니다.

2. 오류 시나리오는 명확하지 않다 :

log.error("nc has exist, nc ip" + request.getIp());

NC는 이미 createNc에서 오류를 발견했습니다. 그러나 사람들은 NC가보고 된 이유에 오류가 있습니다 추측, 현장에 오류 로그를 지정하지 않았습니다.

변경 가능

log.error("nc has exist when want to create nc, please check nc parameters. Given nc ip: " + request.getIp());
log.error("[create nc] nc has exist, please check nc parameters. Given nc ip: " + request.getIp());

비슷한 있습니다 :

log.error("not all vm destroyed, nc id " + request.getNcId());

변화

log.error("[delete nc] some vms [%s] in the nc are not destroyed. nc id: %s", vmNames, request.getNcId());

해결 방법 : 단어와 결합, 또는 인터페이스 [이름]을 추가 할 때 오류 메시지, 이해 알고 오류 로그에서 직접 오류 메시지 장면 전에 오류를 나타냅니다.

[이름], 서비스 플러스 때 단어를 추가 할 수있는 인터페이스의 집행을 알고 일반적으로 수.

3. 내용은 그 의미 명확 불명되지 않습니다 :

if(aliMonitorReporter == null) {
        log.error("aliMonitorReporter is null!");
} else {
       aliMonitorReporter.attach(new ThreadPoolMonitor(namePrefix, asynTaskThreadPool.getThreadPoolExecutor()));
}

읽기 :

log.error("aliMonitorReporter is null, probably not initialized properly, please check configuration in file xxx.");

비슷한 있습니다 :

if (diskWbps == null && diskRbps == null && diskWiops == null    && diskRiops == null) {
      log.error("none of attribute is specified for modifying");
      thrownew BizException(DeviceErrorCode.NO_ATTRIBUTE_FOR_MODIFY);
}

변경

log.error("[modify disk attribute] None of [diskWbps,diskRbps,diskWiops,diskRiops] is specified for disk id:" + diskId);

해결 방법 : 명확는 적절하게 에러 내용을 설명합니다.

4. 문제 해결 가이드의 내용이 명확하지 않다 :

log.error("get gw group ip segment failed. zkPath: " + LockResource.getGwGroupIpSegmnetLockPath(request.getGwGroupId()));

zkPath? 어떻게이 문제를 해결하는 방법? 나는 누구를 가야하나요? 어디보다 구체적인 단서를 찾는 방법은?

해결 방법 : 적절한 배경 지식과 주요 조사 조치를 추가합니다.

이 오류는 구체적이고 상세한 내용되지 않습니다 :

if (!ncResourceService.isNcResourceEnough(ncResourceDO,    vmResourceCondition)) {
      log.error("disk space is not enough at vm's nc, nc id:" + vmDO.getNcId());
      thrownew BizException(ResourceErrorCode.ERROR_RESOURCE_NOT_ENOUGH);
}

정확히 충분한 자원 무엇을하지? 얼마나 현재의 잉여? 얼마나 많은 지금은? 그것은 약간의 성능에 영향을 미칠 수, 뭔가 추가 할을 식별하기 위해, 주목할 만하다. 이 시간의 트레이드 오프 성능과 디버깅.

해결 방법 : 프로그램 또는 특정 위치에 계시 차이 등의 기술을 향상시켜는 수동 정렬을 운영 줄일 수 있습니다.

읽기 6. 반 영어 문장은 함께 작품 전체의 의미를 생각하는 필요성을 이해 명확한 것만으로는 충분하지 않습니다 :

log.warn("cache status conflict, device id "+deviceDO.getId()+" db status "+deviceDO.getStatus() +", nc status "+ status);

읽기 :

log.warn(String.format("[query cache status] device cache status conflicts between regiondb and nc, status of device '%s' in regiondb is %s , but is %s in nc.", deviceDO.getId(), deviceDO.getStatus(), status));

해결 방법 : 변경 자연스럽게 읽을 수있는 영어 문장.

요약하면, 오류 로그 형식이 될 수 있습니다 :

log.error("[接口名或操作名] [Some Error Msg] happens. [params] [Probably Because]. [Probably need to do].");
log.error(String.format("[接口名或操作名] [Some Error Msg] happens. [%s]. [Probably Because]. [Probably need to do].", params));

또는

log.error("[Some Error Msg] happens to 错误参数或内容 when [in some condition]. [Probably Because]. [Probably need to do].");
log.error(String.format("[Some Error Msg] happens to %s when [in some condition]. [Probably Because]. [Probably need to do].", parameters));

. 아마 이유는] 어떤 경우에는 생략 할 수있다 [아마 할 필요] 몇 가지 중요한 장면 및 인터페이스에 최선을 설명합니다.

각 오류 로그는 독립적 인 이유는, 어떠한 조치 또는 단계 채택해야하는지에 의한, 모든 시나리오에서 무엇이 잘못되었는지, 가능한 한 구체적이고 직접적인 지시 완전한있다.

문제 :

1.String.format 성능은 플레이가 로그 영향을 미칠 것인가?

일반적으로, 오류 로그는 상대적으로 작은해야하고, 사용 및 String.format의 주파수가 너무 높을 수 없습니다 및 응용 프로그램 로그에 영향을 미치지 않습니다.

2. 개발 시간은 재량에 시간이 매우 긴장 단어인가?

형식 세트에 대한 표준화 된 컨텐츠 형식으로 콘텐츠를 구축, 당신은 재량의 시간 단어를 저장할 수 있습니다.

3.이 때 정보를 사용하려면, 오류를 경고?

  • 일반 인쇄 프로그램 상태 정보에 대한 정보는 위치 추적을 용이하게하기 위해, 표시한다

  • 약간의 불합리한 시스템이 표시되지만 운영 및 사용에는 영향을 미치지 않습니다 보여 경고;

  • 오류는 일반적으로 대상 운영을 완료 할 수없는 시스템 오류 및 예외를 나타냅니다.

오류 로그는 문제를 해결하는 중요한 수단입니다. 기능을 프로그래밍 할 때 우리는 일반적으로 발생할 수있는 오류의 다양한 고려 - 그 이유를 :

해당 이유를 해결하기 위해, 우리는 키 설명의 일부 원인을 찾을 필요가있다.

이 트리플을 형성 할 것이다 :

증상 -> 오류 키 설명 -> 오류의 궁극적 인 원인.

필요성은 오류의 적절한 원인을 찾기 위해 가능한 한 각 심각한 오류에 대한 적절한 오류에 대한 설명을 제공합니다.

즉, 프로그래밍 시간은 설명을 다음 설명을 로그 오류에 추가하는 것은 매우 오류의 원인을 찾을 도움이, 지금까지의 가능한 인에 대해 신중하게 생각합니다.

게시 50 개 원래 기사 · 원 찬양 1706 · 조회수 2,220,000 +

추천

출처blog.csdn.net/zl1zl2zl3/article/details/105374746