자바 디 버 깅

10418 단어 자바
로그 사용
System. out. println () 은 매우 부족 한 점 이 있 습 니 다. 프로그램 디 버 깅 이 끝 난 후에 이 프로그램 을 제품 화 할 때 System. out. println () 의 출력 을 제거 해 야 합 니 다. 이 럴 때 한 줄 한 줄 씩 스 캔 해 야 할 수도 있 습 니 다. 번 거 로 울 수도 있 습 니 다.
log4j 는 기능 이 강하 고 사용 하기 쉬 운 로그 도구 이기 때문에 log4j 는 보조 디 버 깅 외 에 프로그램의 실행 로 그 를 기록 할 수 있 습 니 다.  log4j 는 c, c++, c\#, perl, python 등 을 지원 할 수 있 습 니 다.
1. log4j 다운로드 및 설치
http://logging.apache.org/log4j/다운로드 후 압축 을 풀 면 다음 파일 구 조 를 볼 수 있 습 니 다.
  • examples: 이 폴 더 에는 log4j 의 사용 사례 가 포함 되 어 있 습 니 다.
  • site: 이 폴 더 에는 log4j 공식 사이트 의 관련 페이지 가 포함 되 어 있 습 니 다. log4j 의 API 문서
  • 를 포함 합 니 다.
  • src: 이 폴 더 에는 log4j 의 소스 코드 가 포함 되 어 있 습 니 다.
  • tests: 이 폴 더 에는 log 4 j 의 테스트 사례 가 포함 되 어 있 습 니 다.
  • log4j - 1.2.15. jar: 이 JAR 가방 이 log4j 프로젝트 의 핵심 공구 꾸러미 입 니 다.
  • 기타 잡다 한 문서 들.
  • 가장 쉬 운 방법 은 log4j - 1.2.15. jar 를 시스템 의 CLASSPATH 환경 변수 에 추가 한 후 프로그램 에서 log4j 로그 도 구 를 사용 할 수 있 습 니 다. 또는 log4j - 1.2.15. jar 핵심 라 이브 러 리 를 응용 프로그램의 로 딩 경로 에 추가 할 수 있 습 니 다. 예 를 들 어 WEB 응용 프로그램 은 log4j - 1.2.15. jar 를 WEB - INF/lib 경로 에 추가 하면 됩 니 다.
    2. Logger
    Logger 는 log4j 의 가장 중요 한 구성 요소 로 로그 출력 기 를 대표 합 니 다. 그 기능 은 System. out 과 유사 합 니 다. 즉, 프로그램 에서 Logger 를 통 해 출력 할 수 있 습 니 다. Logger 가 System. out 보다 더 강 한 것 은 일부 디 버 깅 정보의 출력 을 자 유 롭 게 닫 을 수 있 고 다른 사람 이 호출 하 는 데 영향 을 주지 않 습 니 다.
    Logger 가 일부 디 버 깅 정보의 출력 을 닫 고 다른 사람 에 게 영향 을 주지 않도록 로그 에 대해 분류 제 어 를 해 야 합 니 다.  log4j 에서 Logger 의 분 류 는 이름 을 통 해 제 어 됩 니 다. Logger 의 이름 은 org. crazy it. empsys. Manager 와 같은 대소 문 자 를 구분 하 는 문자열 입 니 다.
    프로그램 에서 Logger 를 얻 는 것 은 매우 간단 합 니 다. Logger 는 다음 과 같은 두 가지 정적 방법 을 제공 하여 Logger 대상 을 얻 습 니 다.
  • static Logger getLogger (java. lang. Class clazz): clazz 류 의 클래스 이름 을 Logger 의 이름 으로 Logger 를 만 듭 니 다. 이 방법의 본질은 getLogger (clazz. getName ()
  • 입 니 다.
  • static Logger getLogger (java. lang. String name): name 이라는 Logger 대상 을 만 듭 니 다.
  • 위 에서 설명 한 바 와 같이 Logger 의 이름과 Java 패키지 이름 의 통합 관 계 는 매우 비슷 하 다. 이 점 은 log4j 가 의도 적 으로 설계 한 것 이다. 이런 방식 으로 Logger 간 의 계승 관 계 를 제어 한다. 예 를 들 어 org 라 는 Logger 는 org. crazyit 라 는 조상 이다.
    log4j 는 뿌리 (root) Logger 도 제공 합 니 다. 모든 Logger 의 조상 이 고 뿌리 는 두 가지 특징 을 가지 고 있 습 니 다.
  • 루트 Logger 는 항상 존재 합 니 다
  • 프로그램 은 문자열 이름 으로 루트 를 얻 을 수 없고 Logger 의 정적 방법 getRootLogger 를 통 해 루트 를 얻 을 수 있 습 니 다.
  • 대상 을 얻 은 후 5 가지 방법 으로 출력 을 수행 할 수 있 습 니 다.
  • Public void debug (Object message, [Throwable t]): debug 급 으로 message 정 보 를 출력 하고 t 인자 가 들 어 오 면 t 의 추적 스 택 정 보 를 출력 합 니 다.
  • public void info(Object message, [Throwable t]):
  • public void warn(Object message, [Throwable t]):
  • public void error(Object message, [Throwable t]):
  • public void fatal(Object message, [Throwable t]):

  • 위 에서 알 수 있 듯 이 Logger 가 출력 을 수행 할 때 한 단계 의 문제 와 관련된다. log4j 는 위의 5 가지 방법 에 대응 하 는 5 개의 단 계 를 제공 했다. 그들의 우선 순 위 는 낮은 것 에서 높 은 것 으로 다음 과 같다. DEBUG < INFO < WARN < ERROR < FATAL >
    이 동시에 log4j 는 Logger 의 setLevel (Level level) 방법 으로 자신의 단 계 를 설정 할 수 있 습 니 다. 예 를 들 어 logger. setLevel (level. DEBUG);
    log4j 는 하나의 규칙 을 제정 했다. Logger 의 출력 방법의 등급 이 Logger 자체 의 등급 보다 높 거나 같 을 때 만 이 출력 문 구 는 진정한 출력 을 생 성 할 수 있다. 예 를 들 어 다음 과 같다.
    Logger logger = Logger.getLogger("com.foo");
    logger.setLevel(Level.INFO);//Logger 자체 의 우선 순위 INFO 설정
    logger.warn("www.crazyit.org");//이 출력 문 구 는 출력 을 생 성 합 니 다. WARN > INFO 때 문 입 니 다.
    logger.debug("www.cryzit.org");//이 출력 문 구 는 출력 되 지 않 습 니 다. DEBUG < INFO
    Logger 를 사용 하여 디 버 깅 정 보 를 출력 하 는 데 3 단계 만 있 으 면,
    1) Logger 의 getLogger () 정적 방법 으로 Logger 대상 을 되 돌려 줍 니 다.
    2) setLevel () 방법 으로 Logger 의 단 계 를 설정 합 니 다.
    3) Logger 의 debug (), info (), warn (), error (), fatal () 방법 으로 정 보 를 출력 합 니 다.
    만약 프로그램 이 매번 세 단 계 를 통 해 출력 을 실행 해 야 한다 면, log4j 는 System. out 보다 조금 유연 할 뿐, 프로그램 이 디 버 깅 출력 을 닫 아야 할 때, 그것들 에 대응 하 는 Logger 의 level 를 더 높 게 설정 하면 된다. 그러나 이것 도 좋 지 않다.
    이 를 위해 log4j 는 프로그램 이 어떤 Logger 에 level 을 표시 하지 않 으 면 가장 가 까 운 조상 level 을 계승 하 는 규칙 을 만 들 었 습 니 다.
    프로그램 은 모든 Logger 에 level 을 표시 할 필요 가 없습니다. Logger 의 정보 출력 을 제어 하려 면 이 Logger 의 최상 위 Logger level 을 제어 하면 됩 니 다.
    각 클래스 의 Logger 를 편리 하 게 제어 하기 위해 서 는 현재 클래스 의 클래스 와 같은 이름 으로 설정 하 는 습관 이 있 습 니 다. 예 를 들 어 Logger log = Logger. getLogger (EmpManager. class);
    만약 EmpManager 클래스 가 org. crazyit. salary. service 패키지 에 있다 면 이 Logger 의 이름 은 org. crazyit. salary. service. EmpManager 입 니 다.
    3. Appender 와 Layout
    log4j 는 콘 솔, 파일, GUI 구성 요소, 원 격 Socket 서버 등 다양한 장치 에 로 그 를 출력 할 수 있 으 며, 로 그 를 여러 출력 장치 에 출력 할 수 있 습 니 다.
    로그 정보의 출력 목적 을 나타 내 는 Appender 를 사용 합 니 다.
    콘 솔 Appender: 콘 솔 로 출력
    Daily Rolling FileAppender: 파일 에 출력 된 Appender. 등등 이 많 습 니 다.
    Logger 는 지정 한 Appender 를 Logger 와 연결 하 는 addAppender () 방법 을 제공 합 니 다. 기본 적 인 상황 에서 모든 Logger 와 연 결 된 Appender 는 모든 조상 Logger 와 연 결 된 Logger 와 자신 이 연 결 된 Appender 의 합계 입 니 다.
    Layout 는 출력 스타일 을 말 합 니 다.
    HTML 레이아웃: 로그 출력 을 HTML 형식의 레이아웃 으로 제어 합 니 다.
    XMLlayout, PatternLayout (문자열), SimpleLayout (간단 한 로그 정보)
    4. log4j 출력 사용
    실제 개발 에서 log4j 를 사용 할 때 자바 코드 에서 Logger, Appender, Layout 를 정의 하지 않 고 보통 설정 파일 로 관리 합 니 다. log4j 는 다음 과 같은 두 가지 형식의 설정 파일 을 허용 합 니 다.
    Properties 속성 파일 형식의 프로필 입 니 다. 보통 파일 이름 은 log4j. properties 입 니 다.
    xml 형식의 프로필 입 니 다. 보통 파일 이름 은 log4j. xml 입 니 다.
    그런 파일 을 사용 하 더 라 도 설정 하 는 방법 은 같 습 니 다. 아래 세 부분 을 설정 합 니 다.
    출력 을 제어 하기 위해 하나 이상 의 Logger 를 설정 합 니 다.
    하나 이상 의 Appender, Appender 대표 로그 의 출력 장 치 를 설정 해 야 합 니 다. Appender 를 설정 할 때 사용 할 Layout 를 설정 해 야 합 니 다.
    Logger 를 하나 이상 의 Appender 와 연결 합 니 다.
    예: log4j. xml
    <?xml version="1.0" encoding="gdk" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        <!--           Appender -->
        <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
            <!--     Appender     Layout -->
            <Layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern"
                            value="===CRAZYIT.ORG=== %r %d [%t] %-p %c %x - #%l# - %m%n"/>
            </layout>
        </appender>
    <!--  logger   lee            Logger     -->
    <logger name="lee">
        <!--    debug          -->
        <level value=“debug”/>
        <!--           -->
        <appender-ref ref="stdout"/>
    </logger>
    <!--       ,      Appender -->
    <root>
        <!--    info           -->
        <level value="info"/>
        <appender-ref ref="stdout"/>
    </root>
    </log4j:configuration>

    그리고 프로그램 에서 logger. debug 를 직접 사용 할 수 있 습 니 다.
    기타 방법
    1. 컴 파 일 러 를 이용 한 알림 정보
    2. 추적 프로그램의 실행 절차
    3. 인 터 럽 트 디 버 깅 (IDE 제공, 예 를 들 어 eclipse)
    4. 격 리 디 버 깅 (일부 코드 주석 제거)
    5. 디 버 깅 의 기본 사고방식 (세그먼트 디 버 깅)
     

    좋은 웹페이지 즐겨찾기