在训练中优雅地使用日志工具CiLog

在训练中优雅地使用日志工具CiLog

oyxy2019 57 2024-09-07

在训练中优雅地使用日志工具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):否替换内置的 print 函数,默认为 False。如果设置为 True,所有 print 输出将通过日志记录器处理。
  • kwargs:这是一个可选的字典参数,用于传递额外的配置选项。常见选项包括:
    • file_mode (str): 文件的打开模式,默认值是 'a'(追加模式)。
    • file_level (str): 文件日志的级别,支持 DEBUG, INFO, WARNING, IMPORTANT, ERROR, CRITICAL, MAIL,默认是 '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 -
MAIL -

进阶使用

代替打印

设置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#程序已运行完成,请及时查看结果')

运行成功结果截图:

cilogMail.jpg

函数封装版本:不使用日志功能单纯发送邮件

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('程序已运行完成,请及时查看结果')