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'
,
'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
logger.info(f"{status_code}, %s, %s", website, link)
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(...
浏览器打开