【发布时间】:2012-07-19 20:59:17
【问题描述】:
阅读documentation on logging后,我知道我可以使用这样的代码来执行简单的日志记录:
import logging
def main():
logging.basicConfig(filename="messages.log",
level=logging.WARNING,
format='%(filename)s: '
'%(levelname)s: '
'%(funcName)s(): '
'%(lineno)d:\t'
'%(message)s')
logging.debug("Only for debug purposes\n")
logging.shutdown()
main()
但是,我意识到我不知道如何在每个记录器的基础上更改日志消息的格式,因为basicConfig 是一个模块级函数。此代码适用于创建具有不同级别、名称等的不同记录器,但有没有办法以类似于basicConfig 的方式在每个记录器的基础上更改这些日志消息的格式?
import inspect
import logging
def function_logger(level=logging.DEBUG):
function_name = inspect.stack()[1][3]
logger = logging.getLogger(function_name)
logger.setLevel(level)
logger.addHandler(logging.FileHandler("{0}.log".format(function_name)))
return logger
def f1():
f1_logger = function_logger()
f1_logger.debug("f1 Debug message")
f1_logger.warning("f1 Warning message")
f1_logger.critical("f1 Critical message")
def f2():
f2_logger = function_logger(logging.WARNING)
f2_logger.debug("f2 Debug message")
f2_logger.warning("f2 Warning message")
f2_logger.critical("f2 Critical message")
def main():
f1()
f2()
logging.shutdown()
main()
【问题讨论】:
-
您刚刚帮我弄清楚了如何将文件名、函数名和行号添加到我的日志中。谢谢
-
@XanderYzWich 有关可用属性的完整列表,请参阅 docs.python.org/3/library/logging.html#logrecord-attributes
标签: python logging python-3.x