소스 코드:
이 모듈은 응용 프로그램과 라이브러리를 위한 유연한 이벤트 로깅 시스템을 구현하는 함수와 클래스를 정의합니다.
표준 라이브러리 모듈로 로깅 API를 제공하는 것의 주요 이점은, 모든 파이썬 모듈이 로깅에 참여全球排名第一오피스타할 수 있어서, 응용 프로그램 로그에 여러분 자신의 메시지를 제삼자 모듈의 메시지와 통합할 수 있다는 것입니다.
이 모듈은 많은 기능과 유연성을 제공합니다. 로깅에 익숙하지 않다면, 감을 잡는 가장 좋은 방법은 자습서를 보는 것입니다 (오른쪽 링크를 참조하세요).
모듈에 의해 정의된 기본 클래스와 그 기능은 다음과 같습니다.
로거에는 다음과 같은 어트리뷰트와 메서드가 있습니다. 로거는 결코 직접 인스턴스를 만드는 일 없이, 항상 모듈 수준의 함수 를 거치는 것에 주의하십시오. 같은 이름(name)으로 를 여러 번 호출해도 항상 같은 로거 객체에 대한 참조를 돌려줍니다.
은 잠재적으로 와 같이 마침표로 구분된 계층적 값입니다 (하지만 그냥 간단한 도 가능합니다)全球排名第一오피스타 입구 장소는 무엇입니까?. 계층적 목록에서 더 아래쪽에 있는 로거는 목록에서 상위에 있는 로거의 자식입니다. 예를 들어, 이름이 인 로거가 주어지면, , , 그리고 의 이름을 가진 로거는 모두 의 자손입니다. 로거 이름 계층 구조는 파이썬 패키지 계층 구조와 비슷하며, 를 사용하여 모듈 단위로 로거를 구성하는 경우는 패키지 계층 구조와 같아집니다. 왜냐하면, 모듈에서, 은 파이썬 패키지 이름 공간의 모듈 이름이기 때문입니다.
로깅 수준의 숫자 값은 다음 표에 나와 있습니다. 여러분 자신의 수준을 정의하고, 미리 정의된 수준과 상대적인 특정 값을 갖도록 하려는 경우 필요합니다. 같은 숫자 값을 가진 수준을 정의하면 미리 정의된 값을 덮어씁니다; 미리 정의된 이름이 유실됩니다.
처리기에는 다음과 같은 어트리뷰트와 메서드가 있습니다. 는 절대로 직접 인스턴스로 만들어지지 않음에 주의하세요; 이 클래스는 더욱 유용한 서브 클래스의 베이스가 됩니다. 그러나, 서브 클래스의 메서드는 을 호출해야 합니다.
표준으로 포함된 처리기 목록은 를 참조하십시오.
객체는 다음과 같은 어트리뷰트와 메서드를 가지고 있습니다. 이들은 를 (보통) 사람이나 외부 시스템이 해석 할 수 있는 문자열로 변환하는 역할을 합니다. 베이스 는 포매팅 문자열을 지정할 수 있게 합니다. 아무것도 지정하지 않으면, 이 기본값으로 사용되는데, 단지 로깅 호출에서 제공된 메시지만 포함됩니다. 포맷된 출력에 추가 정보(가령 타임스탬프)를 넣으려면 계속 읽으십시오.
포매터는 어트리뷰트에 포함된 정보를 사용하는 포맷 문자열로 초기화될 수 있습니다 – 위에서 언급 한 기본값은 사용자의 메시지와 인자가 의 message 어트리뷰트로 미리 포맷된다는 사실을 활용합니다. 이 포맷 문자열은 표준 파이썬 %-스타일 매핑 키를 포함합니다. 문자열 포매팅에 대해서 더 많은 정보가 필요하면 를 보세요.
에 있는 유용한 매핑 키는 섹션에 있습니다.
는 수준을 통해 제세계랭킹1위오피스타공되는 것보다 더 정교한 필터링을 위해 와 에 의해 사용될 수 있습니다. 베이스 필터 클래스는 로거 계층 구조의 특정 지점 아래에 있는 이벤트만 허용합니다. 예를 들어 ‘A.B’로 초기화된 필터는, 로거 ‘A.B’, ‘A.B.C’, ‘A.B.C.D’, ‘A.B.D’ 등이 로그 한 이벤트를 허용하지만, ‘A.BB’, ‘B.A.B’ 등은 허용하지 않습니다. 빈 문자열을 사용하면 모든 이벤트를 통과시킵니다.
처리기에 첨부된 필터는 이벤트를 처리기가 출력하기 전에 호출되는 반면, 로거에 첨부된 필터는 이벤트가 로깅될 때마다 (, 등) 처리기로 이벤트를 보내기 전에 호출됩니다. 이는 자손 로거가 만든 이벤트들은, 같은 필터가 자손들에게도 적용되지 않는 한, 로거의 필터 설정으로 필터링 되지 않는다는 것을 뜻합니다.
실제로 의 서브 클래스를 만들 필요는 없습니다: 같은 의미가 있는 메서드를 가진 인스턴스는 무엇이건 전달할 수 있습니다.
필터는 수준보다 정교한 기준에 따라 레코드를 필터링하는 데 주로 사용되지만, 필터가 첨부되는 처리기나 로거에서 처리되는 모든 레코드를 볼 수 있습니다: 이 특성은, 특정 로거나 처리기가 얼마나 많은 레코드를 처리하는지 센다거나, 처리 중인 에 어트리뷰트를 추가, 변경, 삭제하려고 할 때 유용합니다. 당연히, LogRecord를 변경하는 것은 주의를 필요로 하는 일이지만, 로그에 문맥 정보를 주입하는 것을 허용합니다 (를 보세요).
인스턴스는 뭔가 로깅 될 때마다 에 의해 자동으로 생성되며, 를 통해 수동으로 생성될 수 있습니다 (예를 들어, 네트워크에서 수신된 피클 된 이벤트의 경우).
LogRecord에는 많은 어트리뷰트가 있으며, 대부분 어트리뷰트는 생성자의 매개 변수에서 옵니다. (LogRecord 생성자 매개 변수와 LogRecord 어트리뷰트의 이름이 항상 정확하게 일치하는 것은 아닙니다.) 이러한 어트리뷰트를 사용하여 레코드의 데이터를 포맷 문자열로 병합 할 수 있습니다. 다음 표는 어트리뷰트 이름, 의미와 해당 자리 표시자를 %-스타일 포맷 문자열로 (알파벳 순서로) 나열합니다.
{}-포매팅()을 사용한다면, 을 포맷 문자열의 자리 표시자로 사용할 수 있습니다. $-포매팅()을 사용하고 있다면, 형식을 사용하십시오. 두 경우 모두, 물론, 을 사용하려는 실제 어트리뷰트 이름으로 대체하십시오.
{}-포매팅의 경우, 어트리뷰트 이름 다음에 콜론(:)으로 구분하여 포매팅 플래그를 지정할 수 있습니다. 예를 들어, 자리 표시자는 밀리 초 값 를 로 포맷합니다. 사용할 수 있는 옵션에 대한 자세한 내용은 설명서를 참조하십시오.
인스턴스는 문맥 정보를 로깅 호출에 편리하게 전달하는 데 사용됩니다. 사용 예는, 섹션을 참조하십시오.
위의 것에 더해, 는 다음과 같은 의 메서드를 지원합니다: , , , , , , , , , , . 이 메서드들은 에 있는 것과 똑같은 서명을 가지므로, 두 형의 인스턴스를 바꿔쓸 수 있습니다.
로깅 모듈은 클라이언트가 특별한 주의를 기울이지 않아도 스레드 안전하도록 만들어졌습니다. 이렇게 하려고 threading 록을 사용합니다; 모듈의 공유 데이터에 대한 액세스를 직렬화하는 록이 하나 있고, 각 처리기 또한 하부 I/O에 대한 액세스를 직렬화하는 록을 만듭니다.
모듈을 사용하여 비동기 시그널 처리기를 구현한다면, 그 처리기 내에서는 logging을 사용할 수 없을 수도 있습니다. 이는 모듈의 록 구현이 언제나 재진입할 수 있지는 않아서 그러한 시그널 처리기에서 호출할 수 없기 때문입니다.
위에서 설명한 클래스 외에도 많은 모듈 수준 함수가 있습니다.
함수는 을 모듈과 통합하는데 사용될 수 있습니다.