簡體   English   中英

幾個基本的python日志記錄問題

[英]a couple of basic python logging questions

我正在通過Logging HOWTOlogging docstomordonez / 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM