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.
最新文章
- MySQL 锁问题
- 面试题目——《CC150》递归与动态规划
- JS获取Url中传入的参数
- PHP Switch case 条件并用实例
- Angularjs学习笔记(一)
- iOS 里面 NSTimer 防止 循环引用
- 浅谈JavaScript中的变量、参数、作用域和作用域链
- 【iOS】The differences between Class Extension and Header File 类扩展与头文件的区别
- shell编程基础(4)case 与 function
- ThinkPHP学习手记——环境搭建
- for-in用法
- Android 动画animation 深入分析
- geoserver集成以及部署arcgis server瓦片数据
- 美团Java团队分享:如何实践支付通道自动化管理
- XP实验报告
- linux下查找堆栈信息例子
- 什么是RESTful API?
- CRM 2013 批量更新two options的缺省值
- 51nod 1463 找朋友(线段树+离线处理)
- [Selenium With C#基础教程] Lesson-02 Web元素定位
热门文章
- 每日英语:The Most Destructive, Unpredictable Force in Tech
- SVN如何切换账号
- 在PL/SQL中调用存储过程--oracle
- Python3玩转单链表——逆转单向链表pythonic版
- C#学习笔记(9)——委托(窗体传值)
- 命令行todo神器taskwarrior使用简介
- 【WPF/C#】图层筛选/拾取——Color Picker
- mysql中递归树状结构<;转>;
- Java编程的逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库
- Java编程的逻辑 (49) - 剖析LinkedHashMap