添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
# 通常用于Linux系统下,使控制台输出的日志带颜色 class ColorFormatter ( logging . Formatter ) : log_colors = { 'CRITICAL' : '\033[0;31m' , 'ERROR' : '\033[0;33m' , 'WARNING' : '\033[0;35m' , 'INFO' : '\033[0;32m' , 'DEBUG' : '\033[0;00m' , def format ( self , record : LogRecord ) - > str : s = super ( ) . format ( record ) level_name = record . levelname if level_name in self . log_colors : return self . log_colors [ level_name ] + s + '\033[0m' return s class MyFilter400 ( logging . Filter ) : def filter ( self , record : LogRecord ) : if record . msg . startswith ( "4" ) : return True return False class MyFilter300 ( logging . Filter ) : def filter ( self , record : LogRecord ) : if record . msg . startswith ( "3" ) : return True return False LOG_LEVEL = logging . INFO LOGGER = { 'version' : 1 , 'disable_existing_loggers' : True , 'formatters' : { 'color' : { 'class' : '__main__.ColorFormatter' , # 如果你的模块不是写在启动程序中,请将__main__更换成你模块的路径,下同 'format' : '%(asctime)s [%(name)s] %(levelname)s: %(message)s' 'default' : { 'class' : 'logging.Formatter' , 'format' : '%(message)s' 'filters' : { 'filter_400' : { '()' : '__main__.MyFilter400' 'filter_300' : { '()' : '__main__.MyFilter300' 'handlers' : { 'console' : { 'level' : LOG_LEVEL , 'class' : 'logging.StreamHandler' , 'formatter' : 'color' , 'file1' : { 'level' : LOG_LEVEL , 'class' : 'logging.FileHandler' , 'mode' : 'w' , 'formatter' : 'default' , 'filename' : '400_log.txt' , 'encoding' : 'utf-8' , 'filters' : [ 'filter_400' ] 'file2' : { 'level' : LOG_LEVEL , 'class' : 'logging.FileHandler' , 'mode' : 'w' , 'formatter' : 'default' , 'filename' : '300_log.txt' , 'encoding' : 'utf-8' , 'filters' : [ 'filter_300' ] 'loggers' : { '__main__' : { 'handlers' : [ 'file1' , 'file2' , 'console' ] , 'level' : LOG_LEVEL , logging . config . dictConfig ( LOGGER ) logger = logging . getLogger ( __name__ ) logger . debug ( '200,this is a logger debug message' ) logger . info ( '302,this is a logger info message' ) logger . warning ( '301,this is a logger warning message' ) logger . error ( '404,this is a logger error message' ) logger . critical ( '500,this is a logger critical message' ) print ( "%s" % __name__ )

运行效果图:
控制台:
在这里插入图片描述
文件:
3开头的写入到300_log.txt
4开头的写入到400_log.txt

特别注意,使用过滤器的一个问题

class MyFilter400And500(logging.Filter):
    def filter(self, record: LogRecord):
        if record.msg.startswith("4") or record.msg.startswith("5"):
            return True
        return False
# record.msg = "404, %s, %s" 
logger.info(f"{status_code}, %s, %s", website, link)
# record.msg = "%s, %s, %s",这就导致过滤器返回False
logger.info("%s, %s, %s", status_code, website, link)

因此,如果发现消息没有写入文件,可能是消息格式的问题。
目前,官方推荐字符串格式化的方式就是第一种方式,%s.format()的方式都不如这个好。但是如果你的项目中使用了sentry,在打印错误信息的时候就推荐用%s的方式了,因为sentry会将上面第二种方式的消息统归为一类,如果用第一种方式,每个不同的status_code就是一类错误消息了。

根据需求,父进程负责创建并维护子进程的数量,具体开启的子进程个数为服务器cpu的核心数。子进程负责从redis任务队列中获取任务,并执行任务。子进程在执行任务过程中,需要打印日志到各任务对应的日志文件中(一个任务对应一个日志文件)。 进程A在执行任务a时,会创建日志文件a.log,并将执行任务a时
浏览器打开 可能我们经常会使用print来输出信息到窗口,但当我们有很多个py文件需要运行,项目比 较庞大的到时候,print简直就是太low了点了。那么我们可以使用强大的logging模块,把 输出到指定的本地pc某个路径的文件中。 一、logging的框架1、 Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志2、 Handlers: 决定将日志记录分配至正确的目的地3、 Fi... 浏览器打开 思路:为logger设置2个handler,再对2个handler设置不同的filter进行日志过滤。 通过supervisor管理项目时,会有stdout和stderr两种日志路径的设置方式,通过给一个logger设置2个StreamHandler后,分别对handler设置日志级别的过滤,实现日志的分级输出。 import logging import sys log = logging.g... 浏览器打开 #-*- coding: utf-8 -*-importosimporttimefrom logging.handlers importRotatingFileHandlerimportloggingimportinspectdir= os.path.dirname(__file__)handlers= {logging.NOTSET: os.path.join(dir, 'notset.log'... 浏览器打开 python日志https://www.cnblogs.com/nancyzhu/p/8551506.html 日志是跟踪软件运行时所发生的事件的一种方法。软件开发者在代码中调用日志函数,表明发生了特定的事件。事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数据)。事件还具有开发者归因于事件的重要性;重要性也可以称为级别或严重性。 loggin... 浏览器打开 通常在运行代码时,我们往往需要使用logging模块记录代码在运行过程中的一些信息作为日志,方便在代码运行完成后进行判断和检查。但是如果将所有级别(https://blog.csdn.net/Ximerr/article/details/114675297)的日志都写在一个文件中,往往会使得日志文件大小庞大,及时使用日志分割(https://blog.csdn.net/Ximerr/article/details/114677671)也会因为无法区分正常级别日志和错误级别日志从而给调试代码、定问问题带来麻烦 浏览器打开 我更喜欢使用配置文件。它允许我在从开发到发布的过程中切换日志级别、位置等,而无需更改代码。我只是用相同的名称和定义的记录器打包不同的配置文件。import logging.configif __name__ == '__main__':# Configure the logger# loggerConfigFileName: The name and path of your configurat... 浏览器打开不同级别的logging 日志信息写入不同文件# -*- coding: utf-8 -*-import osimport timeimport loggingimport inspectfrom logging.handlers import RotatingFileHandlerdir = os.path.dirname(__file__)dir_time = time.strftime(... 浏览器打开