一、概念
日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以在他们的代码中调用日志记录相关的方法来表明发生了某些事件,通过一个描述性的消息来描述这个事件,该消息能够可选的包含可变数据。而事件有重要性的概念,重要性被称为严重性级别。
二、日志的作用
通过记录和分析日志可以了解一个系统或软件程序运行情况是否正常,也可以在应用程序出现故障时快速定位问题。一般可以分为三种:1.程序调试 2.了解软件程序运行情况是否支持 3.软件程序运行故障分析和问题定位。
三、日志的级别
日志级别有很多种,我们一般常用的有4种,日志级别右低到高分别为:DEBUG-INFO-WARN-ERROR。
DEBUG:(调试):开发调试日志。一般来说,在系统实际运行过程中,不会输出该级别的日志。因此,开发人员可以打印任何自己觉得有利于了解系统运行状态的东东。不过很多场景下,过多的DEBUG日志,并不是好事,建议是按照业务逻辑的走向打印。打个比方,打印日志就像读书时划重点,如果导出都是重点,也就失去了重点。
INFO(通知):INFO日志级别主要用于记录系统运行状态等关联信息。该日志级别,常用于反馈系统当前状态给最终用户。所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
WARN(警告):WARN日志常用来表示系统模块发生问题,但并不影响系统运行。 此时,进行一些修复性的工作,还能把系统恢复到正常的状态。
ERROR(错误):此信息输出后,主体系统核心模块正常工作,需要修复才能正常工作。 就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
四、日志的内容
一条日志信息对应的是一个服务器托管网事件的发生,而一个事件通常需要包括以下内容:
1.发生时间
2.发生位置
3.严重长度(日志级别)
4.日志内容
五、日志的使用
导入:
import logging
logging使用很简单,使用basicConfig()方法就能满足基本的使用需要,如果方法没有传入参数,会根据默认配置创建日志对象。
可选参数如下图所示:
参数名称 |
参数描述 |
filename |
日志输出到文件的文件名 |
filemode |
文件模式,r[+]、w[+]、a[+] |
format |
日志输出的格式 |
datefat |
日志附带日期时间的格式 |
level |
设置日志输出级别 |
指定日志输出级别:
import logging
# 默认的日志输出级别为warn 小于这个日志级别的不会输出
logging.debug('debug')
logging.info('info')
logging.warning('warn')
logging.error('error')
输出:
WARNING:root:warn
ERROR:root:error
使用baseconfig()来指定日志输出级别:
import logging
# 默认的日志输出级别为warn 小于这个日志级别的不会输出
# 指定日志输出级别
logging.basicConfig(level=logging.DEBUG)
logging.debug('debug')
logging.info('info')
logging.warning('warn')
logging.error('error')
输出:
DEBUG:root:debug
INFO:root:info
WARNING:root:warn
ERROR:root:error
输出日志到文件:
import logging
# 默认的日志输出级别为warn 小于这个日志级别的不会输出
# 指定日志输出级别
logging.basicConfig(level=logging.DEBUG,filename='test.log')
logging.debug('debug')
logging.info('info')
logging.warning('warn')
logging.error('error')
test.log文件内容如下:
添加重要信息:
asctime:当前时间
levelname:输出日志级别
filename:文件名称
lineno:报错文件行号
message:输出信息服务器托管网
代码实例如下:
import logging
# 默认的日志输出级别为warn 小于这个日志级别的不会输出
# 指定日志输出级别
logging.basicConfig(level=logging.DEBUG, filename='test.log', filemode='w', datefmt='%Y-%m-%d %H:%M:%S',
format="%(asctime)s %(name)s:%(levelname)s:%(message)s|%(filename)s:%(lineno)s")
logging.debug('debug')
logging.info('info')
logging.warning('warn')
logging.error('error')
输出:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
代码重构和设计模式是软件工程中两个重要的概念,它们有助于提高代码的可读性、可维护性和可扩展性。在本节中,我们将简要介绍代码重构的基本方法和一些常用的设计模式。 10.2.1. 代码重构 代码重构是在不改变软件外部行为的前提下,改进软件内部结构的过程。以下是一些…