Python日志API打印文件名为`<string>`

时间:2017-08-18 20:25:02

标签: python logging format

我有一个由我的应用程序执行的python脚本。该脚本使用python内置的logging API。我遇到的问题是所有日志消息中的文件名都写为<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)

2 个答案:

答案 0 :(得分:1)

这可能是因为您的脚本正被读入内存并使用例如字符串执行。 exec,表示脚本没有文件名。例如:

$ cat /tmp/test.py
import logging

logging.basicConfig(level=logging.DEBUG, format='%(filename)s: %(message)s')
logging.debug('This is a test')
vinay@theta-trusty-unity:~/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
>>> 

答案 1 :(得分:-1)

对于那些寻求解决方案的人,我遇到了同样的问题,我决定通过使用以下内容代替exec来解决它:

subprocess.call(['python', 'myscript.py'])