2012-06-21 48 views
5

Làm cách nào để tạo một Trình ghi nhật ký toàn cầu để tôi có thể sử dụng nó trong mọi mô-đun mà tôi tạo ra?Ghi nhật ký toàn cầu của Python

Something như thế này trong moduleA:

import logging 
import moduleB 

log = logging.getLogger('') 

result = moduleB.goFigure(5) 
log.info('Answer was', result) 

Với điều này trong moduleB:

def goFigure(integer): 
    if not isinstance(integer, int): 
     log.critical('not an integer') 
    else: 
     return integer + 1 

Hiện nay, tôi sẽ nhận được một lỗi vì moduleB không biết log là gì. Làm thế nào để tôi có được xung quanh đó?

Trả lời

17

Bạn có thể tự ghi nhật ký "mô-đun" để khởi tạo trình ghi nhật ký, thay vì nhập tất cả mã của bạn. Nghĩ:

logger.py:

import logging 
log = logging.getLogger('') 

codeA.py:

from logger import log 
log.info('whatever') 

codeB.py:

from logger import log 
log.warn('some other thing') 
+0

cảm ơn bạn rất nhiều – MFB

+0

Giải pháp này hoạt động như một sự quyến rũ ngay cả với cài đặt nhật ký tùy chỉnh. – Centurion

2

Mô-đun có theo mặc định chỉ truy cập vào builtin functionsbuiltin constants. Đối với tất cả các biến, chức năng khác ... bạn phải sử dụng từ khóa import.

Bây giờ cho ví dụ cụ thể của bạn, bạn có thể nhập log -variable của moduleA trong modulesB như thế này:

from moduleA import log 

Sau đây sẽ là tương đương vì logging -module trả về cùng một ví dụ của logger đó là trở lại moduleA:

import logging 
log = logging.getLogger('') 

Một giải pháp cho bạn có thể được sử dụng mặc định-logger của module logging như thi s:

logging.info("Hello") 
+0

cảm ơn bạn rất nhiều – MFB

2

Tạo một logger toàn cầu có thể được sử dụng để

  1. tạo một tệp nhật ký mới hoặc
  2. trả về trình ghi nhật ký cho tệp nhật ký chung.

Tạo một module gọi là gọi là myLogger.py: Điều này sẽ có mã tạo log

myLogger.py:

import logging 

def myLog(name, fname = 'myGlobalLog.log'): 
'''Debug Log'''                         
    logger = logging.getLogger(name);                    
    logger.setLevel(logging.DEBUG)                     
    fhan = logging.FileHandler(fname)                    
    fhan.setLevel(logging.DEBUG)                      
    logger.addHandler(fhan)                       
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')       
    fhan.setFormatter(formatter) 
    '''comment this to enable requests logger'''                  
    #logger.disabled = True 
    return logger 

Bây giờ để tạo ra một bản ghi mới trong module của bạn nói A .py

from myLogger import myLog 
log = myLog(__name__, 'newLog.log') 
log.debug("In new log file") 

Vì vậy, bạn phải chuyển tên tệp trong khi nhận nhật ký.

Để sử dụng trình ghi nhật ký toàn cầu trong A.py:

from myLogger import myLog 
log = myLog(__name__) 
log.debug("In myGlobalLog file") 

Không được chuyển tên tệp trong trường hợp này vì chúng tôi sẽ sử dụng nhật ký chung.

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