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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM