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,包的更多相关文章

  1. python中利用logging包进行日志记录时的logging.level设置选择

    之前在用python自带的logging包进行日志输出的时候发现有些logging语句没有输出,感到比较奇怪就去查了一下logging文档.然后发现其在设置和引用时的logging level会影响最 ...

  2. subprocess, re模块,logging, 包等使用方法

    subprocess, re模块,logging, 包等使用方法 subprocess ''' subprocess: sub: 子 process: 进程 可以通过python代码给操作系统终端发送 ...

  3. python学习之 logging包

    1,logging包 python的一个包,专门用来写日志的. 官方一共划分了6个等级的log类型,分别对应重要性等级50,40,30,20,10,0: 级别排序:CRITICAL > ERRO ...

  4. web工程 所需是jar包总结

    commons-beanutils-1.8.3.jar : BeanUtils主要提供了对于JavaBean进行各种操作,需要Commons -Collections包和Commons -loggin ...

  5. 深入分析Java的内置日志API(java.util.logging)(一)

    简介   任何的软件系统,日志都是非常重要的一部分.良好统一的日志规范会大大提高应用程序的可维护性.可靠性,并进而提高开发效率,指导业务.在早期,Java工程师往往都是利用 System.err.pr ...

  6. python logging模块使用流程

    #!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') logging ...

  7. Python logging 模块学习

    logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...

  8. 如何运行spring项目,并打成jar包进行发布

    一.创建spring项目 1.创建项目 2.创建moudule,选择java类型即可. 3.创建lib文件,引入spring的4个核心包spring-beans.spring-context.spri ...

  9. logging 的配置和使用

    logging 的配置和使用 reference : logging cookbook logging HOWTO 测试源码,example import logging nt = 'xwei' # ...

随机推荐

  1. 整型转字符串(convert int to char)优化实践——一个意外的BUG

    convert_int_to_char函数在使用时出现过一个BUG. 当使用值是13200020099时,返回的字符串是"13200020111",结果是错误的. 在gcc编译器里 ...

  2. 用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机

    原文:用MVVM模式开发中遇到的零散问题总结(5)--将动态加载的可视元素保存为图片的控件,Binding刷新的时机 在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打 ...

  3. [原译]一步步教你制作WPF圆形玻璃按钮

    原文:[原译]一步步教你制作WPF圆形玻璃按钮 图1 1.介绍 从我开始使用vista的时候,我就非常喜欢它的圆形玻璃按钮.WPF最好的一个方面就是允许自定义任何控件的样式.用了一段时间的Micros ...

  4. QLocalServer与QLocalSocket进程通讯

    在Qt中,提供了多种IPC方法,作者所用的是QLocalServer和QLocalSocket.看起来好像和Socket搭上点边,实则底层是windows的name pipe.这应该是支持双工通信的. ...

  5. linux 用蓝牙和手机通信

    加载模块: # modprobe hci_usb    # modprobe rfcomm    # hciconfig hci0 up # hciconfig hci0 up 查看状况: # hci ...

  6. windows下,Qt Creator 中javascript调试器安装并使用

    最开始使用Qt Creator时,想使用断点来调试javascript代码.但在按下debug键后,却提示调试器未配置,让我比较郁闷. 好了,郁闷的是说了,咱们来说说高兴的.要Qt Creator调试 ...

  7. WPF判断两个PNG图片是否碰撞

    这个方法有几个前提 1.两个Image必须在一个Canvas中 2.两个Image的Canvas.Top和Canvas.Left必须赋值 上一篇讲了判断一个PNG图片某个点是否透明 这个基本类似的方法 ...

  8. C#二分查找法 破洞百出版本

    二分查找法在数据繁多的数据中查找是一种快速的方法,每次查找最多需要的次数 为2的n次方小于总个数. 当然是有前提的,就是需要把数据先排好序,这里指的都是数值型的数据. 基本思想就是把需要找的值与排序好 ...

  9. LockWindowUpdate的函数的用法(不忽略消息,只是暂时不响应,但WM_SETREDRAW根本不接受重绘消息)

    Application.ProcessMessages;LockWindowUpdate(Self.Handle);  //锁住当前窗口 LockWindowUpdate(0)//解除锁定窗口 Loc ...

  10. 自定义QT窗口部件外观之QStyle

    自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感:二是使用Qt样式表. Q ...