일반적인 방법은 모듈과 같은 이름의 로거를 생성하는 것이다.
logger = logging.getLogger(__name__)
로거의 이름은 소프트웨어의 구조를 따른다. 중요한 상태 변경 부근에 로깅 요청을 배치하는 것이 좋은데, 한 개의 로그 내에 수많은 상태 변경이 존재할 수 있다.
영속적 자원에 어떤 변경이 발생하면 INFO 수준의 메시지를 포함시키는 것이 좋다. 운영체제상의 변경(주로 파일시스템)도 로깅하기에 적합하고, 데이터베이스를 갱신하거나 웹 서버의 상태를 변경하는 요청 역시 로깅하는 것이 바람직하다.
영속적인 상태 변경을 초래하는 문제점은 ERROR 수준의메시지를 포함시켜야 한다. 운영체제 수준의 예외를 포착했을 때도 역시 마찬가지다.
매우 길고 복잡한 계산이 수행되고 있을 때는 특히 중요한 대입문이 실행된 직후에 DEBUG 수준의 메시지를 기록하면 도움이 된다. 길고 복잡한 계산을(테스트하기 쉽도록) 더 작은 단위로 쪼개야 한다는 힌트 역할을 할 수 있기 때문이다.
내부 애플리케이션 자원에 대한 어떤 변경도 DEBUG 메시지를 기록할 필요가 있다. 객체의 상태 변경을 로그를 통해 추적하기 위해서다.
애플리케이션이 잘못된 상태로 진입했을 때도 로깅해야 한다. 주로 예외가 발생한 경우가 이에 해당되는데, assert문을 사용해 프로그램의 상태를 탐지하고 문제 탐지 시 예외를 발생시킬 수 잇다. 예외는 EXCEPTIONS 수준으로 기록될 수 있고, 조용히 넘어가거나 변환되는 예외인 경우 DEBUG 수준으로 기록될 수 있다. 혹은 CRITICAL이나 ERROR 수준으로 기록돼야 하는 심각한 예외도 존재한다.