[英]a couple of basic python logging questions
我正在通过Logging HOWTO , logging docs和tomordonez / logging教程来获取有关日志系统的信息。 当我向类添加日志记录时, MyClass.__init__()
不会显示日志记录信息,但MyClass.obj_name()
会显示日志记录信息。 这是为什么?
如何在日志输出中将Class名称和funcName
信息包括在一起? 我阅读的文档和其他SO问题看起来可能需要编写自定义格式化程序? 或类似的东西? 是否有非docs.python.org网站提供详细的演练,介于基础知识和高级知识之间? 谢谢!
import logging
logger = logging.getLogger('application')
logger.setLevel(logging.DEBUG)
# # create file handler which logs debug messages
# fh = logging.FileHandler('output.log.txt')
# fh.setLevel(logging.DEBUG)
# # create console handler which logs debug messages
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(name)s %(funcName)s - %(levelname)s - %(message)s')
# fh.setFormatter(formatter)
ch.setFormatter(formatter)
# # add handlers to logger
# logger.addHandler(fh)
logger.addHandler(ch)
class MyClass():
def init():
logger.info('creating an instance of MyClass object')
def obj_name(self):
logger.info('declare name')
def main():
myobj = MyClass()
# print(dir(myobj))
myobj.obj_name()
if __name__ == "__main__":
main()
完整的输出:
PS D:\0_program_dev>'C:\Python\Python37\python.exe' 'd:\0_program_dev\hands_of_ada_book_generator\logging_tools.py'
application obj_name - INFO - declare name
PS D:\0_program_dev>
不知道这是否有帮助:
import logging
from functools import wraps
import sys
stdouthandler = logging.StreamHandler(sys.stdout)
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s %(levelname)s: %(message)s",
handlers=[stdouthandler])
def status(func):
@wraps(func)
def wrapper(*args, **kwargs):
logging.debug(f"hello {func.__name__}")
result = func(*args, **kwargs)
return result
return wrapper
class MyClass():
@status
def __init__(self):
logging.debug(f"created instance of {self.__class__}")
@status
def my_function(self):
logging.debug(f"here is a function {sys._getframe().f_code.co_name} of {self.__class__.__name__}")
my_obj = MyClass()
my_obj.my_function()
2018-12-08 22:43:40,503调试:你好init
2018-12-08 22:43:40,503调试:创建了类' main .MyClass'的实例
2018-12-08 22:43:40,503调试:你好my_function
2018-12-08 22:43:40,503调试:这是MyClass的函数my_function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.