当前位置: 首页 > 后端技术 > Python

Django日志-输出到日志文件

时间:2023-03-25 22:06:52 Python

我们都知道日志在项目中很重要,因为项目在服务器上运行时没有日志记录bug,我们可能连bug都不知道存在。以前在学校没想过自己做开发,现在想想日志真的少不了。首先了解日志的5个级别:debug:用于调试目的的低级系统信息info:常用系统信息列表内容warning:描述发生的小问题error:描述发生的主要问题critical:描述发生的严重问题第一步问题:在Django中配置setting.py文件LOGGING={'version':1,'disable_existing_loggers':FalseifDEBUGelseTrue,#是否禁用已有的logger'formatters':{#日志信息显示格式'verbose':{'format':'%(levelname)s%(asctime)s%(module)s%(lineno)s%(message)s'#"class":"pythonjsonlogger.jsonlogger.JsonFormatter"},'simple':{'format':'%(levelname)s%(asctime)s%(module)s%(funcName)s%(lineno)d%(message)s'#"class":"pythonjsonlogger.jsonlogger.JsonFormatter"},#日志级别+时间日期+模块名+函数名+行号+记录信息},'filters':{#过滤日志'require_debug_true':{#djangoonly以调试模式输出Log'()':'django.utils.log.RequireDebugTrue',},},'handlers':{#日志处理方式'console':{#输出日志到终端'level':'DEBUG'ifDEBUGelse'INFO','filters':['require_debug_true'],#调试为真输出'class':'logging.StreamHandler','formatter':'verbose'},'info':{#输出日志到文件'level':'INFO','class':'logging.handlers.RotatingFileHandler','filename':os.path.join(BASE_DIR+'/logs/',"info.log"),#日志文件位置'maxBytes':300*1024*1024,#300Msize'backupCount':10,'formatter':'verbose','encoding':'utf-8'},'demo':{#专门定义一个日志来收集特定信息'level':'INFO','class':'logging.handlers.RotatingFileHandler',#保存到文件,自动旋转'filename':os.path.join(BASE_DIR+'/logs/',"demo.log"),'maxBytes':1024*1024*50,#日志大小50M'backupCount':5,'formatter':'verbose','encoding':"utf-8"},'city':{#专门定义一个日志'level'来收集特定信息:'INFO','class':'logging.handlers.RotatingFileHandler',#保存到文件,自动切分'filename':os.path.join(BASE_DIR+'/logs/',"city.log"),'maxBytes':1024*1024*50,#logsize50M'backupCount':5,'formatter':'verbose','encoding':"utf-8"},},'loggers':{#记录器"django":{#默认记录器使用以下配置"handlers":["info","console"],"propagate":True,"level":"INFO"},'demo_log':{#名为'demo'的记录器也单独处理'handlers':['demo'],"propagate":True,'level':'INFO',},'city_log':{#名为'city'的记录器也单独处理'handlers':['city'],"propagate":True,'level':'INFO',},}}formatters:日志信息显示的格式,可以定义多种格式,上面定义了'verbose'和'simple'两种格式:例如'verbose'的格式is'%(levelname)s%(asctime)s%(module)s%(lineno)s%(message)s'将像这样打印在日志文件中:INFO2019-12-0509:04:28,707views第234章打印出来!!!handlers:日志处理方法,您可以定义多种方法。一般来说,我习惯每次添加一个新的Django子应用程序。上面的'demo'和'city'是子应用loggers:loggers,我习惯写和handlers一一对应的。handlers和loggers都有level,不同的是:1.loggers中的level表示可接受的错误级别,也就是说loggers接受level或更高级别的错误,由propagate决定:如果propagate为True,则传播向上;2.handlers的级别表示日志级别注意:在项目根目录下新建logs目录,用于存放日志文件。日志文件不需要手动创建,在项目运行时会自行创建。第二步:添加exceptions.py文件封装日志importlogginglogger=logging.getLogger('django')logger_demo=logging.getLogger('demo_log')logger_city=logging.getLogger('city_log')第三步:打印loglogger.info("Iprintontheconsoleandprintoninfo.log")logger.error("Iprintontheconsoleandprintoninfo.log")logger_demo.info("Iprintondemo.logOn")logger_demo.error("Iprintondemo.log")logger_city.info("Iprintoncity.log")logger_city.error("Iprintoncity.log")这样就搞定了,是不是很简单很容易呢!!!