几个基本的python日志记录问题

时间:2018-12-09 06:26:31

标签: python logging

我正在研究Logging HOWTOlogging docstomordonez/logging tutorial,以获取日志记录系统的句柄。当我向类添加日志记录时,dim2_output不会显示日志记录信息,但MyClass.__init__()会显示日志记录信息。这是为什么?

如何在日志输出中包含类名和MyClass.obj_name()信息?我阅读的文档和其他SO问题看起来可能需要编写自定义格式化程序?或类似的东西?是否有非docs.python.org网站提供详细的演练,介于基础知识和高级知识之间?谢谢!

funcName

完整的输出:

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

1 个答案:

答案 0 :(得分:0)

不确定这是否有帮助:

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