【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏
文章目录
- 🚀一、了解日志
- 🌈二、日志作用
- 🌈三、了解日志模块
- ⭐四、日志级别
- 💥五、记录日志-基础
- ❤️六、记录日志-处理器handler
- 🎬七、记录日志-格式化记录
- ☔八、记录日志-配置logger
- 👊九、流程梳理
🚀一、了解日志
日志是记录了一系列事件或活动的文件。在计算机领域,它通常用于记录程序或系统的运行状况和维护信息,以便在需要时进行故障排除或回溯。通过分析日志文件,管理员可以了解系统的使用情况、问题发生的原因以及如何解决这些问题。
日志通常包含时间戳、事件描述、错误消息、警报等信息。它们可以按照不同的标准来分类和过滤,例如按照事件类型、日志级别、时间戳范围等。常见的日志类型包括系统日志、安全日志、应用程序日志等。
🌈二、日志作用
调试和故障排除:通过分析日志文件可以了解系统崩溃或出现异常的原因,进而进行修复和调试。
性能调优:通过记录系统性能指标和资源利用情况等信息,管理员可以了解系统的瓶颈所在,从而进行针对性的优化。
安全审计:日志可以记录系统的安全事件、访问控制和行为审计等信息,以便于发现并防止潜在的安全问题。
统计分析:管理员可以通过日志记录用户行为、系统使用情况、网络流量等信息进行统计分析,以便于优化服务和提高用户满意度。
🌈三、了解日志模块
logging 模块提供了一种灵活且易于使用的方式来记录应用程序的状态和调试信息。它允许将消息分发到多个处理程序(handlers),并支持不同级别的日志消息。logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;
⭐四、日志级别
在 logging 模块中,日志级别用于描述日志的重要程度。它们按照严重程度分为以下五个级别:DEBUG:最详细的日志信息,通常只在调试问题时使用;INFO:确认一切按预期运行;WARNING:表示发生了一些意外或异常情况,但是该软件还可以正常运行;ERROR:由于更严重的问题,软件已无法执行某些功能;CRITICAL:严重错误,表明程序本身可能无法继续运行。
默认情况下,logging 组件会关闭低级别的日志消息并仅记录 WARNING 级别及其以上的消息。如果需要记录更多详细信息,则需要将 Logger 的 level 属性设置为其他级别。
# DEBUG
# 最详细的调试信息,通常只在开发阶段使用。通过记录变量值、函数参数、分支走向等信息帮助调试人员解决问题。
# INFO
# INFO 级别的日志通常用于确认系统正在按预期运行。例如,记录请求的处理时间、数据库操作数量、任务的完成状态等。
# WARNING
# WARNING 级别的日志表示出现了一些意外或异常情况,但是该软件还可以正常运行。例如,数据缺失或配置文件格式错误等。
# ERROR
# ERROR 级别的日志表示由于更严重的问题,软件已无法执行某些功能。例如,数据库连接失败、文件无法打开等错误。
# CRITICAL
# 最高级别的日志级别,用于记录严重错误,表明程序本身可能无法继续运行。例如,内存耗尽、服务器崩溃等。
在应用程序中,通常会使用多个不同的日志级别来记录不同类型的事件。这使得开发人员可以快速识别和排除问题,并加快故障排除的过程。
# 开发应用程序或部署开发环境时,
# 可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试;
#
#
#
# 应用上线或部署生产环境时,应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。
# 日志级别的指定通常都是在应用程序的配置文件中进行指定的。
#
#
#
# 说明:
#
# -上面列表中的日志等级是从上到下依次升高的,
# 即:DEBUG < INFO < WARNING < ERROR < CRITICAL,
# 而日志的信息量是依次减少的;
#
# -当为某个应用程序指定一个日志级别后,
# 应用程序会记录所有日志级别大于或等于指定日志级别的日志信息,
# 而不是仅仅记录指定级别的日志信息,
# nginx、php等应用程序以及这里的python的logging模块都是这样的。
# 同样,logging模块也可以指定日志记录器的日志级别,
# 只有级别大于或等于该指定日志级别的日志记录才会被输出,小于该等级的日志记录将会被丢弃。
💥五、记录日志-基础
logging.getLogger(name=None) 是 logging 模块中的一个重要函数,用于创建并返回一个 logger 对象。这个函数可以接受一个字符串作为参数,该字符串表示要创建的 logger 的名称。如果未提供名称,则会创建一个名为 root 的默认 logger。
import logging# 创建一个 logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)# 将 StreamHandler 添加到 logger 中 --- StreamHandler处理器:将日志消息输出到标准输出或标准错误流。
logger.addHandler(logging.StreamHandler())# 记录一条日志消息
logger.info('This is an info message')
logging 模块定义了五个日志级别(从低到高):DEBUG、INFO、WARNING、ERROR 和 CRITICAL。默认情况下,只有 WARNING 以及更高级别的日志消息才会被记录。可以通过设置 Logger 的日志级别来控制哪些消息应该被记录。
logger.setLevel(logging.DEBUG) # 记录所有级别的日志消息
import logging# 创建一个 logger
logger = logging.getLogger('my_logger')# 设置日志级别
logger.setLevel(logging.DEBUG)# 将 StreamHandler 添加到 logger 中 --- StreamHandler处理器:将日志消息输出到标准输出或标准错误流。
logger.addHandler(logging.StreamHandler())# 发布日志消息
logger.debug('This is a debug message')# 创建了一个名为 'my_logger' 的 logger,设置其日志级别为 DEBUG,并发布了一条 DEBUG 级别的日志消息。
logging模块定义的模块级别的常用函数
函数 | 说明 |
---|---|
logging.debug(msg, *args, **kwargs) | 创建一条严重级别为DEBUG的日志记录 |
logging.info(msg, *args, **kwargs) | 创建一条严重级别为INFO的日志记录 |
logging.warning(msg, *args, **kwargs) | 创建一条严重级别为WARNING的日志记录 |
logging.error(msg, *args, **kwargs) | 创建一条严重级别为ERROR的日志记录 |
logging.critical(msg, *args, **kwargs) | 创建一条严重级别为CRITICAL的日志记录 |
logging.log(level, *args, **kwargs) | 创建一条严重级别为level的日志记录 |
logging.basicConfig(**kwargs) | 对root logger进行一次性配置 |
"""logging.log() 函数的参数说明:level:指定要记录的日志级别,可选的取值有 DEBUG、INFO、WARNING、ERROR、CRITICAL。*args:需要记录的一个或多个日志消息(字符串)。**kwargs:可选参数,包括 extra、exc_info、stack_info、etc.
"""
import logging
# 创建一个 logger
logger = logging.getLogger('my_logger')
# 设置日志级别
logger.setLevel(logging.DEBUG)
# 将 StreamHandler 添加到 logger 中 --- StreamHandler处理器:将日志消息输出到标准输出或标准错误流。
# logger.addHandler(logging.StreamHandler())
# 将一条消息记录到日志文件或控制台
logging.log(logging.INFO, 'This is an info message')
❤️六、记录日志-处理器handler
在 logging 模块中,处理器(handler)是一种组件,可以将日志记录到不同的位置,例如输出到文件、发送到电子邮件、发布至网络等等。每个 logger 可以拥有零个或多个 handler,用于控制将记录哪些消息到哪个位置。
logging 模块支持多种类型的处理器
# StreamHandler:将日志消息输出到标准输出或标准错误流。
#
# FileHandler:将日志消息输出到指定的文件中。
#
# RotatingFileHandler:类似于 FileHandler,但它可以自动轮换多个日志文件,以避免一个文件太大而无法存储问题。
#
# SMTPHandler:向指定的邮件地址发送日志消息。
#
# SysLogHandler:向系统日志服务(syslog)输出日志消息。
#
# NTEventLogHandler:向 Windows 事件日志输出日志消息。
import logging# 创建一个 logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)# 创建一个 StreamHandler 并设置日志级别为 INFO
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)# 将 StreamHandler 添加到 logger 中
logger.addHandler(console_handler)# 记录一条日志消息
logger.info('This is an info message')# 首先创建了名为 'my_logger' 的 logger 对象,将其日志级别设置为 INFO。
# 然后,创建了一个名为 console_handler 的 StreamHandler 并将它的日志级别设置为 INFO。
# 最后,将 handler 添加到 logger 中,并通过 logger.info() 方法发布一条 INFO 级别的日志消息。
使用处理器 handler 可以扩展 logging 模块的功能并将日志记录到不同的位置,这对于应用程序的运行时跟踪或调试非常有用。
🎬七、记录日志-格式化记录
在 logging 模块中,格式化记录(Formatted log record)是一种将日志消息格式化为字符串的方式,以便于输出和阅读。可以使用 Formatter 类来创建自定义的格式化记录,以满足特定应用程序需求。
logging模块中定义好的可以用于format格式字符串说明
字段/属性名称 | 使用格式 | 描述 |
---|---|---|
asctime | %(asctime)s | 将日志的时间构造成可读的形式,默认情况下是‘2016-02-08 12:00:00,123’精确到毫秒 |
name | %(name)s | 所使用的日志器名称,默认是’root’,因为默认使用的是 rootLogger |
filename | %(filename)s | 调用日志输出函数的模块的文件名; pathname的文件名部分,包含文件后缀 |
funcName | %(funcName)s | 由哪个function发出的log, 调用日志输出函数的函数名 |
levelname | %(levelname)s | 日志的最终等级(被filter修改后的) |
message | %(message)s | 日志信息, 日志记录的文本内容 |
lineno | %(lineno)d | 当前日志的行号, 调用日志输出函数的语句所在的代码行 |
levelno | %(levelno)s | 该日志记录的数字形式的日志级别(10, 20, 30, 40, 50) |
pathname | %(pathname)s | 完整路径 ,调用日志输出函数的模块的完整路径名,可能没有 |
process | %(process)s | 当前进程, 进程ID。可能没有 |
processName | %(processName)s | 进程名称,Python 3.1新增 |
thread | %(thread)s | 当前线程, 线程ID。可能没有 |
threadName | %(thread)s | 线程名称 |
module | %(module)s | 调用日志输出函数的模块名, filename的名称部分,不包含后缀即不包含文件后缀的文件名 |
created | %(created)f | 当前时间,用UNIX标准的表示时间的浮点数表示; 日志事件发生的时间–时间戳,就是当时调用time.time()函数返回的值 |
relativeCreated | %(relativeCreated)d | 输出日志信息时的,自Logger创建以 来的毫秒数; 日志事件发生的时间相对于logging模块加载时间的相对毫秒数 |
msecs | %(msecs)d | 日志事件发生事件的毫秒部分。logging.basicConfig()中用了参数datefmt,将会去掉asctime中产生的毫秒部分,可以用这个加上 |
import logging# 创建一个 logger 对象,并设置其日志级别为 INFO
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)# 创建一个 FileHandler,将日志记录到文件 'example.log' 中
fh = logging.FileHandler('example.log')# 将 FileHandler 添加到 logger 中
logger.addHandler(fh)# 创建一个 Formatter 对象并设置日志消息的格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)# 记录一条 INFO 级别的日志消息
logger.info('This is an info message')# 创建了名为 'my_logger' 的 logger 对象,并将其日志级别设为 INFO。接着,创建了一个 FileHandler 对象并将其添加到 logger 对象中。然后,通过 Formatter 类创建了一个格式化记录对象 formatter,并将其设置为日志消息的格式。最后,将 formatter 对象添加到 FileHandler 对象中,以便对每条日志消息进行格式化处理。# 当调用 logger.info() 方法写入日志消息时,该消息会被传递给已经设置了格式化记录的 FileHandler 对象并格式化为指定的字符串格式。例如,如果设置了 '%(asctime)s - %(name)s - %(levelname)s - %(message)s' 的格式化字符串,则会在每条日志消息中输出时间戳、logger 对象的名称、日志级别和消息内容。
import logging# 创建一个 logger 对象,并设置其日志级别为 INFO
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)# 创建一个 FileHandler,用于将日志记录到文件 'example.log' 中
fh = logging.FileHandler('example.log')# 设置 FileHandler 的日志级别为 DEBUG
fh.setLevel(logging.DEBUG)# 创建一个 Formatter 对象,用于设置日志消息的格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 将 Formatter 对象添加到 FileHandler 中
fh.setFormatter(formatter)# 将 FileHandler 添加到 logger 对象中
logger.addHandler(fh)# 记录一条 INFO 级别的日志消息
logger.info('This is an info message')# 记录一条 DEBUG 级别的日志消息
logger.debug('This is a debug message')# 首先创建了名为 'my_logger' 的 logger 对象,并设置其日志级别为 INFO。接着,创建了一个 FileHandler 对象,并指定要将日志记录到文件 'example.log' 中。然后,将 FileHandler 的日志级别设置为 DEBUG,并创建一个 Formatter 对象,以控制日志消息的格式。最后,将 Formatter 对象和 FileHandler 对象添加到 logger 中。# 在 logger 对象准备就绪后,可以通过调用 logger.info() 和 logger.debug() 方法发布不同级别的日志消息。这些消息将分别记录在 'example.log' 文件中,其中 INFO 级别的消息包含时间戳、logger 名称、日志级别和消息内容等信息,而 DEBUG 级别的消息则包含更多的细节信息,例如变量值和程序状态等。
格式化记录提供了一种控制和定制日志消息输出格式的方法,使其更容易阅读和理解。通过使用 Formatter 类,可以创建自定义的格式化记录并将其添加到 logger 对象中,以实现更灵活和有用的日志记录方案。
☔八、记录日志-配置logger
在 logging 模块中,可以使用 basicConfig() 函数或者通过编程的方式来配置 logger 对象的属性和行为。通常情况下,在应用程序开始执行时调用 basicConfig() 函数即可完成全局的基本配置。
logging.basicConfig参数字段
参数名称 | 描述 |
---|---|
filename | 指定日志输出目标文件的文件名(可以写文件名也可以写文件的完整的绝对路径,写文件名日志放执行文件目录下,写完整路径按照完整路径生成日志文件),指定该设置项后日志信息就不会被输出到控制台了 |
filemode | 指定日志文件的打开模式,默认为’a’。需要注意的是,该选项要在filename指定时才有效 |
format | 指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。 |
datefmt | 指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效 |
level | 指定日志器的日志级别 |
stream | 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常 |
style | Python 3.2中新添加的配置项。指定format格式字符串的风格,可取值为’%‘、’{‘和’$‘,默认为’%’ |
handlers | Python 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。 |
%Y 四位数的年份表示(000-9999)
%y 两位数的年份表示(00-99)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)
%p 上午AM 下午 PM
import logginglogging.basicConfig(filename='example.log', level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')# 记录一条日志消息
logging.info('This is an info message')# 首先调用了 basicConfig() 函数,并传递了一些参数来设置日志记录器的属性。例如,指定了要将日志消息记录到文件 'example.log' 中,设置了默认日志级别为 DEBUG,指定了日期时间格式,以及设置了一个自定义的日志消息格式。
# 之后可以通过标准的日志记录函数(如 logging.info())来记录日志消息,这些函数都将根据 global basicConfig() 配置的内容记录日志。
需要注意的是,如果在多个模块或文件中使用相同的 logger 对象,则必须确保在所有地方都调用了 basicConfig() 函数,或者手动对所有 logger 对象进行配置。否则,可能会出现不同部分记录的日志信息不一致的问题。总之,无论是使用 basicConfig() 函数还是编程方式来配置 logger 对象,都需要了解每个参数的含义和作用,并根据具体应用场景去设置它们。这些参数包括日志文件名、日志级别、日期时间格式、日志消息格式等方面。
import logging# 配置全局日志记录器属性
logging.basicConfig(filename='example.log', level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')# 创建一个 logger 对象
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)# 给 logger 添加处理程序 ConsoleHandler,将日志消息输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.addHandler(ch)# 记录不同级别的日志消息
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
👊九、流程梳理
# 1、创建一个logger# 2、设置下logger的日志的等级# 3、创建合适的Handler(FileHandler要有路径)# 4、设置下每个Handler的日志等级# 5、创建下日志的格式# 6、向Handler中添加上面创建的格式# 7、将上面创建的Handler添加到logger中# 8、打印输出logger.debug\logger.info\logger.warning\logger.error\logger.critical
import logging# 配置全局日志记录器属性
#logging.basicConfig(filename='example.log', level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')# 创建logger,如果参数为空则返回root logger
logger = logging.getLogger("nick")
logger.setLevel(logging.DEBUG) # 设置logger日志等级# 创建handler
fh = logging.FileHandler("example.log", encoding="utf-8")
ch = logging.StreamHandler()# 设置输出日志格式
formatter = logging.Formatter(fmt="%(asctime)s %(name)s %(filename)s %(message)s",datefmt="%Y/%m/%d %X"
)# 注意 logging.Formatter的大小写# 为handler指定输出格式,注意大小写
fh.setFormatter(formatter)
ch.setFormatter(formatter)# 为logger添加的日志处理器
logger.addHandler(fh)
logger.addHandler(ch)# 输出不同级别的log
logger.warning("警告")
logger.info("提示")
logger.error("错误")
相关文章:

【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏
文章目录 🚀一、了解日志🌈二、日志作用🌈三、了解日志模块⭐四、日志级别💥五、记录日志-基础❤️六、记录日志-处理器handler🎬七、记录日志-格式化记录☔八、记录日志-配置logger👊九、流程梳理 &#x…...
SpringBoot 多种优雅的线程池配置与使用(异步执行函数,反射机制,动态识别参数,有返回值)
想要明白生活你需要先经历它,而不是总在分析它。 —萨莉鲁尼 文章目录 前言一、@Async注解1. 概念2. 使用2.1 使用@EnableAsync启动函数异步支持2.2 不会异步执行的坑2.2.1 为什么内部调用不会异步执行?2.2.2 如何确保@Async方法异步执行?3. 配置线程池3.1 通过代码配置3.1.…...
ansible copy模块--持续创作中
copy模块用于将文件从ansible控制节点(管理主机)或者远程主机复制到远程主机上。其操作类似于scp(secure copy protocol)。 关键参数标红。 参数: src:(source:源) 要复制到远程…...

自学SAP是学习ECC版本还是S4版本?
很多人想学SAP,问我应该学ECC版本还是S4版本,我的建议如果你是自学的话,我个人建议使用ECC版本就行,因为这两个版本前台业务和后台配置的操作差异并不大,主要差异在于数据库的差异,前台业务操作和后台系统配…...

银河麒麟4.0.2安装带有opengl的Qt5.12.9
银河麒麟4.0.2下载地址:银河麒麟-银河麒麟(云桌面系统)-银河麒麟最新版下载v4.0.2-92下载站 VirtualBox:https://www.virtualbox.org/wiki/Downloads qt下载:Index of /archive/qt/5.12/5.12.9 1安装VirtualBox:网上教材比较多 1)安装完后安…...

django学习入门系列之第二点《浏览器能识别的标签3》
文章目录 列表表格往期回顾 列表 无序列表 <!-- <ul </ul> 无序列表 --> <ul><li> 内容1 </li><li> 内容2 </li><li> 内容3 </li><li> 内容4 </li> </ul>有序列表 <!-- <ol> &…...
git常见实用命令,简单上手操作
常用命令: 添加远程账号名称:git config --global user.name ‘’ 添加用户eamil:git config --global user.email ‘’ 初始化厂库:git init 新建文件夹:mkdir 文件夹名 新建文件:touch 文件名 查看…...

2-11 基于matlab的BP-Adaboost的强分类器分类预测
基于matlab的BP-Adaboost的强分类器分类预测,Adaboost是一种迭代分类算法,其在同一训练集采用不同方法训练不同分类器(弱分类器),并根据弱分类器的误差分配不同权重,然后将这些弱分类器组合成一个更强的最终…...
Neo4j图形数据库查询,Cypher语言详解
Cypher语言详解 Cypher是一种专为Neo4j图形数据库设计的声明式查询语言。它类似于SQL,但其设计目标是便于表达图数据库中常见的图形结构和操作。本文将详细介绍Cypher语言的基本语法、常见操作、高级功能以及使用Cypher进行图形数据分析的技巧。 1. Cypher的基本概…...

C# Winform Datagridview控件使用和详解
DataGridView 是一种以表格形式显示数据的控件,由Rows(行),Columns(列),Cells(单元格)构成。本实例将综合利用DataGridView的属性和事件,展示不同的表格风格数据和操作。包含: 添加Datagridview行,列数据设…...

xshell传输文件速率为0
你们好,我是金金金。 场景 此时我通过xshell客户端上传文件,速率一直为0 解决 安装 yum -y install lrzsz 即可 这个工具主要提供 rz 和 sz 命令,用于通过 Zmodem 协议在本地计算机和远程服务器之间传输文件 编写有误还请大佬指正࿰…...

2.spring cloud gateway 源码编译
spring cloud gateway编译 1.编译 命令 mvn clean compile -U2.报错 报错信息 核心信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.2:check (checkstyle-validation) on project spring-cloud-gateway-mvc: Failed during …...

[Linux] UDP协议介绍:UDP协议格式、端口号在网络协议栈那一层工作...
TCP/IP网络模型, 将网络分为了四层: 之前的文章中以HTTP和HTTPS这两个协议为代表, 简单介绍了应用层协议. 实际上, 无论是HTTP还是HTTPS等应用层协议, 都是在传输层协议的基础上实现的 而传输层协议中最具代表性的就是: UDP和TCP协议了. 以HTTP为例, 在使用HTTP协议通信之前, …...
Spring Boot 中如何解决跨域问题、Spring Cloud 5大组件、微服务的优缺点是什么?
Spring Boot 中如何解决跨域问题 ? SpringMVC项目中使用CrossOrigin注解来解决跨域问题 , 本质是CORS RequestMapping("/hello")CrossOrigin(origins "*")//CrossOrigin(value "http://localhost:8081") //指定具体ip允许跨域public String …...

[Vulnhub] Sleepy JDWP+Tomcat+Reverse+Reverse-enginnering
信息收集 Server IP AddressPorts Opening192.168.8.100TCP:21,8009,9001 $ nmap -sV -sC 192.168.8.100 -p- --min-rate 1000 -Pn Starting Nmap 7.92 ( https://nmap.org ) at 2024-06-20 05:06 EDT Nmap scan report for 192.168.8.100 (192.168.8.100) Host is up (0.00…...
基于MATLAB的误码率与信噪比(附完整代码与分析)
目录 一. 写在前面 二. 如何计算误码率 三. 带噪声的误码率分析 3.1 代码思路 3.2 MATLAB源代码及分析 四. 总结 4.1 输入参数 4.2 规定比特长度 4.3 特殊形式比较 一. 写在前面 (1)本文章主要讨论如何仿真误码率随着信噪比变化的图像 &#…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串筛选排序(100分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串筛选排序(100分) 🌍 评测功能需要 订阅专栏 后私信…...
# 开发安全
开发安全 文章目录 开发安全安全开发生命周期安全开发目标安全开发基本准则注入类攻击手段Sql注入命令执行命令执行防御文件遍历防御 植入类安全漏洞防御XSS(前端漏洞)防御 储存型XSS文件上传防御 CSRF防御 会话固定防御 其它类型安全漏洞越权访问防御 口…...

Qt MaintenanceTool.exe使用镜像源更新Qt
环境:Windows11,Qt6.5,新版的MaintenanceTool.exe linux环境类似,mac环境可以看官方文档。 cmd命令窗口:切换到MaintenanceTool.exe所在目录,可以用“D:”切换到D盘,“cd xxxx”切换到xxxx目录…...

Java 8 Stream API介绍
Java 8引入了Stream API,这是对集合框架的一种增强,它允许你以一种声明式的方式处理数据集合。Stream API的核心在于将数据的操作分为两个主要阶段:中间操作和终端操作。中间操作返回的是一个新的Stream,可以链式调用多个中间操作…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...