2017-08-18 1 views
1

J'ai un script python qui est exécuté par mon application. Le script utilise l'API logging intégrée de Python. Le problème que j'ai est que le nom de fichier dans tous les messages de journal est écrit comme <string>. Quand je cours le même code dans un extrait, ça fonctionne bien. est sous le code que j'utilise pour configurer l'enregistreur:API de journalisation Python l'impression du nom de fichier '<string>'

import logging 
import os 
import sys 
from logging import FileHandler, StreamHandler 

logger = logging.getLogger('update_menu') 
logger.setLevel(logging.DEBUG) 

# create handlers and set level to debug 
fileHandler = FileHandler(filename='/home/fguimaraes/work/update_menu.log') 
fileHandler.setLevel(logging.DEBUG) 

consoleHandler = StreamHandler(stream=sys.stdout) 
consoleHandler.setLevel(logging.DEBUG) 

# create formatter 
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s;File:%(filename)s;Function:%(funcName)s;Line:%(lineno)d') 

# add formatter to log 
fileHandler.setFormatter(formatter) 
consoleHandler.setFormatter(formatter) 

# add log to logger 
logger.addHandler(fileHandler) 
logger.addHandler(consoleHandler) 
+0

Pouvez-vous afficher l'appel de l'enregistreur? – MrName

Répondre

1

Ceci est probablement parce que votre script est en cours de lecture dans la mémoire et exécutée comme une chaîne en utilisant par exemple exec, ce qui signifie qu'il n'y a pas de nom de fichier pour le script. Exemple:

$ cat /tmp/test.py 
import logging 

logging.basicConfig(level=logging.DEBUG, format='%(filename)s: %(message)s') 
logging.debug('This is a test') 
[email protected]:~/projects/orbitilweb$ python /tmp/test.py 
test.py: This is a test 
$ python 
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> with open('/tmp/test.py') as f: data = f.read() 
... 
>>> exec data 
<string>: This is a test 
>>>