zoukankan      html  css  js  c++  java
  • logbook日志系统

    python中替代logging的日志系统。

    不过比之前的logging难理解。

    先上打印到屏幕上的代码和存到日志文件中的代码:

    #!/usr/bin/env python3
    
    # -*- coding: utf-8 -*-
    
    
    
    from logbook import Logger, StreamHandler, TimedRotatingFileHandler
    
    import sys
    
    import os
    
    StreamHandler(sys.stdout).push_application()
    
    log = Logger('Logbook')
    
    log.info('Hello, World!')
    
    
    
    LOG_DIR = os.path.join('log')  
    
    if not os.path.exists(LOG_DIR):  
    
        os.makedirs(LOG_DIR)  
    
    TimedRotatingFileHandler(os.path.join(LOG_DIR, '%s.log' % 'user_log'), date_format='%Y%m%d', bubble=True).push_application() 
    
    user_log = Logger('user_log')
    
    user_log.info('user_log mytest....')

    然后看rqalpha代码,发现实际上写主要有两种类型,一种为打印到屏幕,一种为打印到文件。

    在初始化时,需要先利生成Logger实例:

    user_log = Logger("user_log")

    需要打印到屏幕,则生成打印到屏幕的句柄:

    user_std_handler = user_std_handler = ColorizedStderrHandler(bubble=True)

    然后对此句柄设置日志格式:

    user_std_handler.formatter = user_handler_log_formatter

    若想使此设置生效,

    只需申明user_log的句柄:

    user_log.handlers = []

    然后将之加入即可

    user_log.handlers.append(user_std_handler)

    同理,如果希望日志同时支持打印到文件,只需按照上述步骤再来一次即可。
    user_file_handler = TimedRotatingFileHandler(
        os.path.join(os.path.join('log') , '%s.log' % 'test_log'), date_format='%Y%m%d', bubble=True)
    user_file_handler.formatter = user_handler_log_formatter

    user_log.handlers.append(user_file_handler)

    user_handler_log_formatter是一个日志格式函数,返回打印的日志以什么方式呈现。

    整体代码如下:

    #!/usr/bin/env python3
    
    # -*- coding: utf-8 -*-
    
    # filename:logger.py
    
    import os
    
    import logbook
    
    from logbook import Logger, TimedRotatingFileHandler
    
    from logbook.more import ColorizedStderrHandler
    
    
    
    DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S.00"
    
    
    
    def user_handler_log_formatter(record, handler):
    
        log = "[{dt}][{level}][{filename}][{func_name}][{lineno}] {msg}".format(
    
            dt=record.time,
    
            level=record.level_name,                       # 日志等级
    
            filename = os.path.split(record.filename)[-1], # 文件名
    
            func_name = record.func_name,                  # 函数名
    
            lineno = record.lineno,                        # 行号
    
            msg=record.message,                            # 日志内容
    
        )
    
        return log
    
    
    
    # 打印到屏幕句柄
    
    user_std_handler = ColorizedStderrHandler(bubble=True)
    
    user_std_handler.formatter = user_handler_log_formatter
    
    
    
    # 日志路径,在主工程下生成log目录
    
    LOG_DIR = os.path.join('log') 
    
    if not os.path.exists(LOG_DIR):  
    
        os.makedirs(LOG_DIR)
    
        
    
    # 打印到文件句柄
    
    user_file_handler = TimedRotatingFileHandler(
    
        os.path.join(LOG_DIR , '%s.log' % 'test_log'), date_format='%Y%m%d', bubble=True)
    
    user_file_handler.formatter = user_handler_log_formatter
    
    
    
    # 用户代码logger日志
    
    user_log = Logger("user_log")
    
    
    
    def init_logger():
    
        logbook.set_datetime_format("local")
    
        user_log.handlers = []
    
        user_log.handlers.append(user_std_handler)
    
        user_log.handlers.append(user_file_handler)    
    
        
    
    # 初始化日志系统(被默认调用)
    
    init_logger()
    

    测试代码如下:

    #!/usr/bin/evn python3
    
    # -*- coding: utf-8 -*-
    
    # filename: test_looger.py
    
    import os
    
    from logger import user_log as logger
    
    
    
    if __name__ == "__main__": 
    
        logger.info("my test.")

    打印日志如下:

    [2017-08-26 19:10:10.226902][INFO][test_logger.py][<module>][8] my test.

  • 相关阅读:
    自然语言理解——NLP中的形式语言自动机
    自然语言理解——数学基础
    自然语言理解——introduction
    网络挖掘技术——association rule
    网络挖掘技术——Recommendation
    网络挖掘技术——微博文本特征提取
    网络挖掘技术——text mining
    语音交互技术——语音编码
    语音交互技术——线性预测编码(LPC)
    语音交互技术——语音信号特征提取
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/7430073.html
Copyright © 2011-2022 走看看