如何使用自定义处理程序使Python日志记录消息出现在模块中

d3pd

我正在尝试使用/编写自定义Python日志记录处理程序。当我使用它时,日志记录会显示在我的主代码中,而不是在它使用的模块中。我只是不知道如何获取该模块的日志记录,因此mylib我们将为您提供帮助。我确定我在处理处理程序时只是在做一些简单的错误。

该程序的主要代码如下(main.py):

import logging
import colorlogging
import mylib

def main():
    global log
    log = logging.getLogger(__name__)
    log.addHandler(colorlogging.ColorisingStreamHandler())
    log.setLevel(logging.DEBUG)

    log.info('started main program')
    mylib.do_something()
    log.debug('main program debug message')
    log.info('finished main program')

if __name__ == '__main__':
    main()

该程序使用的模块如下(mylib.py):

import logging

log = logging.getLogger(__name__)

def do_something():
    log.info('doing something')
    log.debug('library debug message')

处理程序代码如下(colorlogging.py):

import ctypes
import logging
import os

class ColorisingStreamHandler(logging.StreamHandler):

    # color names to indices
    colorMap = {
        'black':   0,
        'red':     1,
        'green':   2,
        'yellow':  3,
        'blue':    4,
        'magenta': 5,
        'cyan':    6,
        'white':   7,
    }

    # level colour specifications
    # syntax: logging.level: (background color, foreground color, bold)
    levelMap = {
        logging.DEBUG:    (None,   'blue',    False),
        logging.INFO:     (None,   'white',   False),
        logging.WARNING:  (None,   'yellow',  False),
        logging.ERROR:    (None,   'red',     False),
        logging.CRITICAL: ('red',  'white',   True),
    }

    # control sequence introducer
    CSI = '\x1b['

    # normal colours
    reset = '\x1b[0m'

    def istty(self):
        isatty = getattr(self.stream, 'isatty', None)
        return isatty and isatty()

    def emit(self, record):
        try:
            message = self.format(record)
            stream = self.stream
            if not self.istty:
                stream.write(message)
            else:
                self.outputColorised(message)
            stream.write(getattr(self, 'terminator', '\n'))
            self.flush()
        except (KeyboardInterrupt, SystemExit):
            raise
        except:
            self.handleError(record)

    def outputColorised(self, message):
        self.stream.write(message)

    def colorise(self, message, record):
        if record.levelno in self.levelMap:
            backgroundColor, \
            foregroundColor, \
            bold = self.levelMap[record.levelno]
            parameters = []
            if backgroundColor in self.colorMap:
                parameters.append(str(self.colorMap[backgroundColor] + 40))
            if foregroundColor in self.colorMap:
                parameters.append(str(self.colorMap[foregroundColor] + 30))
            if bold:
                parameters.append('1')
            if parameters:
                message = ''.join((
                    self.CSI,
                    ';'.join(parameters),
                    'm',
                    message,
                    self.reset
                ))
        return message

    def format(self, record):
        message = logging.StreamHandler.format(self, record)
        if self.istty:
            # Do not colorise traceback.
            parts = message.split('\n', 1)
            parts[0] = self.colorise(parts[0], record)
            message = '\n'.join(parts)
        return message
算了吧

将添加ColorisingStreamHandler到根记录器,这样它将影响传播记录的所有子记录器

main.py:

import logging
import colorlogging
import mylib

def main():
    global log
    log = logging.getLogger(__name__)
    root = logging.root
    root.addHandler(colorlogging.ColorisingStreamHandler())
    root.setLevel(logging.DEBUG)

    log.info('started main program')
    mylib.do_something()
    log.debug('main program debug message')
    log.info('finished main program')

if __name__ == '__main__':
    main()

产量

started main program             (white)
doing something                  (white)
library debug message            (blue)
main program debug message       (blue)
finished main program            (white)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用自定义处理程序使Python日志记录消息出现在模块中

来自分类Dev

如何防止WebResource.axd错误的错误消息出现在应用程序日志中?

来自分类Dev

如何防止WebResource.axd错误的错误消息出现在应用程序日志中?

来自分类Dev

可听错误-自定义的非阻塞文本转语音处理程序,用于Python的日志记录模块

来自分类Dev

自定义指令未出现在页面中

来自分类Dev

Twitter日志记录和Scala自定义处理程序

来自分类Dev

react-bootstrap-table2 自定义验证器错误消息出现在 UI 中

来自分类Dev

使用PyInstaller自定义日志记录处理程序和格式化程序

来自分类Dev

自定义log4net附加程序中的日志记录/错误处理

来自分类Dev

以通用方式对Python日志消息进行自定义处理

来自分类Dev

为什么会收到错误消息,说明我的自定义日志记录处理程序“没有属性'level`”?

来自分类Dev

如何在自定义级别向模块中的类添加日志记录

来自分类Dev

如何添加自定义墙纸,使其出现在动态统一问候语中?

来自分类Dev

如何添加自定义墙纸,使其出现在动态统一问候语中?

来自分类Dev

如何自定义哪些项目出现在内置 StockTools 工具栏中?

来自分类Dev

Log4Net自定义附加程序:如何记录将使用自定义附加程序写入的消息?

来自分类Dev

如何使用自定义记录器在Spring Boot中记录访问日志

来自分类Dev

WPF自定义用户界面未出现在

来自分类Dev

如何在jboss日志记录的模式格式化程序中自定义时间戳

来自分类Dev

如何使地图图钉(自定义)图像出现在中心点

来自分类Dev

自定义帖子类型未出现在Wordpress管理菜单中

来自分类Dev

UILabels未出现在自定义UITableViewCell类中

来自分类Dev

复选框未出现在自定义ListView中

来自分类Dev

自定义窗口小部件(开关)未出现在ActionBar中

来自分类Dev

自定义帖子类型未出现在nav_menu中

来自分类Dev

log4net.Ext.Json自定义属性未出现在json中

来自分类Dev

自定义类未出现在情节提要中

来自分类Dev

自定义Xib单元格未出现在UITableView swift中

来自分类Dev

自定义Listview不会出现在对话框中

Related 相关文章

  1. 1

    如何使用自定义处理程序使Python日志记录消息出现在模块中

  2. 2

    如何防止WebResource.axd错误的错误消息出现在应用程序日志中?

  3. 3

    如何防止WebResource.axd错误的错误消息出现在应用程序日志中?

  4. 4

    可听错误-自定义的非阻塞文本转语音处理程序,用于Python的日志记录模块

  5. 5

    自定义指令未出现在页面中

  6. 6

    Twitter日志记录和Scala自定义处理程序

  7. 7

    react-bootstrap-table2 自定义验证器错误消息出现在 UI 中

  8. 8

    使用PyInstaller自定义日志记录处理程序和格式化程序

  9. 9

    自定义log4net附加程序中的日志记录/错误处理

  10. 10

    以通用方式对Python日志消息进行自定义处理

  11. 11

    为什么会收到错误消息,说明我的自定义日志记录处理程序“没有属性'level`”?

  12. 12

    如何在自定义级别向模块中的类添加日志记录

  13. 13

    如何添加自定义墙纸,使其出现在动态统一问候语中?

  14. 14

    如何添加自定义墙纸,使其出现在动态统一问候语中?

  15. 15

    如何自定义哪些项目出现在内置 StockTools 工具栏中?

  16. 16

    Log4Net自定义附加程序:如何记录将使用自定义附加程序写入的消息?

  17. 17

    如何使用自定义记录器在Spring Boot中记录访问日志

  18. 18

    WPF自定义用户界面未出现在

  19. 19

    如何在jboss日志记录的模式格式化程序中自定义时间戳

  20. 20

    如何使地图图钉(自定义)图像出现在中心点

  21. 21

    自定义帖子类型未出现在Wordpress管理菜单中

  22. 22

    UILabels未出现在自定义UITableViewCell类中

  23. 23

    复选框未出现在自定义ListView中

  24. 24

    自定义窗口小部件(开关)未出现在ActionBar中

  25. 25

    自定义帖子类型未出现在nav_menu中

  26. 26

    log4net.Ext.Json自定义属性未出现在json中

  27. 27

    自定义类未出现在情节提要中

  28. 28

    自定义Xib单元格未出现在UITableView swift中

  29. 29

    自定义Listview不会出现在对话框中

热门标签

归档