logging,包
包
import 方式
所有对包的操作,都相当于对包下的__init__
操作
from a.b.c import d
b 必须 是包 import 最后只有一个层级
相对导入 . 代表当前路径, .. 代表父级路径
logging日志
# 旗舰版
## 旗舰版logging
import os
import logging.config
## 定义三种输出格式
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' ## (时间,线程名字,线程数量,任务名字,文件名字,报错行数,等级,信息)
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
## 目录 路径
logfile_dir = os.path.dirname(os.path.abspath(__file__))
logfile_name = 'log1.log'
logfile_name_boss = 'boss.log'
## 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):
os.mkdir(logfile_dir)
# log 文件的全路径
logfile_path = os.path.join(logfile_dir,'logs',logfile_name)
logfile_path_boss = os.path.join(logfile_dir,'boss',logfile_name_boss)
## log配置字典
LOGGING_DIG= {
'version':1,
'disable_existing_loggers':False,
'formatters':{ ## 配置相应格式化
'standard':{
'format':standard_format
},
'simple':{
'format':simple_format
},
'easy':{
'format':id_simple_format
}
},
'filters':{},
'handlers':{ ## 配置句柄 文件 或者 控制台
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter':'simple'
},
'default':{
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler', ## 轮换着保存到文件
'formatter':'standard',
'filename':logfile_path, # 文件名字 绝对路径
'maxBytes':1024*1024*5, ## 单文件最大大小 字节
'backupCount':5, ## 最多多少个文件
'encoding':'utf-8'
},
'sb_boss':{
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler', ## 轮换着保存到文件
'formatter':'easy',
'filename':logfile_path_boss, # 文件名字 绝对路径
'maxBytes':1024*1024*5, ## 单文件最大大小 字节
'backupCount':5, ## 最多多少个文件
'encoding':'utf-8'
}
},
'loggers':{ #对象
'':{
'handlers':['default','console','sb_boss'],
'level':'DEBUG',
'propagate':True
}
}
}
def load_my_logging_cfg(task_id):
logging.config.dictConfig(LOGGING_DIG) ## 添加配置
logger = logging.getLogger(task_id) ## 任务标识
return logger
if __name__ == '__main__':
logger = load_my_logging_cfg('购物车') ##这是使用,这个部分可以包装成函数
logger.info('it works')
logging,包的更多相关文章
- python中利用logging包进行日志记录时的logging.level设置选择
之前在用python自带的logging包进行日志输出的时候发现有些logging语句没有输出,感到比较奇怪就去查了一下logging文档.然后发现其在设置和引用时的logging level会影响最 ...
- subprocess, re模块,logging, 包等使用方法
subprocess, re模块,logging, 包等使用方法 subprocess ''' subprocess: sub: 子 process: 进程 可以通过python代码给操作系统终端发送 ...
- python学习之 logging包
1,logging包 python的一个包,专门用来写日志的. 官方一共划分了6个等级的log类型,分别对应重要性等级50,40,30,20,10,0: 级别排序:CRITICAL > ERRO ...
- web工程 所需是jar包总结
commons-beanutils-1.8.3.jar : BeanUtils主要提供了对于JavaBean进行各种操作,需要Commons -Collections包和Commons -loggin ...
- 深入分析Java的内置日志API(java.util.logging)(一)
简介 任何的软件系统,日志都是非常重要的一部分.良好统一的日志规范会大大提高应用程序的可维护性.可靠性,并进而提高开发效率,指导业务.在早期,Java工程师往往都是利用 System.err.pr ...
- python logging模块使用流程
#!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') logging ...
- Python logging 模块学习
logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...
- 如何运行spring项目,并打成jar包进行发布
一.创建spring项目 1.创建项目 2.创建moudule,选择java类型即可. 3.创建lib文件,引入spring的4个核心包spring-beans.spring-context.spri ...
- logging 的配置和使用
logging 的配置和使用 reference : logging cookbook logging HOWTO 测试源码,example import logging nt = 'xwei' # ...
随机推荐
- 整型转字符串(convert int to char)优化实践——一个意外的BUG
convert_int_to_char函数在使用时出现过一个BUG. 当使用值是13200020099时,返回的字符串是"13200020111",结果是错误的. 在gcc编译器里 ...
- 用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机
原文:用MVVM模式开发中遇到的零散问题总结(5)--将动态加载的可视元素保存为图片的控件,Binding刷新的时机 在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打 ...
- [原译]一步步教你制作WPF圆形玻璃按钮
原文:[原译]一步步教你制作WPF圆形玻璃按钮 图1 1.介绍 从我开始使用vista的时候,我就非常喜欢它的圆形玻璃按钮.WPF最好的一个方面就是允许自定义任何控件的样式.用了一段时间的Micros ...
- QLocalServer与QLocalSocket进程通讯
在Qt中,提供了多种IPC方法,作者所用的是QLocalServer和QLocalSocket.看起来好像和Socket搭上点边,实则底层是windows的name pipe.这应该是支持双工通信的. ...
- linux 用蓝牙和手机通信
加载模块: # modprobe hci_usb # modprobe rfcomm # hciconfig hci0 up # hciconfig hci0 up 查看状况: # hci ...
- windows下,Qt Creator 中javascript调试器安装并使用
最开始使用Qt Creator时,想使用断点来调试javascript代码.但在按下debug键后,却提示调试器未配置,让我比较郁闷. 好了,郁闷的是说了,咱们来说说高兴的.要Qt Creator调试 ...
- WPF判断两个PNG图片是否碰撞
这个方法有几个前提 1.两个Image必须在一个Canvas中 2.两个Image的Canvas.Top和Canvas.Left必须赋值 上一篇讲了判断一个PNG图片某个点是否透明 这个基本类似的方法 ...
- C#二分查找法 破洞百出版本
二分查找法在数据繁多的数据中查找是一种快速的方法,每次查找最多需要的次数 为2的n次方小于总个数. 当然是有前提的,就是需要把数据先排好序,这里指的都是数值型的数据. 基本思想就是把需要找的值与排序好 ...
- LockWindowUpdate的函数的用法(不忽略消息,只是暂时不响应,但WM_SETREDRAW根本不接受重绘消息)
Application.ProcessMessages;LockWindowUpdate(Self.Handle); //锁住当前窗口 LockWindowUpdate(0)//解除锁定窗口 Loc ...
- 自定义QT窗口部件外观之QStyle
自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感:二是使用Qt样式表. Q ...