importosimport logging.config #不能只导入logging

BASE_DIR=os.path.dirname(os.path.dirname(__file__))#DB_PATH=os.path.join(BASE_DIR,'db')#DB_PATH=r'%s\db' %BASE_DIR

#定义日志文件的路径

LOG_PATH=os.path.join(BASE_DIR,'log','access.log')#LOG_PATH=r'%s\log\access.log' %BASE_DIR#BOSS_LOG_PATH=r'%s\log\boss.log' %BASE_DIR

#定义三种日志输出格式 开始

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'\'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

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__)) #log文件的目录

logfile_name = 'all2.log' #log文件名

#如果不存在定义的日志目录就创建一个

if notos.path.isdir(logfile_dir):

os.mkdir(logfile_dir)#log文件的全路径

logfile_path =os.path.join(logfile_dir, logfile_name)#log配置字典

LOGGING_DIC ={'version': 1,#禁用已经存在的logger实例

'disable_existing_loggers': False,#定义日志 格式化的 工具

'formatters': {'standard': {'format': standard_format

},'simple': {'format': simple_format

},'id_simple': {'format': id_simple_format

},

},#过滤

'filters': {}, #jango此处不同

'handlers': {#打印到终端的日志

'stream': {'level': 'DEBUG','class': 'logging.StreamHandler', #打印到屏幕

'formatter': 'simple'},#打印到文件的日志,收集info及以上的日志

'access': {'level': 'DEBUG','class': 'logging.handlers.RotatingFileHandler', #保存到文件

'formatter': 'standard','filename': logfile_path, #日志文件路径

'maxBytes': 1024*1024*5, #日志大小 5M

'backupCount': 5,'encoding': 'utf-8', #日志文件的编码,再也不用担心中文log乱码了

},#打印到文件的日志,收集error及以上的日志

'boss': {'level': 'ERROR','class': 'logging.handlers.RotatingFileHandler', #保存到文件

'formatter': 'id_simple','filename': BOSS_LOG_PATH, #日志文件

#'maxBytes': 1024*1024*5, # 日志大小 5M

'maxBytes': 300, #日志大小 5M

'backupCount': 5,'encoding': 'utf-8', #日志文件的编码,再也不用担心中文log乱码了

},

},#logger实例

'loggers': {#默认的logger应用如下配置

'': {'handlers': ['stream', 'access','boss'], #这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕

'level': 'DEBUG','propagate': True, #向上(更高level的logger)传递

},#logging.getLogger(__name__)拿到的logger配置

#这样我们再取logger对象时logging.getLogger(__name__),不同的文件__name__不同,这保证了打印日志时标识信息不同,

#但是拿着该名字去loggers里找key名时却发现找不到,于是默认使用key=''的配置

},

}defload_my_logging_cfg():

logging.config.dictConfig(LOGGING_DIC)#导入上面定义的logging配置

logger = logging.getLogger(__name__) #生成一个log实例

logger.info('It works!') #记录该文件的运行状态

if __name__ == '__main__':

load_my_logging_cfg()#从common.py引用,要传入name,且有返回log实例#import logging.config#import logging#from conf import setting

#def get_logger(name):

#logging.config.dictConfig(setting.LOGGING_DIC) # 导入上面定义的logging配置

#l1=logging.getLogger(name)

#return l1

#src.py#logger1 = common.get_logger('查看余额')#logger1.debug( dic_user_check['money'] )

python日志配置文件解释_python 之 logger日志 字典配置文件相关推荐

  1. java logger 日志级别_Java如何设置Logger日志级别?

    在此示例中,您将看到我们如何更改或设置Logger日志级别.日志级别将告诉您Logger将记录哪个特定的日志消息. Logger如果级别等于或高于级别,则仅记录日志消息Logger.例如,当级别设置L ...

  2. python考试名词解释_python公开课|python专有名词居然有这么多,python专有名词解释已做好...

    [摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注py ...

  3. python日志分析库_python高效解析日志入库

    python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如 ...

  4. mysql二进制日志查看工具_Python 简易web日志查看工具可改装为命令行工具

    原理 利用python的paramiko库模拟ssh登录操作,并执行tail命令 所需库 flask.paramiko.gevent,python3 部分代码 @app.route('/api/do' ...

  5. python动态语言解释_python是动态语言吗

    动态语言的定义:动态编程语言是高级程序设计语言的一个类别,在计算机科学领域已被广泛应用. 它是一类在执行时能够改变其结构的语言:比如新的函数.对象.甚至代码能够被引进,已有的函数能够被删除或是其它结构 ...

  6. python函数名词解释_python的面向对象程序设计(名词解释及实例)

    类的定义 class Student: #定义类属性(类似于java的静态成员变量) country = "China" #构造函数 def __init__(self,name, ...

  7. python 案例串接_Python基础系例--字典串操作

    字符串 字符串是由数字,字母.下划线组成的一串字符 创建字符串,可以使用单引号和双引号: var1 ='Hello World!' var2="Hello World!" 访问字符 ...

  8. python编程单词排序_Python编程20:字典的遍历和排序

    #少儿编程# 字典的遍历 1)通过遍历key来遍历字典 所谓遍历,简单点就说就是所有的值都访问一遍.Python字典的遍历有几种方式: 遍历key有两种方式.一种如图1中的红框内的代码: 图1 for ...

  9. python的dict类型_python数据类型:dict(字典)

    一.字典的简单介绍 字典(dict)是python中唯一的一个映射类型.他是以{}括起来的键值对组成. 语法: {key1:value1,key2:value2......} 注意:key必须是不可变 ...

最新文章

  1. Android中资源文件夹res/raw和assets的使用
  2. 小学生python-小学生都开始学的Python编程到底是什么?
  3. fs_struct和file_struct关系
  4. 详解spark任务提交至yarn的集群和客户端模式
  5. 时间处理总结(二)oracle
  6. 一寸照纯红色底图片_高大上的图片精修,其实只需要学会这7个方面!
  7. shell脚本实现一个彩色进度条
  8. linux查看redis没有权限,在linux上安装redis并设置权限
  9. 93、App Links (应用程序链接)实例
  10. 【Unity项目实战】手把手教学:飞翔的小鸟(2)脚本编写
  11. 友盟 android版本统计,友盟统计下载_友盟统计安卓版下载_友盟统计手机版下载_友盟统计app_易玩网...
  12. 数据库设置定期删除14天前的数据
  13. flink的内存管理器MemoryManager
  14. 关闭删库跑路的后门,打造高可用的MySQL
  15. dynamic 365 前端操作
  16. 一款高颜值开源知识管理工具
  17. 美国军方又出黑科技,实现用意念控制无人机
  18. 不能用来修饰interface的有
  19. 黑盒测试和白盒测试,覆盖率的测试
  20. css中flex: initial、flex:0、flex:1、flex:none、flex:auto的区别和使用场景

热门文章

  1. mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...
  2. ABP文档 - Mvc 视图
  3. [工具] 解决sublime text运行javascript console无输出问题
  4. iOS如何判断当前网络的运营商
  5. ISA Server 2006 升级到 TMG2010
  6. 老司机做VR视频,需要什么样的全景相机?
  7. [转]Xvid参数详解
  8. 相机标定(二)深入理解四大坐标系与其变换关系
  9. windows上使用cmake 编译yaml-cpp源码,生成yam-cpp.lib
  10. 优酷视频整段代理php,thinkphp仿优酷带数据源码|php仿优酷视频源码带后台功能强大...