2017-10-06 11 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のキーと一致しません。一致していると動作します。ここで

はあなたに基づいて、完全な、実行可能な例を示します

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!') 

私はあなたの設定ファイルで、私はこのエラーを取得することを実行すると:

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') 

悪い値の置換は%(filename)s」はdoesnのことを意味し何にもマッチしない。注意深く見ると、渡したデフォルト値が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" 
関連する問題