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.

logbook日志系统相关推荐

  1. linux 任务计划 权限设置,Linux系统 文件权限+计划任务+日志系统

    实验目的:熟练掌握权限相关概念和具体操作 实验环境:Red Hat Enterprise Linux Server 5.3 实验步骤: 一.文件权限 二.计划任务 三.日志 一.文件权限 (一)基本权 ...

  2. 日志系统新贵Loki,确实比笨重的ELK轻

    来自:CSDN(作者:linkt1234) 原文链接: https://blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公司容器云的日志方 ...

  3. cx_oracle写日志信息_日志系统的设计

    笔者在写作本章节的时候,并不敢把此章节的标题叫做<高性能日志系统的设计>,之所以不敢加上"高性能"三个字的原因是: 第一,我对于日志系统设计知识和经验都来自于学习和工作 ...

  4. 抛弃ELK!Loki日志系统详解!

    背景 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的 ...

  5. 百亿级日志系统架构设计及优化

    作者:杨津萍,大数据架构师,从业十余年,专攻 Web 架构及大数据架构. 来自:51cto技术栈(ID:blog51cto) " 日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台 ...

  6. PHP框架中的日志系统

    引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程序猿才真正动的英文),调试的时候也会很方便,还可以记 ...

  7. 软件架构自学笔记-- 畅途亿级业务日志系统演变过程

    畅途亿级业务日志系统演变过程 原文链接:https://www.infoq.cn/article/xWlmaS0-rdIjUgNrTjGI 痛点 你是否遇到过如下情况:线上偶尔出现一个问题,但我们并不 ...

  8. 几十条业务线日志系统如何收集处理?

    在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息,甚至包括点击的位置,我们也经常发现自己刚搜完一个东西,再打开网页时每个小广告都会出现与之相关联的商品或信息,在感叹智能的同时不惊想 什 ...

  9. 大型互联网应用中的日志系统

    2019独角兽企业重金招聘Python工程师标准>>> 大型互联网应用的突出特点是应用本身规模大,结构复杂,用户访问量大.设计良好的日志系统,有助于分析流量趋势,帮助管理网络应用:有 ...

最新文章

  1. python简单代码input-python简单基础代码
  2. linux视频教程之dhcp
  3. 2 TileMapObject的使用
  4. [转载]使用命名管道实现进程间通信
  5. [vue] vue在开发过程中要同时跟N个不同的后端人员联调接口(请求的url不一样)时你该怎么办?
  6. 颜值爆表!Redis 官方可视化工具来啦,功能真心强大!
  7. Android应用安全开发之浅谈网页打开APP
  8. 三角灯箱 css_如何使用HTML,CSS和JavaScript创建灯箱
  9. 爬虫实践---电影排行榜和图片批量下载
  10. Set集合框架(HashSet and TreeSet)
  11. MyBatis基于Maven入门实例
  12. linux eclipse qt5 ui_helloworld.h,转载Eclipse+qt的开发环境
  13. Utrack声卡和机架包的调试
  14. 回看科技股泡沫:区块链崛起恰逢其时,相当于1996年的互联网
  15. 2018苹果开发者技术支持新规
  16. 想做游戏测试工程师?这几点不知道可不行!
  17. DSRN——Image Super-Resolution via Dual-State Recurrent Network
  18. CSRF 跨站请求伪造攻击
  19. ET199加密锁设置和使用
  20. 使用TextBox的SelectionStart时需要注意的地方

热门文章

  1. Java执行cmd命令
  2. java jsonresult_java web中统一结果返回封装类JsonResult
  3. 分析高数值孔径物镜的聚焦
  4. 京东笔试Java暑期实习笔经21/3/27
  5. 戴尔笔记本重装WIN10系统后无法识别原装硬盘
  6. fsockopen函数
  7. long型长整数字在前端页面显示异常及其解决方法
  8. 使用阿里云创建测试子账号
  9. python根据url list多线程下载图片、删除图片目录
  10. springboot启动报错:create a memory leak. Stack trace of thread:(DubboResponseTimeoutScanTimer)