2010-12-14 42 views
23

Tôi dường như đang gặp một số sự cố khi cố gắng triển khai đăng nhập vào dự án python của mình.Tập tin cấu hình ghi nhật ký Python

Tôi chỉ đơn giản là cố gắng bắt chước các cấu hình sau:

Python Logging to Multiple Destinations

Tuy nhiên, thay vì làm bên trong mã này, tôi muốn có nó trong một tập tin cấu hình.

Dưới đây là tập tin cấu hình của tôi:

[loggers] 
keys=root 

[logger_root] 
handlers=screen,file 

[formatters] 
keys=simple,complex 

[formatter_simple] 
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 

[formatter_complex] 
format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s 

[handlers] 
keys=file,screen 

[handler_file] 
class=handlers.TimedRotatingFileHandler 
interval=midnight 
backupCount=5 
formatter=complex 
level=DEBUG 
args=('logs/testSuite.log',) 

[handler_screen] 
class=StreamHandler 
formatter=simple 
level=INFO 
args=(sys.stdout,) 

Vấn đề là đầu ra màn hình của tôi trông giống như:
2010-12-14 11: 39: 04.066 - gốc - CẢNH BÁO - 3
2010-12 -14 11: 39: 04,066 - root - ERROR - 4
2010-12-14 11: 39: 04,066 - root - CRITICAL - 5

Tệp của tôi là đầu ra, nhưng trông giống như trên (mặc dù với thêm thông tin). Tuy nhiên, mức gỡ rối và thông tin không được xuất ra.

Tôi đang trên Python 2,7

Dưới đây là ví dụ đơn giản của tôi cho thấy sự thất bại:

import os 
import sys 
import logging 
import logging.config 

sys.path.append(os.path.realpath("shared/")) 
sys.path.append(os.path.realpath("tests/")) 

class Main(object): 

    @staticmethod 
    def main(): 
    logging.config.fileConfig("logging.conf") 
    logging.debug("1") 
    logging.info("2") 
    logging.warn("3") 
    logging.error("4") 
    logging.critical("5") 

if __name__ == "__main__": 
    Main.main() 

Trả lời

16

Nó có vẻ như bạn đã đặt các cấp cho trình xử lý của mình, nhưng không đặt trình ghi nhật ký của bạn. Mức của trình ghi nhật ký sẽ lọc mọi thư trước khi nó có thể tiếp cận các trình xử lý của nó và mặc định là WARNING trở lên (như bạn có thể thấy). Đặt mức của trình ghi nhật ký gốc thành NOTSET như bạn có, cũng như đặt nó thành DEBUG (hoặc bất kỳ cấp độ nào bạn muốn đăng nhập thấp nhất) sẽ giải quyết vấn đề của bạn.

11

Thêm dòng sau vào các logger gốc đã chăm sóc của vấn đề của tôi:

level=NOTSET 
0
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import logging 
import logging.handlers 
from logging.config import dictConfig 

logger = logging.getLogger(__name__) 

DEFAULT_LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
} 
def configure_logging(logfile_path): 
    """ 
    Initialize logging defaults for Project. 

    :param logfile_path: logfile used to the logfile 
    :type logfile_path: string 

    This function does: 

    - Assign INFO and DEBUG level to logger file handler and console handler 

    """ 
    dictConfig(DEFAULT_LOGGING) 

    default_formatter = logging.Formatter(
     "[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s():%(lineno)s] [PID:%(process)d TID:%(thread)d] %(message)s", 
     "%d/%m/%Y %H:%M:%S") 

    file_handler = logging.handlers.RotatingFileHandler(logfile_path, maxBytes=10485760,backupCount=300, encoding='utf-8') 
    file_handler.setLevel(logging.INFO) 

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

    file_handler.setFormatter(default_formatter) 
    console_handler.setFormatter(default_formatter) 

    logging.root.setLevel(logging.DEBUG) 
    logging.root.addHandler(file_handler) 
    logging.root.addHandler(console_handler) 



[31/10/2015 22:00:33] [DEBUG] [yourmodulename] [yourfunction_name():9] [PID:61314 TID:140735248744448] this is logger infomation from hello module 

Tôi nghĩ bạn nên thêm disable_existing_loggers thành false.

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