2017-10-06 3 views
0

대신 로그인하는 난이 기능 :구성 파일 기능

def get_logger(logfilename): 
    config_file = ('/path/to/my/config') 
    logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False) 
    logger = logging.getLogger("main") 

내 설정 :

[loggers] 
keys=root 

[handlers] 
keys=fileHandler 

[formatters] 
keys=Formatter 

[logger_root] 
level=DEBUG 
handlers=fileHandler 
qualname=main 

[handler_fileHandler] 
class=FileHandler 
level=DEBUG 
formatter=Formatter 
args=('%(filename)s', 'a', 'utf8') 

[formatter_Formatter] 
format=%(asctime)s - %(levelname)s - %(message)s 
datefmt="%Y-%m-%d %H:%M:%S" 

그러나 로그와 파일을 나는 방법에 대체하려고

def go_logger(logfilename): 
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') 
    logging.basicConfig(filemode='a', datefmt='%m-%d-%Y %H:%M:%S') 
    logger = logging.getLogger(logfilename) 
    logger.setLevel(logging.DEBUG) 
    handler = closehandler.ClosingHandler(os.path.join('/path/to/my/logs', logfilename), 
              mode='a', encoding='utf-8') 
    handler.setLevel(logging.DEBUG) 
    handler.setFormatter(formatter) 
    logger.addHandler(handler) 
    return logger 

, 생성되지 않았습니다. 함수를 사용할 때 모든 것이 정상입니다. 구성에서 기능을 바꾸려고 시도했지만 작동하지 않습니다. 어디에서 오류가 있습니까? 너 나 좀 도와 줄 수있어?

답변

0

설정 파일에있는 filename 자리 표시자가 전달하려는 logfilename 키와 일치하지 않습니다. 일치하면 작동합니다. 그 %(filename)s 아무튼 '

Traceback (most recent call last): 
File "/home/don/.IdeaIC2017.2/config/scratches/scratch.py", line 10, in <module> 
logger = get_logger('scratch.log') 
File "/home/don/.IdeaIC2017.2/config/scratches/scratch.py", line 6, in get_logger 
logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False) 
File "/usr/lib/python2.7/logging/config.py", line 85, in fileConfig 
handlers = _install_handlers(cp, formatters) 
File "/usr/lib/python2.7/logging/config.py", line 161, in _install_handlers 
args = cp.get(sectname, "args") 
File "/usr/lib/python2.7/ConfigParser.py", line 623, in get 
return self._interpolate(section, option, value, d) 
File "/usr/lib/python2.7/ConfigParser.py", line 669, in _interpolate 
option, section, rawval, e.args[0]) 
ConfigParser.InterpolationMissingOptionError: Bad value substitution: 
section: [handler_fileHandler] 
option : args 
key : filename 
rawval : ('%(filename)s', 'a', 'utf8') 

잘못된 값 대체 의미 : 나는 당신의 설정 파일로, 나는이 오류가 있음을 실행하면

import logging.config 


def get_logger(logfilename): 
    config_file = ('config.txt') 
    logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False) 
    logger = logging.getLogger("main") 
    return logger 

logger = get_logger('scratch.log') 
logger.info('Hello, World!') 

: 여기

는 당신에 따라 전체, 실행 가능한 예제 어떤 것과도 일치하지 않는다. 주의 깊게 살펴보면 전달 된 기본값이 logfilename임을 알 수 있습니다.

나는이에 설정 파일을 변경하고 그것을 작동 :

[loggers] 
keys=root 

[handlers] 
keys=fileHandler 

[formatters] 
keys=Formatter 

[logger_root] 
level=DEBUG 
handlers=fileHandler 
qualname=main 

[handler_fileHandler] 
class=FileHandler 
level=DEBUG 
formatter=Formatter 
args=('%(logfilename)s', 'a', 'utf8') 

[formatter_Formatter] 
format=%(asctime)s - %(levelname)s - %(message)s 
datefmt="%Y-%m-%d %H:%M:%S"