Python中logging日志的用法

例1:logging.FileHandler()和logging.StreamHandler()

import logging
import os

# 路径获取
root = os.path.dirname(os.path.realpath(__file__))
# log_path = os.path.join(root, "example.log")
# name = "example.log"

debug = False
# when debug is true, show DEBUG and INFO in screen
# when debug is false, show DEBUG in file and info in both screen&file
# INFO will always be in screen
# create a logger
logger = logging.getLogger()        # logging.FileHandler()处再设置文件位置和文件名
# critical > error > warning > info > debug > notset
logger.setLevel(logging.DEBUG)  # level=logging.DEBUG 表明所有>= DEBUG 这个level的都会被输出

# define the formate
formatter = logging.Formatter('%(asctime)s: %(message)s', "%Y-%m-%d %H:%M")
# create another handler for output log to console
console_handler = logging.StreamHandler()
if debug:
    console_handler.setLevel(logging.DEBUG)
else:
    console_handler.setLevel(logging.INFO)
# create a handler for write log to file
logfile = os.path.join(root, 'run.log')
print('Creat Log File in: ', logfile)
file_handler = logging.FileHandler(logfile, mode='w')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# add Handler to logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# test
logger.debug('this is a {} debug message'.format(1))
logger.info('this is an info message')
logger.debug('this is a debug message')
logger.info('this is an info message')
logger.debug('this is a debug message')
logger.info('this is an info message')

功能:直接看代码理解的更快,以上代码主要实现:同时在控制台和日志文件输出日志内容,并根据不同的日志等级输出日志。若debug为False,则在控制台只输出debug级别的日志,日志文件中输出debug和info级别的日志;若debug为True,则控制台和日志文件均输出debug和info级别的日志。因此,若想控制台输出和日志文件的输出保持一致,设置debug即可。ps:仔细看代码的注释,理解起来很容易的。

代码运行结果:

console:

log file :

封装版:

# logger.py

import os
import logging
from datetime import datetime


def get_logger(root, name=None, debug=True):
    # when debug is true, show DEBUG and INFO in screen
    # when debug is false, show DEBUG in file and info in both screen&file
    # INFO will always be in screen
    # create a logger
    logger = logging.getLogger(name)
    # critical > error > warning > info > debug > notset
    logger.setLevel(logging.DEBUG)

    # define the formate
    formatter = logging.Formatter('%(asctime)s: %(message)s', "%Y-%m-%d %H:%M")
    # create another handler for output log to console
    console_handler = logging.StreamHandler()
    if debug:
        console_handler.setLevel(logging.DEBUG)
    else:
        console_handler.setLevel(logging.INFO)
    # create a handler for write log to file
    logfile = os.path.join(root, 'run.log')
    print('Creat Log File in: ', logfile)
    file_handler = logging.FileHandler(logfile, mode='w')
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)
    # add Handler to logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    return logger

# mian.py

import os
import logger

root = os.path.dirname(os.path.realpath(__file__))
dataset = "log"
log_path = os.path.join(root, dataset)
if not os.path.isdir(log_path):
    os.makedirs(log_path, exist_ok=True)
logger = logger.get_logger(log_path,'run.txt')
logger.debug("this is test")

例2:简单版

from loguru import logger

logger.add("log/file_{time}.log", level="TRACE", rotation="100 MB")
logger.info("test")

结果:

控制台

日志文件

参考:

loguru.logger — loguru documentation

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Pythonlogging模块提供了一种灵活且可配置的方式来记录信息。通过使用不同的handler、formatter和logger对象的组合,可以控制日志消息的输出方式、输出位置和格式。使用logging模块可以在代码记录各种级别的消息,例如调试信息、警告、错误和致命错误。下面是一个简单的例子: ```python import logging # 创建一个logger logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) # 创建一个文件handler,用于写入日志文件 fh = logging.FileHandler('mylog.log') fh.setLevel(logging.DEBUG) # 创建一个控制台handler,用于输出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.ERROR) # 定义日志输出格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) # 将handler添加到logger logger.addHandler(fh) logger.addHandler(ch) # 记录日志 logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 上面的代码创建了一个logger对象,并添加了一个文件handler和一个控制台handler。文件handler会将日志信息写入到指定的文件,控制台handler会将错误级别以上的日志信息输出到控制台。该例子还定义了日志信息的格式,最后通过调用logger对象的各个方法来记录不同级别的日志信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值