2011-09-03 33 views
6

Tôi đã googled và nhìn vào tài liệu mặc định, nhưng tôi không thể tìm ra lý do tại sao điều này không tạo ra ba dòng logging:Python cross-mô-đun logging

# main.py 
import logging 
import apple 
import banana 

log = logging.getLogger('main') 
log.setLevel(logging.DEBUG) 

ch = logging.StreamHandler() 
ch.setLevel(logging.DEBUG) 

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
ch.setFormatter(formatter) 

log.addHandler(ch) 

log.info("I'm in main!") 
    # apple.py 
    import logging 
    
    log = logging.getLogger('main.apple') 
    log.info("I'm here in apple!") 
    
      # banana.py 
      import logging 
      
      log = logging.getLogger('main.banana') 
      log.info("I'm here in banana!") 
      
        # output 
        2011-09-03 16:40:54,062 - main - INFO - I'm in main! 
        

        Nhưng example in the logging documentation hoạt động tốt.

        Bất kỳ ý tưởng nào?

        Trả lời

        9

        Trình xử lý (StreamHandler) không được thiết lập cho đến sau khi nhập. Vì vậy, các lệnh ghi trong các mô-đun đã nhập không tạo ra bất kỳ đầu ra nào. Một số trình xử lý in ra tệp, các trình xử lý khác giao tiếp qua mạng và một số bản in cho bảng điều khiển. Không có cách nào các câu lệnh đăng nhập bên trong các mô-đun đã nhập có thể biết phải làm gì nếu không có trình xử lý được thêm vào trình ghi nhật ký.

        Nếu các câu lệnh ghi trong các mô-đun nằm bên trong một lớp hoặc hàm, như trong ví dụ bạn đã liên kết, thì đầu ra có thể được nhìn thấy bởi vì thời gian lớp hoặc hàm mô-đun được gọi, trình xử lý đã được được thêm vào trình ghi nhật ký.

        Các vấn đề liên quan