2012-12-10 3 views
0

configure 파이썬 로깅을위한 설정 파일을 사용하려고하지만 dict 설정이로드 된 후에 핸들러를 추가하려고합니다. 그래서 내 config 파일은 다음 코드에서Python Logging : dictConfig

version: 1 
formatters: 
    default_formatter: 
    format: '%(asctime)s : %(levelname)s : %(message)s' 
    datefmt: '%d-%b-%Y %H:%M:%S' 
    plain_formatter: 
    format: '%(message)s' 
handlers: 
    console_default_handler: 
    class: logging.StreamHandler 
    level: INFO 
    formatter: default_formatter 
    stream: ext://sys.stdout 
root: 
    level: INFO 
    handlers: [console_default_handler] 

처럼 - 나는

log_config_dict=yaml.load(open(log_config_file, 'r')) 
logging.config.dictConfig(log_config_dict) 

을 그리고 난이 방법으로 로거를 추가 할 -이 작동하지 않습니다

fhandler1=logging.FileHandler(log_file_name,mode="w") 
fhandler1.setFormatter(log_config_dict['formatters']['plain_formatter']) 
fhandler1.setLevel(logging.DEBUG) 

. dictConfig에 정의 된 반입 값을 수동 로그 구성에서 사용하기 위해 catch하는 방법이 있습니까?

감사합니다.

답변

0

오하이오. 내가해야 할 일은

formatter =logging.Formatter(log_config_dict['formatters']['plain_formatter']['format'])    
fhandler1.setFormatter(formatter) 

입니다. 따라서 Formatter 객체를 만들어야합니다.

1
#!/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 

설정 로그 기능이 더 편리하다고 생각합니다.