logger 日志模块,第三方模块的使用

今日内容详细025

logger日志

#日志就是记录特定事件或活动的记录文件
    日志级别:
    CRITICAL : 50
    ERROR: 40
    WARNING : 30  (默认级别)
    INFO  : 20
    DEBUG : 10
    NOTEST : 0
    
#日志级别指的是产生日志的事件的严重程度
#设置一个级别后,严重程度低于设置值的日志消息将被忽略
debug()
info()
warning()
error()
critical()

#logging.basicConfig() 基本设置,设置日志记录器的level,格式字符串,可用参数如下

filename:用指定的文件名创建FileHandler,这样日志会被存储在指定的文件中

filemode:文件打开方式,在指定了filename时使用这个参数,默认值为'a',还可指定为'w'

format:指定handler使用的日志显示格式,日志以什么样的方式显示

datefmt:指定日期时间格式

level:设置rootlogger的日志级别

stream:用指定的stream创建StreamHandler,可以指定输出到sys.stderr,sys.stdout或者文件(f=open('test.log','w')),默认为sys.stderr,若同时列出filename和stream两个参数,则stream参数会被忽略

#fromat参数中可能用到的格式化字符串:
%(name)s Logger的名字
%(levelno)s  数字形式的日志级别
%(levelname)s  文本形式的日志级别
%(pathname)s   调用日志输出函数的模块名
%(filename)s   调用日志输出函数的模块的文件名
%(module)s     调用日志输出函数的模块名
%(funname)s    调用日志输出函数的函数名
%(lineno)d     调用日志输出函数的语句所在的代码行
%(created)f    当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d  输出日志信息时,自Logger创建以来的毫秒数
%(asctime)s  字符串形式的当前时间,默认格式是字符串时间,逗号后面是毫秒
%(thread)d  线程ID,可能没有
%(threadName)s  线程名,可能没有
%(process)d   进程ID,可能没有
%(message)s  用户输出的信息
 

file_handler = logging.FileHandler('x1.log', mode='a', encoding='utf-8')

# 日志存储格式
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(module)s -%(lineno)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',
    handlers=[file_handler],  # 处理方式 是写入文件
    level=logging.INFO  # 日志级别
)

logging.debug('你好') #定义写入的内容

日志的详细使用

#logging库提供了多个组件:Logger,Handler,Filter,Formatter
Logger:对象提供应用程序可直接使用的接口
Handler:控制日志产生的位置,文件里,控制台
Filter:提供了过滤日志信息的方法
Formatter:指定日志显示格式

setLevel :设置日志级别
getLogger : 可以创建一个具有指定名称的日志记录器对象


#产生一个名称来记录日志的
logger=logging.getLogger('张三')

#1.产生在文件
hd1=logging.FileHandler('x1.log',encoding='utf-8')
hd2=logging.FileHandler('x2.log',encoding='utf-8')

#2.产生在终端
hd3=logging.StreamHandler()

#formatter 写入日志的格式
f1=logging.Formatter(
    fmt='%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
)
f2=logging.Formatter(
    fmt='%(asctime)s - %(name)s -%(message)s',
    datefmt='%Y-%m-%d',
)

#以什么样的格式写入logger对象产生的日志
hd1.setFormatter(f1)
hd2.setFormatter(f2)
hd3.setFormatter(f2)

#以什么样的处理方式把我的logger对象产生的日志输出
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)

#设置级别
logger.setLevel(30)

#日志信息
logger.warning('30')

日志配置成字典格式使用

import logging
import logging.config

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

test_format = '%(asctime)s] %(message)s'

logfile_path = 'a3.log'
# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
         'test': {
            'format': test_format
        },
    },
    'filters': {},  # 过滤日志
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
        'other': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'test',
            'filename': 'a2.log',
            'encoding': 'utf-8',
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置  空字符串作为键 能够兼容所有的日志
        '': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
        'other': {
            'handlers': ['other',],
            'level': 'DEBUG',
            'propagate': False,
        },
    },
}


# 使用配置字典
logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置
logger1 = logging.getLogger('xxx')
logger1.debug('好好的 不要浮躁 努力就有收获')

pip第三方模块

pip python解释器提供
第三方模块不需要安装,直接拿来使用
pip list  #可以看安装了哪些模块

pip安装由于是从python官方下载,速度较慢,需换源
豆瓣:http://pypi.douban.com/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
华为云:https://repo.huaweicloud.com/repository/pypi/simple
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
中科大:https://pypi.mirrors.ustc.edu.cn/simple/

换源方法:
pip install django #默认使用python官方的
pip install -y numpy -i http://mirrors.aliyun.com/pypi/simple/ #临时换源

永久换源:
1 在文件地址栏输入:%APPDATA% 回车,快速进入 C:\Users\电脑用户\AppData\Roaming 文件夹中
-2 新建 pip 文件夹
-3 在文件夹中新建 pip.ini 配置文件
-4 配置文件写入:
如果想换源就直接把源的路径换了就可以了
    '''
    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple
    [install]
    use-mirrors =true
    mirrors =https://mirrors.aliyun.com/pypi/simple
    trusted-host =mirrors.aliyun.com
    '''
posted @   家购诗  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示