2017-10-06 3 views
0

j'ai fonction:fichier de configuration en Python pour la connexion à la place fonction

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 

J'ai essayé de remplacer la méthode:

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

Ma config:

[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" 

Mais fichier avec journal , n'a pas été créé. Quand j'utilise la fonction, tout va bien. J'ai essayé de remplacer la fonction sur config et cela ne fonctionne pas. Où j'ai une erreur? Pouvez-vous m'aider ?

Répondre

0

Votre espace réservé filename dans le fichier de configuration ne correspond pas à la clé logfilename que vous transmettez. Faites-les correspondre et cela fonctionne.

Voici un exemple complet, runnable basé sur le vôtre:

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

Quand je lance que votre fichier de configuration, je reçois cette erreur:

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

Bad substitution de valeur signifie que %(filename)s n » ne correspond à rien. Regardez attentivement, et vous voyez que les valeurs par défaut que vous avez passé en utilisation logfilename.

je modifier le fichier de configuration à cela, et il fonctionne:

[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"