2012-06-27 21 views
26

Tôi đã sử dụng cấu hình ghi nhật ký cơ bản trong đó tất cả thư trên tất cả các mô-đun được lưu trữ trong một tệp. Tuy nhiên, tôi cần một giải pháp phức tạp hơn ngay bây giờ:Đăng nhập vào hai tệp với các cài đặt khác nhau

  • Hai tệp: tệp đầu tiên vẫn giữ nguyên.
  • Tệp thứ hai phải có một số định dạng tùy chỉnh.

Tôi đã đọc tài liệu cho mô-đun, bu chúng rất phức tạp đối với tôi vào lúc này. Loggers, xử lý ...

Vì vậy, trong ngắn hạn:

Làm thế nào để đăng nhập vào hai tập tin bằng Python 3, ví dụ:

import logging 
# ... 
logging.file1.info('Write this to file 1') 
logging.file2.info('Write this to file 2') 

Trả lời

53

Bạn có thể làm một cái gì đó như thế này:

import logging 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 


def setup_logger(name, log_file, level=logging.INFO): 
    """Function setup as many loggers as you want""" 

    handler = logging.FileHandler(log_file)   
    handler.setFormatter(formatter) 

    logger = logging.getLogger(name) 
    logger.setLevel(level) 
    logger.addHandler(handler) 

    return logger 

# first file logger 
logger = setup_logger('first_logger', 'first_logfile.log') 
logger.info('This is just info message') 

# second file logger 
super_logger = setup_logger('second_logger', 'second_logfile.log') 
super_logger.error('This is an error message') 

def another_method(): 
    # using logger defined above also works here 
    logger.info('Inside method') 
+1

Mức nhật ký mặc định là 'logging.WARNING', vì vậy sẽ rõ ràng hơn nếu 'Logger.setLevel (logging.WARNING)' được gọi. – zeekvfu

+1

Tại sao «logger_1' của tôi không xuất ra tệp nhật ký? Tôi đã đặt 'logger_1.error ('error foo')', nhưng vẫn không hoạt động – Gank

+0

bạn có nhớ dán mã của mình lên đây – eos87

8
def setup_logger(logger_name, log_file, level=logging.INFO): 
    l = logging.getLogger(logger_name) 
    formatter = logging.Formatter('%(message)s') 
    fileHandler = logging.FileHandler(log_file, mode='w') 
    fileHandler.setFormatter(formatter) 
    streamHandler = logging.StreamHandler() 
    streamHandler.setFormatter(formatter) 

    l.setLevel(level) 
    l.addHandler(fileHandler) 
    l.addHandler(streamHandler)  


setup_logger('log1', txtName+"txt") 
setup_logger('log2', txtName+"small.txt") 
logger_1 = logging.getLogger('log1') 
logger_2 = logging.getLogger('log2') 




logger_1.info('111messasage 1') 
logger_2.info('222ersaror foo') 
+0

Có phải logger_1 và logger_2 toàn cầu không? Tức là, tôi có thể sử dụng chúng bên trong bất kỳ chức năng nào? nếu không, nó là một ý tưởng tốt để làm cho chúng toàn cầu trong chức năng chính def? nếu vậy, làm thế nào bạn sẽ đi về nó? – Dnaiel

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