Python日志模块logging&JSON
日志模块的用法
json部分
先开一段测试代码:注意 str可以直接处理字典 eval可以直接将字符串转成字典的形式
dic={'key1':'value1','key2':'value2'}
data=str(dic)#字典直接转成字符串
print(type(data),data)
#
# with open('db.txt','w',encoding='utf-8') as f:
# f.write(str(dic))
#
with open('db.txt','r',encoding='utf-8') as f:
data=f.read()
print(data,type(data))
dic2=eval(data)
print(dic2,type(dic2))
原先目录结构为:

=======================================================logging begin===============================================================
settings.py
"""
Description:
Author:Nod
Date:
Record:
#---------------------------------v1-----------------------------------#
"""
#注意跨平台性
#os.path.join 用来拼接绝对路径 如果有2个头 就是C D的话,会取第二个
import os,sys
BaseDir=os.path.join('C:\\','a','b','c','d.txt')
print(BaseDir)#C:\\a\b\c\d.txt #如果有2个头 就是C D的话,会取第二个
BaseDir2=os.path.join('C:\\','a','b','D:\\','d.txt')
print(BaseDir2) BaseDir3=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BaseDir3)
#拼出access.log的路径
LOG_PATH=os.path.join(BaseDir3,'log','access.log')
print(LOG_PATH)
DB_PATH=os.path.join(BaseDir3,'db','user')
print(DB_PATH)
LIB_PATH=os.path.join(BaseDir3,'lib','common.py')
print(LIB_PATH) # 定义三种日志输出格式 开始
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' # log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
'id_simple' : {
'format' : id_simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': LOG_PATH, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
}, },
'loggers': {
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': False, # 向上(更高level的logger)传递
},
},
}
common.py
"""
Description:
Author:Nod
Date:
Record:
#---------------------------------v1-----------------------------------#
"""
from conf import setting
import logging.config
# def log(msg):
# with open(setting.LOG_PATH,'a',encoding='utf-8') as f:
# f.write('%s\n'%msg) def logger_handle(log_name):
logging.config.dictConfig(setting.LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(log_name) # 生成一个log实例
return logger
start.py
"""
Description:
Author:Nod
Date:
Record:
#---------------------------------v1-----------------------------------#
""" import os,sys
print(os.path.abspath(__file__)) #打印当前文件的绝对路径 BaseDir=os.path.dirname(os.path.abspath(__file__))#取到star的目录bin
#print(BaseDir)
BaseDir2=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #取到bin的目录ATM
#print(BaseDir2) #取到了ATM sys.path.append(BaseDir2) #添加到环境变量
from core import src
if __name__=='__main__':
src.run()
src.py
"""
Description:
Author:Nod
Date:
Record:
#---------------------------------v1-----------------------------------#
"""
from lib import common
def transfure():
print('转账')
msg='陈凯给周琪转账中....'
logger = common.logger_handle('转账')
logger.info(msg) def pay():
print('支付') def shopping_cart():
print('购物车') def run():
msg=""" 1 转账
2 支付
3 购物车 """
while True:
print(msg)
user_choice=input('choice:>>').strip()
if not user_choice:continue
if user_choice=='':
transfure()
elif user_choice=='':
pay()
elif user_choice=='':
shopping_cart()
================================================logging end============================================================
下面内容与实际使用无关,只是做个了解
日志模块分析代码
"""
Description:
Author:Nod
Date:
Record:
#---------------------------------v1-----------------------------------#
""" #日志级别对应不同的数字
#介绍
# import logging
# logging.basicConfig(
# # filename='access.log',
# #日志名 日志级别 日志模块 日志信息
# format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
# datefmt='%Y-%m-%d %H:%M:%S %p',
# level=10
# )
# logging.debug('debug is 调试') #10
# logging.info('info is 正常信息') #20
# logging.warning('warning is 警告信息') #30
# logging.error('error is 错误信息') #40
# logging.critical('critical is ') #50
#日志级别设置为30 30以上的会打印 30以下的不会打印 默认的日志级别是30 #日志模块的详细用法
"""
1 logger 产生日志
2 filter 基本不用 忽略
3 handler 接收logger传过来的日志 进行日志格式化
,可以打印到终端,也可以打印到文件 4 formatter 日志格式 logger-->handeler(可以多个)-->formatter 5 为handler绑定日志格式 6 """
# 1 logger 产生日志 import logging logger1=logging.getLogger('访问日志') # 3 handler 接收logger传过来的日志 进行日志格式化 sh=logging.StreamHandler() #打印到终端
fh1=logging.FileHandler('s1.log',encoding='utf-8')
fh2=logging.FileHandler('s2.log',encoding='utf-8') #4 formatter 日志格式
formatter1=logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p', ) formatter2=logging.Formatter( fmt='%(asctime)s = %(name)s = %(levelname)s =%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p', ) formatter3=logging.Formatter( fmt='%(asctime)s | %(name)s | %(levelname)s |%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p', ) # 5 为handler绑定格式 绑定handler与formatter的关系 sh.setFormatter(formatter1)
fh1.setFormatter(formatter2)
fh2.setFormatter(formatter3) #6 为logger绑定handler
logger1.addHandler(sh)
logger1.addHandler(fh1)
logger1.addHandler(fh2)
#7 设置日志级别 logger1可以设置级别 handler也可以设置级别
#logger对象的日志级别应该<=handler对象的日志级别
logger1.setLevel(10) #如果此处设置为50的话 则可以显示1条
sh.setLevel(10)
fh1.setLevel(10)
fh2.setLevel(10) #测试
logger1.debug('测试debug')
logger1.info('测试info')
logger1.warning('测试warning')
logger1.error('测试errror')
logger1.critical('测试critical')
Python日志模块logging&JSON的更多相关文章
- python日志模块logging
python日志模块logging 1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...
- Python 日志模块logging
logging模块: logging是一个日志记录模块,可以记录我们日常的操作. logging日志文件写入默认是gbk编码格式的,所以在查看时需要使用gbk的解码方式打开. logging日志等级: ...
- 『无为则无心』Python日志 — 64、Python日志模块logging介绍
目录 1.日志的作用 2.为什么需要写日志 3.Python中的日志处理 (1)logging模块介绍 (2)logging模块的四大组件 (3)logging日志级别 1.日志的作用 从事与软件相关 ...
- 【python】【logging】python日志模块logging常用功能
logging模块:应用程序的灵活事件日志系统,可以打印并自定义日志内容 logging.getLogger 创建一个log对象 >>> log1=logging.getLogger ...
- Python日志模块logging用法
1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...
- python日志模块logging学习
介绍 Python本身带有logging模块,其默认支持直接输出到控制台(屏幕),或者通过配置输出到文件中.同时支持TCP.HTTP.GET/POST.SMTP.Socket等协议,将日志信息发送到网 ...
- Python日志模块logging简介
日志处理是项目的必备功能,配置合理的日志,可以帮助我们了解系统的运行状况.定位位置,辅助数据分析技术,还可以挖掘出一些额外的系统信息. 本文介绍Python内置的日志处理模块logging的常见用法. ...
- Python 日志模块 logging通过配置文件方式使用
vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...
- python日志模块---logging
1.将日志打印到屏幕 import logging logging.debug('This is debug message---by liu-ke') logging.info('This is i ...
随机推荐
- configparser配置文件管理
写入内容到配置文件 import configparser config = configparser.ConfigParser() #实例化一个configparser对象,config={} co ...
- 【golang】kafka
这篇博客是用来记录用go安装及操作kafka库的时候踩到的坑~ 安装kafka库 首先我参考了博客:https://blog.csdn.net/tflasd1157/article/details/8 ...
- librdkafka安装和php扩展php-rdkafka安装
1.安装librdkafka mac下 brew install librdkafka linux下 git clone https://github.com/edenhill/librdkafk ...
- java项目改为web项目
1.进入项目目录,可看到.project文件,打开. 2.找到<natures...</natures代码段. 3.在第2步的代码段中加入如下标签内容并保存: <nature& ...
- Convert Binary Search Tree to Doubly Linked List
Convert a binary search tree to doubly linked list with in-order traversal. Example Given a binary s ...
- css.aa
出的不同(面是必考) 因为浏览器在解析第二个p的时候,因为字母之间没有空格,他会以为是是一个单词所以不会换行. 列表 1.无序列表ul 第一内部必须含有子标签<li></li> ...
- BiLstm原理
Lstm这里就不说了,直接说Bilstm. 前向的LSTM与后向的LSTM结合成BiLSTM.比如,我们对“我爱中国”这句话进行编码,模型如图所示. 前向的依次输入“我”,“爱”,“中国”得到三个向量 ...
- java面向对象编程(二)-构造方法(函数)
1.类的构造方法介绍 什么是构造方法呢?在回答这个问题之前,我们来看一个需求:我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接指定 ...
- CSS 文字概念小记
1.水平居中: 更多的是指宽度的居中,margin: 0 auto; 2.垂直居中: 是指高度的居中 PS:这个两个慨念我老是搞混,今天记录一下,防止下次又忘了
- VS2008 快捷键大全
转载自 https://www.cnblogs.com/likebeta/archive/2013/02/20/2919224.html Ctrl+E,D ---- 格式化全部 ...