1 日志
1、介绍
- 日志(Log)是一个记录事件或系统活动的文件或数据集,日志是系统管理员和开发者用于诊断问题、监视系统性能、以及追踪用户活动的关键工具。包含以下:
-
系统日志:记录操作系统、应用程序、硬件组件等的事件和错误。
-
应用程序日志:记录特定应用程序的运行状态、用户活动、异常等。
-
安全日志:记录与安全相关的事件,如登录尝试、权限更改、防火墙活动等。
-
数据库日志:记录数据库的更改、查询、事务等。
-
Web服务器日志:记录Web服务器的活动,如访问者的IP地址、请求的资源、HTTP状态代码等。
2、结构
- 日志通常具有时间戳,以便可以按照时间顺序查看事件。
- 日志可能包含其他元数据,如用户ID、进程ID、事件类型等。
3、日志分析
- 日志分析是处理和理解日志的重要步骤。通过使用日志分析工具,管理员和开发者可以:
- 识别和解决系统或应用程序问题。
- 监视系统性能和资源使用情况。
- 检测安全漏洞或未经授权的访问。
- 跟踪用户活动以进行审计或合规性检查。
4、关键因素
- 在设计和实施日志系统时,需要考虑的一些关键因素包括:
- 日志的存储和保留:确保有足够的存储空间来保存日志,并根据需要保留旧日志。
- 日志的访问和权限:控制谁可以访问和修改日志,以确保数据的安全性和完整性。
- 日志的传输和加密:如果需要将日志发送到远程位置进行存储或分析,应使用安全的传输方法(如TLS/SSL)来加密数据。
- 日志的解析和可视化:提供易于使用的工具来解析和可视化日志数据,以便管理员和开发者可以轻松理解其内容。
2 模块
1、介绍
- logging模块:Python标准库中的一个模块【不用安装】,它用于记录程序运行时的日志信息。
2、组件
- Logger(日志器):
- 负责记录日志信息。
- 可以设置日志级别、输出格式和输出位置等属性。
- Logger对象通常通过
logging.getLogger(name)
获取,其中name
是用于区分不同Logger的标识符。
- Handler(处理器):
- 用于指定将如何处理和输出日志消息。
- 可以将日志消息写入文件、控制台、网络等不同的目标。
- 常用的Handler有StreamHandler(输出到控制台)、FileHandler(输出到文件)等。
- Formatter(格式化器):
- 用于定义日志消息的显示格式。
- 默认格式包括时间戳、日志级别、日志名称和消息内容等信息。
- 可以根据需求自定义格式。
- Level(级别):
- 用于指定日志记录的级别,包括DEBUG、INFO、WARNING、ERROR和CRITICAL。
- 级别越高,记录的信息越少,通常用于控制日志的详细程度 【日志等级从低到高的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL】。
- 日志级别
-
Level(级别) 含义 描述 DEBUG 调试 程序调试bug时 INFO 信息 程序正常运行时 WARNING 警告 程序未按预期运行时 ERROR
错误 程序出错误时
CRITICAL 严重 特别严重的问题,导致程序不能再继续运行时
3、应用
- 开发应用程序或部署开发环境阶段:可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试。
- 应用上线或部署生产环境阶段:应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。
3 相关方法介绍
方法 | 功能描述 |
logging.getLogger(name) | 创建或获取Logger对象 |
setLevel() | 设置Logger的日志级别 |
setFormatter() | 设置Handler的日志格式化器 |
debug() | 使用Logger对象记录调试日志消息 |
info() | 使用Logger对象记录日志消息 |
warning() | 使用Logger对象记录警告日志消息 |
error() | 使用Logger对象记录错误日志消息 |
critical() | 使用Logger对象记录严重日志消息 |
getLogger() | 创建记录器对象 |
StreamHandler() | 创建标准流处理器 |
FileHandler() | 创建文件处理器 |
addHandler() | 添加处理器到记录器 |
Formatter() | 创建格式器 |
setFormatter() | 设置格式 |
1、logging.basicConfig(filename, level, format, datafmt)
- 功能:用来配置日志的基本选项。
- 参数:
- filename:指定日志输出到哪个文件,如果未指定则默认输出到控制台。
filemode
: 指定打开文件的模式,默认为'a'表示追加模式。format
: 指定日志的输出格式。datefmt
: 用于指定日期/时间的格式。level
: 设置日志的最低级别,即低于这个级别的日志将被忽略。
2、logging.debug(msg)
- 功能:记录调试的信息
- 参数:
- msg:日志记录的调试内容(str)
3、logging.info(msg)
- 功能:记录程序正常运行的信息
- 参数:
- msg:日志记录的运行内容(str)
4、logging.warning(msg)
- 功能:记录警告的信息
- 参数:
- msg:日志记录的警告内容(str)
5、logging.error(msg)
- 功能:记录错误的信息
- 参数:
- msg:日志记录的错误内容(str)
6、logging.critical(msg)
- 功能:记录严重错误的信息
- 参数:
- msg:日志记录的严重错误内容(str)
4 案例介绍
1、记录日志信息
import logging
# 将日志信息记录到example.log文件中,且仅记录比 INFO级别更高的日志才会被纪录到文件里
logging.basicConfig(filename='example.log',level=logging.INFO)
# 比INFO级别低,不会被记录
logging.debug('This message should go to the log file')
# 以下2种级别的日志会被记录
logging.info('So should this')
logging.warning('And this, too')
'''
就可以在 example.log 文件存储相应的数据
'''
2、标准流与文件流
import logging
from logging import StreamHandler
from logging import FileHandler
# 创建一个日志记录器
logger = logging.getLogger(__name__)
# 设置为DEBUG级别
logger.setLevel(logging.DEBUG)
# 标准流处理器,设置的级别为WARAING
stream_handler = StreamHandler()
stream_handler.setLevel(logging.WARNING)
logger.addHandler(stream_handler)
# 文件处理器,设置的级别为INFO
file_handler = FileHandler(filename="test.log")
file_handler.setLevel(logging.INFO)
logger.addHandler(file_handler)
logger.debug("this is debug")
logger.info("this is info")
logger.error("this is error")
logger.warning("this is warning")
3、格式器
import logging
from logging import StreamHandler
# 创建一个日志记录器
logger = logging.getLogger(__name__)
# 标准流处理器
stream_handler = StreamHandler()
stream_handler.setLevel(logging.WARNING)
# 创建一个格式器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 设置handler的格式
stream_handler.setFormatter(formatter)
# 添加到处理器
logger.addHandler(stream_handler)
logger.info("this is info")
logger.error("this is error")
logger.warning("this is warning")
- 格式器只能作用在处理器上,通过处理器的
setFromatter
方法设置格式器。 - 一个Handler只能设置一个格式器。
4、日志配置
- 可以将配置信息单独添加到配置文件,在使用时加载配置信息,实现配置与使用代码相分离。
# logging.conf
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
- 加载配置文件
import logging
import logging.config
# 加载配置
logging.config.fileConfig('logging.conf')
# 创建 logger
logger = logging.getLogger()
# 应用代码
logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")
【感谢】如果对您有所帮助,欢迎关注点赞与收藏,它将是我持续更新的巨大动力,送上比 还 的感谢!