在训练中优雅地使用日志工具CiLog
Github项目地址:https://github.com/CM-BF/CiLog
安装
方式1
支持pip安装,安装命令如下(国内源好像没有,需要切换默认源):
pip install cilog
方式2
如果方式1安装有问题,也可以直接从Github源码安装,把cilog目录直接拷贝到自己项目里调用。
基础使用
CiLog有7种消息类型:[‘DEBUG’, ‘INFO’, ‘WARNING’, ‘IMPORTANT’, ‘ERROR’, ‘CRITICAL’, ‘MAIL’]。这里先看前6种,因为’MAIL’需要配置邮箱,见下文“进阶使用”。
调用函数 create_logger
即可创建自定义日志记录器:
参数说明:
- name (str):日志记录器的名称,默认值
'CiLog'
。名字可以随便起,但如果重复创建必须要不同名,否则会报RecursionError错误。- file (str):日志文件的路径,默认为
None
。提供文件路径,日志便会被写入这个文件。- enable_mail (bool):是否启用邮件发送功能,默认为
False
。如果设置为True
,必须提供要mail_setting
参数提供必要的邮件配置。- use_color (bool):是否在控制台中使用彩色输出,默认为
True
。- sub_print (bool):否替换内置的
False
。如果设置为True
,所有- kwargs:这是一个可选的字典参数,用于传递额外的配置选项。常见选项包括:
- file_mode (str): 文件的打开模式,默认值是
'a'
(追加模式)。- file_level (str): 文件日志的级别,支持
DEBUG
,INFO
,WARNING
,IMPORTANT
,ERROR
,CRITICAL
,'INFO'
。- mail_level (str): 邮件日志的级别,默认是
'MAIL'
。- mail_setting (dict): 邮件配置,只有当
enable_mail=True
时才需要。该字典应包含邮件服务器、发件人地址、收件人地址、主题、凭据和安全设置等。- stack_level (str): 堆栈跟踪日志级别,默认是
'ERROR'
。- msg_fmt (dict): 定制的消息格式,按日志级别进行定义(如
'DEBUG'
,'INFO'
等)。
from cilog import create_logger
logger = create_logger(
name='l1',
file='./log.txt',
use_color=True,
)
logger.info('start')
logger.debug('here')
logger.warning('warn')
logger.error('Exception')
logger.critical('Program exit.')
logger.important('lal')
输出:
INFO: start
DEBUG: 09/07/2024 06:00:58 PM : here
WARNING: 1.py - line 12 : warn
ERROR: 09/07/2024 06:00:58 PM - 1.py - line 13 : Exception
CRITICAL: 09/07/2024 06:00:58 PM - 1.py - line 14 : Program exit.
IMPORTANT: 09/07/2024 06:00:58 PM : lal
对于不同消息类型:
消息类型 | 时间 | 位置 | 信息 |
---|---|---|---|
INFO | - | - | √ |
DEBUG | √ | - | √ |
WARNING | - | √ | √ |
ERROR | √ | √ | √ |
CRITICAL | √ | √ | √ |
IMPORTANT | √ | - | √ |
√ | - | √ |
进阶使用
代替打印
设置sub_print
参数为True,函数将不再返回logger
,而是接管系统的print函数。
在字符串前缀添加#消息类别#
即可使用日志功能,如果没有前缀,将使用一般打印功能。
前缀可以使用缩写,如INFO可以写成#I#, #In#, #inf#, #INFO#等,并且是大小写不敏感的。
from cilog import create_logger
create_logger(
name='l1',
file='./log.txt',
use_color=True,
sub_print=True
)
print('#INFO#start')
print('#DE#Here!')
print('#WA#warning')
发送邮件
设置enable_mail
参数为True,配置mail_setting
,就可以实现在训练完成时自动给邮箱发邮件,当代码运行时间很长的时候很好用。
首先需要开启邮箱的SMTP服务并生成授权码,我这里用的是QQ邮箱,参见SMTP/IMAP服务-QQ邮箱。
from cilog import create_logger
mail_setting = {
'mailhost': ('smtp.qq.com', 587), # 邮件服务器host,端口
'fromaddr': 'your_email@qq.com', # 发件人邮箱
'toaddrs': ['your_email@qq.com'], # 收件人邮箱,可以填发件人邮箱,可填多个邮箱
'subject': 'CiLog title', # 邮件主题
'credentials': ('your_email@qq.com', '授权码'), # 发件人邮箱,授权码
'secure': (), # 安全协议,无需修改
'timeout': 10.0, # 超时时间,无需修改
}
create_logger(
name='l1',
file='./log.txt',
use_color=True,
sub_print=True,
enable_mail=True,
mail_setting=mail_setting
)
print('#INFO#start')
print('#DEBUG#here')
print('#WARNING#warning')
print('#ERROR#error')
print('#CRITICAL#critical')
print('#IMPORTANT#important')
print('#MA#程序已运行完成,请及时查看结果')
运行成功结果截图:
函数封装版本:不使用日志功能单纯发送邮件
def send_email(message):
from cilog import create_logger
mail_setting = {
'mailhost': ('smtp.qq.com', 587), # 邮件服务器host,端口
'fromaddr': 'your_email@qq.com', # 发件人邮箱
'toaddrs': ['your_email@qq.com'], # 收件人邮箱,可以填发件人邮箱,可填多个邮箱
'subject': 'CiLog title', # 邮件主题
'credentials': ('your_email@qq.com', '授权码'), # 发件人邮箱,授权码
'secure': (), # 安全协议,无需修改
'timeout': 10.0, # 超时时间,无需修改
}
logger = create_logger(
name='logmail',
use_color=True,
enable_mail=True,
mail_setting=mail_setting
)
logger.mail(message)
if __name__ == '__main__':
send_email('程序已运行完成,请及时查看结果')