青少年编程与数学 02-004 Go语言Web编程 18课题、日志记录
青少年编程与数学 02-004 Go语言Web编程 18课题、日志记录
- 一、日志记录
- (一)目的
- (二)内容类型
- (三)日志记录的格式
- 二、Go Web 日志记录
- 1. 使用标准库 `log` 包
- 2. 使用 `logrus`
- 3. 在 Gin 框架中集成 `logrus`
- 4. 使用 `zap`
- 总结
- 三、第三方日志框架
- 四、应用示例
课题摘要:本文讨论了日志记录的重要性、内容类型、格式以及在Go Web应用中的实现。日志记录有助于故障排查、性能分析、安全审计和行为追踪。内容类型包括系统事件、应用程序和网络日志。日志格式有文本和结构化(如JSON)两种。在Go中,可以使用标准库
log
包或第三方库如logrus
和zap
进行日志记录。文章提供了使用logrus
和zap
的示例代码,并展示了如何在Gin框架中集成logrus
。还介绍了几个流行的第三方日志框架,如Logrus、Zap、Zerolog和Seelog,它们各有特点,适用于不同的应用场景。最后,提供了一个使用logrus
的Go Web应用示例,包括中间件记录HTTP请求日志。通过这些方法,可以有效地记录和管理Go Web应用的日志。
一、日志记录
日志记录是指对系统、软件或设备运行过程中的事件进行详细记录的一种操作。以下是关于日志记录的详细内容:
(一)目的
- 故障排查
- 当系统出现故障,如软件崩溃、服务器停机等情况时,日志记录可以提供线索。例如,一个网站服务器突然停止响应,通过查看日志可以发现是因为某个插件更新导致内存溢出错误,从而帮助开发人员或运维人员快速定位和解决问题。
- 性能分析
- 用于监测系统的性能指标。比如记录数据库查询的执行时间,能够帮助确定哪些查询可能是性能瓶颈。如果一个查询在日志中显示每次执行需要花费数秒,而正常情况下应该在毫秒级别,就可以针对这个查询进行优化,如优化查询语句、添加索引等操作。
- 安全审计
- 从安全角度看,日志记录是非常重要的。它可以记录用户的登录尝试,包括成功和失败的情况。例如,若发现某个用户账户在短时间内有大量来自不同 IP 地址的失败登录尝试,这可能是暴力破解攻击的迹象,安全人员可以据此采取措施,如暂时锁定账户、加强访问控制等。
- 行为追踪
- 在商业软件或企业应用中,日志记录可以追踪用户的操作行为。例如,在一个电商平台上,日志可以记录用户浏览的商品、添加到购物车的物品、下单的过程等。这有助于了解用户的购物习惯,为市场营销和产品优化提供数据支持。
(二)内容类型
- 系统事件日志
- 包括系统的启动和关闭时间、硬件设备的插拔情况等。例如,当一台计算机启动时,系统日志会记录启动的日期和时间、加载的核心系统组件等信息。如果在启动过程中出现硬件故障,如硬盘无法识别,也会在系统事件日志中记录相应的错误信息。
- 应用程序日志
- 与特定软件应用相关。以一个文字处理软件为例,日志可能会记录文档的打开、保存操作,应用内的功能使用情况(如是否使用了拼写检查功能),以及软件遇到的错误(如无法打开某个损坏的文档格式)。
- 网络日志
- 主要记录网络活动。包括网络连接的建立和断开,数据包的传输情况等。例如,在一个企业网络中,防火墙的网络日志会记录哪些 IP 地址试图访问内部网络,哪些端口被访问,以及是否有异常的网络流量模式,这对于检测网络入侵等安全事件非常重要。
(三)日志记录的格式
- 文本格式
- 这是最常见的一种格式,简单易懂。通常包括时间戳、事件类型、事件详细信息等内容。例如:
[2024 - 12 - 14 10:30:00] INFO - User 'admin' logged in successfully.
- 这里时间戳是
[2024 - 12 - 14 10:30:00]
,事件类型是INFO
(表示信息类事件),事件详细信息是User 'admin' logged in successfully
。
- 结构化格式(如 JSON)
- 这种格式更加灵活和易于解析。例如:
{ "timestamp": "2024-12-14 10:30:00", "event_type": "login", "user": "admin", "status": "success" }
- 采用 JSON 格式的日志可以方便地被计算机程序读取和处理,用于数据分析和自动化处理等场景。
二、Go Web 日志记录
在 Go Web 应用中实现日志记录,可以使用标准库的 log
包或第三方库如 logrus
和 zap
。以下是一些常见的方法和步骤:
1. 使用标准库 log
包
Go 提供了一个简单的 log
包,可以用于基本的日志记录。示例代码如下:
package mainimport ("log""os"
)func main() {// 创建一个日志文件file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)if err != nil {log.Fatal(err)}defer file.Close()log.SetOutput(file)log.Println("This is a log message.")
}
2. 使用 logrus
logrus
是一个流行的结构化日志库,功能强大且易于使用。首先安装 logrus
:
go get -u github.com/sirupsen/logrus
然后可以按照以下方式使用它:
package mainimport (log "github.com/sirupsen/logrus""os"
)func init() {log.SetFormatter(&log.JSONFormatter{})log.SetOutput(os.Stdout) // 或者输出到文件log.SetLevel(log.InfoLevel)
}func main() {log.WithFields(log.Fields{"animal": "walrus",}).Info("A walrus appears")
}
3. 在 Gin 框架中集成 logrus
如果你使用 Gin 框架,可以创建一个自定义的日志中间件来记录请求信息:
package mainimport ("github.com/gin-gonic/gin"log "github.com/sirupsen/logrus""net/http""os"
)func initLogrus() {logFile, err := os.OpenFile("gin.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)if err != nil {log.Fatal(err)}log.SetOutput(logFile)log.SetFormatter(&log.TextFormatter{FullTimestamp: true,})
}func LoggerMiddleware() gin.HandlerFunc {return func(c *gin.Context) {c.Next()log.WithFields(log.Fields{"method": c.Request.Method,"path": c.Request.URL.Path,"status": c.Writer.Status(),}).Info("Handled request")}
}func main() {initLogrus()router := gin.New()router.Use(LoggerMiddleware())router.GET("/", func(c *gin.Context) {c.String(http.StatusOK, "Hello, Logrus with Gin!")})router.Run(":8080")
}
4. 使用 zap
zap
是另一个高性能的日志库,适合需要高效日志记录的场景。首先安装 zap
:
go get -u go.uber.org/zap
然后可以这样使用:
package mainimport ("go.uber.org/zap"
)func main() {logger, _ := zap.NewProduction()defer logger.Sync() // flushes buffer, if anylogger.Info("This is an info message")
}
总结
根据你的需求,可以选择不同的日志库来实现日志记录。对于简单的应用,使用标准库的 log
包就足够了;对于更复杂的需求,logrus
和 zap
提供了更强大的功能和灵活性。通过中间件的方式集成日志记录,可以方便地记录请求信息,帮助调试和监控应用的运行状态。
三、第三方日志框架
对于Go Web应用来说,以下是一些适用且好用的第三方日志框架:
-
Logrus
- Logrus是一个结构化日志库,完全兼容Go标准库日志模块。它提供了六种日志级别:debug、info、warn、error、fatal和panic,是Go标准库日志模块API的超集。Logrus还支持自定义插件,适用于各种复杂场景,并且被许多知名开源项目如Docker、Prometheus等采用。
-
Zap
- Zap是一个由Uber推出的快速、结构化、分级日志库。它的所有日志消息都是JSON序列化的,支持强大的ad-hoc分析和灵活的仪表板功能。Zap的性能也非常出色,适合对性能有高要求的场景。
-
Zerolog
- Zerolog是一款性能相当好的日志库,受到Uber的日志库Zap的启发。它专注于JSON输出,并且性能表现优异。Zerolog和Zap都在自家的Github库首页中的性能对比数据里打败了对方。
-
Seelog
- Seelog是一个功能强大且易于学习的日志框架,提供灵活调度、过滤和格式化日志消息的功能。它支持在不重新编译的情况下更改记录器参数,即时更改配置,为不同的项目文件和功能设置不同的日志配置,以及日志消息封装器(如JSON, XML等)。
这些日志框架各有特点,开发者可以根据项目需求和团队习惯进行选择。Logrus以其简洁易用著称,适合快速上手;Zap注重性能和结构化日志;Zerolog和Seelog则提供了高度的定制性和灵活性。
四、应用示例
好的,下面是一个使用logrus
作为日志库的Go Web应用示例,其中包含了一个中间件用于记录每个HTTP请求的日志。
首先,确保你已经安装了logrus
库:
go get github.com/sirupsen/logrus
然后,创建一个名为main.go
的文件,并编写以下代码:
package mainimport ("net/http""time""github.com/sirupsen/logrus"
)// responseWriter 用于捕获HTTP响应的状态码
type responseWriter struct {http.ResponseWriterstatus int
}// WriteHeader 实现http.ResponseWriter接口
func (rw *responseWriter) WriteHeader(status int) {rw.status = statusrw.ResponseWriter.WriteHeader(status)
}// LoggerMiddleware 是一个HTTP中间件,用于记录请求日志
func LoggerMiddleware(next http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {start := time.Now()rw := &responseWriter{ResponseWriter: w}next.ServeHTTP(rw, r)// 记录请求方法、路径、状态码和处理请求所花费的时间logrus.WithFields(logrus.Fields{"method": r.Method,"path": r.URL.Path,"status": rw.status,"took": time.Since(start),}).Info("Request logged")})
}func main() {// 设置日志格式为JSONlogrus.SetFormatter(&logrus.JSONFormatter{})// 设置日志输出级别为Infologrus.SetLevel(logrus.InfoLevel)// 设置日志输出到标准输出logrus.SetOutput(os.Stdout)// 创建HTTP服务器并使用LoggerMiddleware中间件http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("Hello, World!"))})// 使用LoggerMiddleware包装所有路由http.Handle("/", LoggerMiddleware(http.DefaultServeMux))// 启动服务器logrus.Info("Server starting on port 8080")if err := http.ListenAndServe(":8080", nil); err != nil {logrus.Fatal(err)}
}
这个示例中,我们定义了一个responseWriter
类型,它实现了http.ResponseWriter
接口,并添加了一个status
字段来记录HTTP响应的状态码。LoggerMiddleware
函数是一个HTTP中间件,它接收一个http.Handler
作为参数,并返回一个新的http.Handler
。这个新的http.Handler
在处理请求之前记录请求的开始时间,在请求处理完毕后记录状态码和处理请求所花费的时间。
在main
函数中,我们设置了logrus
的日志格式、级别和输出。然后,我们定义了一个简单的路由处理函数,使用LoggerMiddleware
中间件包装了默认的http.ServeMux
,并启动了HTTP服务器。
当你运行这个程序并访问http://localhost:8080/
时,logrus
会记录每个请求的日志信息。
相关文章:
青少年编程与数学 02-004 Go语言Web编程 18课题、日志记录
青少年编程与数学 02-004 Go语言Web编程 18课题、日志记录 一、日志记录(一)目的(二)内容类型(三)日志记录的格式 二、Go Web 日志记录1. 使用标准库 log 包2. 使用 logrus3. 在 Gin 框架中集成 logrus4. 使…...
【数据结构练习题】栈与队列
栈与队列 选择题括号匹配逆波兰表达式求值出栈入栈次序匹配最小栈设计循环队列面试题1. 用队列实现栈。[OJ链接](https://leetcode.cn/problems/implement-stack-using-queues/solutions/)2. 用栈实现队列。[OJ链接](https://leetcode.cn/problems/implement-queue-using-stack…...
ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含
目录 1、web82 2、web83 3、web84 4、web85 5、web86 1、web82 新增过滤点 . ,查看提示:利用 session 对话进行文件包含,通过条件竞争实现。 条件竞争这个知识点在文件上传、不死马利用与查杀这些里面也会涉及,如果大家不熟…...
前端学习DAY26(华为平板页面)
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>平板图片</title><style> .box{text-al…...
【Linux 网络 (三)】:https协议加密解密分析 —— 秘钥协商
网络 一、https协议二 、https相关概念1)加密、解密2) 常见加密方式(对称加密和非对称加密)对称加密非对称加密 3)数据摘要 && 数据指纹4)数字签名 三、HTTPS 的⼯作过程探究1)只使⽤对…...
c 保存 csv格式的文件
在C语言中保存数据为CSV(逗号分隔值)格式的文件,你可以使用标准I/O库函数,如fprintf,来将数据写入文件,并确保每个字段之间用逗号分隔。以下是一个简单的示例,说明如何在C语言中创建一个CSV文件…...
数据结构---------二叉树前序遍历中序遍历后序遍历
以下是用C语言实现二叉树的前序遍历、中序遍历和后序遍历的代码示例,包括递归和非递归(借助栈实现)两种方式: 1. 二叉树节点结构体定义 #include <stdio.h> #include <stdlib.h>// 二叉树节点结构体 typedef struct…...
【JavaEE】网络(6)
一、http相关概念 1.1 什么是http协议 http协议(超文本传输协议),是应用层的一个协议 1.2 应用场景 网页与服务器之间交互手机app与服务器之间交互 http协议是典型的一问一答模式的协议,即请求和响应是一一对应的 二、http协议…...
什么是单例模式
单例模式就是 只有一个 不能存在多个 饿汉式单例模式 实现方式: 这种模式在程序启动或单例类被加载时就创建好实例。例如,以下是一个简单的 C 实现的饿汉式单例类,用于记录日志(假设这个日志类在整个程序中有且仅有一个实例&#…...
protobuf实用教程
引言 protobuf安装 protobuf数据类型 基本数据类型 复合类型 Map类型 protobuf使用教程 编写.proto文件 编译 使用 序列化与反序列化 结语 引言 protobuf 是 google 的一种数据交换的格式,它独立于平台语言。 google 提供了 protobuf 多种语言的实现&am…...
人工智能ACA(五)--深度学习基础
一、深度学习概述 1. 深度学习概念 1-1. 深度学习基本概念 深度学习是机器学习的一个分支基于人工神经网络(模仿人脑结构)通过多层网络自动学习特征能够处理复杂的模式识别问题 1-2. 深度学习的优点与缺点 优点 强大的特征学习能力可以处理复杂问题…...
用python ollama qwen2.5 开发一个AI修仙游戏
用 Python Ollama (Qwen2.5) 开发一个 AI 修仙游戏 简介 本文将介绍如何使用 Python 和 Ollama (Qwen2.5 模型) 开发一个文字版修仙游戏。这个游戏具有以下特点: 完整的修仙世界观和成长体系基于 AI 生成的动态剧情和事件丰富的物品系统(功法、丹药、灵宝等)社交…...
tts语音合成相关开源项目试用对比
chatTTS 如下图所示,在不添加Sample Audio和Text的时候可以正常完成文本转语音,可以自定义添加语气词,笑声和停顿等。 无法实现声音克隆,即模仿某人的音色生成语音。 试用了chatTTS官网推荐的https://voicv.com/voice-cloning进行…...
基于JAVA_JSP电子书下载系统的设计与实现【源码+文档+部署讲解】
目 录 第1章 绪论 课题的研究背景、内容和意义 第2章 主要技术概述 2.1 B/S结构 2.2 JSP技术 2.2.1 JSP技术的强势 2.2.2 JSP技术的弱势 2.3 SQL Server 2000数据库 2.4 JDBC数据库连接 2.4.1 JDBC接口 2.4.2 JDBC的驱动程序 2.5 TOMCAT应用服务器 第3章 需求分…...
外连接转AntiJoin的应用场景与限制条件 | OceanBase SQL 查询改写系列
在《SQL 改写系列:外连接转内连接的常见场景与错误》一文中,我们了解到谓词条件可以过滤掉连接结果中的 null 情形的,将外连接转化为内连接的做法是可行的,正如图1中路径(a)所示。此时,敏锐的你或许会进一步思考&#…...
35道面向初中级前端的基础面试题
新鲜出炉的8月前端面试题 跨域资源共享 CORS 阮一峰 3. JSONP 是什么? 这是我认为写得比较通俗易懂的一篇文章jsonp原理详解——终于搞清楚jsonp是啥了。 4. 事件绑定的方式 嵌入dom 按钮 直接绑定 btn.onclick function(){} 事件监听 btn.addEventList…...
自动驾驶控制算法-横向误差微分方程LQR前馈控制
本文是学习自动驾驶控制算法第六讲 前馈控制与航向误差以及前两节的学习笔记。 1 横向误差微分方程 以规划的轨迹作为自然坐标系,计算自车在轨迹上的投影点,进而计算误差: 如图所示,横向误差为 d d d,航向误差为 θ…...
灭屏情况下,飞行模式+静音模式+插耳,播放音乐,电流异常
1. 功耗现象 灭屏情况下,飞行模式静音模式插耳,播放音乐,电流异常 1.1测试数据 飞行模式静音模式插耳机 原生音乐播放器 DriverOnly 32.5mA User版本 45mA 1.2 电流波形现象 上述看怀疑 CPU 未进入 Deep idle 导致? 2. …...
jsp | servlet | spring forEach读取不了对象List
导致这个问题的原因有很多的,这里讲到的只是原因之一 原因 taglib不认识forEach 解决办法 添加<% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c" %> (我忘写这个东西了哈哈哈)...
Taro小程序开发性能优化实践
我们团队在利用Taro进行秒送频道小程序的同时,一直在探索性能优化的最佳实践。随着需求的不断迭代,项目中的性能问题难免日积月累,逐渐暴露出来影响用户体验。适逢双十一大促,我们趁着这个机会统一进行了Taro性能优化实践…...
数据结构:栈(顺序栈)
目录 1.栈的定义 2.栈的结构 3.栈的接口 3.1初始化 3.2栈的销毁 3.3压栈 3.4判断栈是否为空 3.5出栈 3.6得到栈顶元素 3.7栈的大小 1.栈的定义 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端…...
【Maven】Maven的快照库和发行库
1、分类 Maven 支持两种类型的仓库:快照库(Snapshot Repository)和发行库(Release Repository),用于存储不同性质的构件(Artifacts)。 (1) 快照库 (Snapshot Repository)ÿ…...
如何给负载均衡平台做好安全防御
在现代网络架构中,负载均衡(Load Balancing)扮演着至关重要的角色。它不仅负责将流量分配到多个服务器以确保高效的服务交付,还作为第一道防线来抵御外部攻击。为了保护您的应用程序和服务免受潜在威胁,必须对负载均衡…...
AI应用-本地模型实现AI生成PPT(简易版)
文章目录 前言技术栈效果展示 一、实现思路二、实现步骤1.本地安装marp-cli2.后端实现3.前端实现 三、代码地址及说明 前言 在许多项目中,生成 PPT 是常见的需求,尤其在教育和报告展示中。传统的生成 PPT 的方法需要手动创建,而使用生成模型…...
JavaScript 数组方法完整指南
JavaScript 数组方法完整指南 1. 数组操作方法 1.1 添加/删除元素 push() 用途: 在数组末尾添加一个或多个元素返回值: 新数组的长度 const fruits [apple, banana]; const newLength fruits.push(orange, grape); console.log(fruits); // [apple, banana, orange, gra…...
基于自定义注解与 AOP 切面实现接口日志全面数据库存储
基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…...
xcode15 报错 does not contain ‘libarclite‘
新建pod私有库 在xcode15 无法运行 报错 SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a; try increasing the minimum deployment target 下载 资源文件…...
c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入
1. 日志目录和文件管理 日志目录:日志文件存储在 ./Exceptions 目录下。日志文件命名:日志文件的命名格式为 yyyy_MM_dd.log,表示当天的日期。如果当天的日志文件大小超过 maxFileSizeBytes(3KB),则会创建…...
python 定时任务管理封装
主逻辑代码 # -*- coding: utf-8 -*- # import apscheduler import pandas as pd from datetime import datetime # 导入调度器,此处使用BackgroundScheduler阻塞调度器 from apscheduler.schedulers.background import BackgroundScheduler # 导入触发器…...
GIS数据处理/程序/指导,街景百度热力图POI路网建筑物AOI等
简介其他数据处理/程序/指导!!!(1)街景数据获取(2)街景语义分割后像素提取,指标计算代码(绿视率,天空开阔度、视觉熵/景观多样性等)(3…...
【落羽的落羽 C语言篇】自定义类型——结构体
文章目录 一、结构体1. 结构体类型的概念和声明2. 结构体变量的创建和初始化3. 结构体成员的访问3.1 直接访问3.2 间接访问 4. 结构体的内存对齐4.1 内存对齐的规则4.2 内存对齐的原因4.3 修改默认对齐数 5. 结构体传参6. 结构体实现位段 在C语言中,已经提供了一些基…...
【WPS安装】WPS编译错误总结:WPS编译失败+仅编译成功ungrib等
WPS编译错误总结:WPS编译失败仅编译成功ungrib等 WPS编译过程问题1:WPS编译失败错误1:gfortran: error: unrecognized command-line option ‘-convert’; did you mean ‘-fconvert’?解决方案 问题2:WPS编译三个exe文件只出现u…...
【Python入门】文件读写
文章一览 一、什么是文件二、文件形态三、文件组成要素四、文件操作五、文件路径六、文件读写操作6.1 文件打开模式6.2 文件的打开6.3 正确关闭文件6.3.1 读文件方法6.3.2 写文件 七、CSV 文件读取7.1 CSV 数据存储格式7.2 CSV 文件特点7.3 使用记事本创建 CSV 文件7.4 用 csv …...
基于变异策略的模糊测试:seed与mutation的含义
1. 引入 最早期的模糊测试(fuzz),是生成一些随机的文本序列,对unix系统的命令行输入进行测试。这种古老的方式,也发现了不少漏洞。 但完全随机的fuzz,存在如下问题: (1)…...
制造研发企业与IPD管理体系
芯片/半导体/制造研发型企业,大都知道华为使用过的IPD管理体系,但大家用到什么程度,那就是参差不齐了。 因为IPD管理体系它只是一个管理理念,是一个方法论。它需要有相应的组织架构来承载,它有很复杂的流程需要有IT系统…...
电子应用设计方案68:智能晾衣架系统设计
智能晾衣架系统设计 一、引言 智能晾衣架作为智能家居的一部分,为用户提供了更便捷、高效和舒适的衣物晾晒体验。本设计方案旨在打造一款功能丰富、性能稳定且易于操作的智能晾衣架系统。 二、系统概述 1. 系统目标 - 实现晾衣架的自动升降,方便衣物的…...
如何实现圆形头像功能
文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Stack Widget,本章回中将介绍CircleAvatar这种Widget,闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在上一回中我们使用了CircleAvatar Widget,之前也没有介绍过此Widget,因此有些看官希望对它做一些介绍…...
【python自动化六】UI自动化基础-selenium的使用
selenium是目前用得比较多的UI自动化测试框架,支持java,python等多种语言,目前我们就选用selenium来做UI自动化。 1.selenium安装 安装命令 pip install selenium2.selenium的简单使用 本文以chrome浏览器为例,配套selenium中c…...
时间复杂度和空间复杂度理解
空间复杂度和时间复杂度是算法分析中两个重要的概念,用于评估算法的性能。在前端 JavaScript 中,时间复杂度用于评估算法在最坏情况下的运行时间;空间复杂度描述了算法在执行过程中所需的内存空间的增长率,它包括算法所需的临时空…...
详细解读sedex验厂
SEDEX验厂,即供货商商业道德信息交流认证(Supplier Ethical Data Exchange),是一种表明企业遵守商业道德的认证。以下是对SEDEX验厂的详细解读: 一、SEDEX验厂概述 SEDEX是一家总部位于英国伦敦的非营利组织…...
IOT、MES、WMS、MOM 和 EPMS 系统综合技术与业务文档
IOT、MES、WMS、MOM 和 EPMS 系统综合技术与业务文档 一、引言 在现代制造业和工业管理领域,IOT(物联网)、MES(制造执行系统)、WMS(仓库管理系统)、MOM(制造运营管理系统ÿ…...
ESP32S3 使用LVGL驱动LCD屏(ST7789主控)
ESP32S3 使用LVGL驱动LCD屏(ST7789主控) 目录 1 分析原理图 2 驱动、点亮LCD(ST7789) 2.1 在工程中添加目录、文件 2.2 添加esp_lvgl_port组件 2.3 对工程进行必要的配置 2.4 编写必要代码 3 烧录、验证 1 分析原理图 要使用SOC驱动LCD屏&#…...
Zed调试宏 C语言错误日志 异常错误调试信息
1、C中的错误码 在C语言中通过返回错误码或设置全局的errno值来反馈错误问题。errno.h是一个头文件,它定义了一个全局变量errno,用于在程序中记录和报告错误的原因。这个机制主要用于处理系统调用或标准库函数出错时的错误反馈。当系统调用或库函数…...
GitCode 光引计划征文|JavaVision:引领全能视觉智能识别新纪元
在人工智能技术飞速发展的今天,计算机视觉作为AI领域的重要分支,正逐渐渗透到各行各业中。JavaVision,作为[光引计划]的一部分,致力于提供一个基于Java的全能视觉智能识别解决方案。同时它集成了MilvusPlus,旨在提供一…...
数据分析思维(五):分析方法——假设检验分析方法
数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...
《OpenCV计算机视觉》--介绍及基础操作
文章目录 《OpenCV计算机视觉》--介绍及基础操作一.OpenCV介绍二.下载OpenCV三.基础操作1.调用OpenCV2.读取图片信息3.读取图片的灰度图4.视频文件读取5.对图片进行切片6.提取RGB颜色通道7.合并颜色通道8.图片修改图片打码图片组合 9.cv2.resize10.图形运算图像加法运算cv2.add…...
利用Java爬虫获取苏宁易购商品详情
在数字化时代,电商平台的商品信息对于市场分析、价格监控和消费者决策至关重要。苏宁易购作为中国领先的电商平台之一,提供了丰富的商品信息。本文将介绍如何使用Java语言开发爬虫,获取苏宁易购商品的详细信息。 Java爬虫技术简介 Java作为一…...
【CVE-2024-53375】TP-Link Archer系列路由器认证操作系统命令注入(内附远离和代码利用)
CVE-2024-53375 TP-Link Archer系列路由器认证操作系统命令注入 受影响的设备 使用 HomeShield 功能的 TP-Link 设备容易受到此漏洞的影响。这包括 TP-Link Archer 系列的多款路由器。 经过测试 Archer AXE75(EU)_V1_1.2.2 Build 20240827(发布日期 2024 年 11 月 4 日)…...
DP动态规划(装箱问题)
# [NOIP2001 普及组] 装箱问题 ## 题目描述 有一个箱子容量为 $V$,同时有 $n$ 个物品,每个物品有一个体积。 现在从 $n$ 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。…...
selenium学习笔记(一)
文章目录 前言一、selenium的简介java使用seleniumPython使用selenium常用的浏览器selenium的功能 二、chromeDriver的安装查看本机的chrome版本?匹配对应的chromedriver并下载在服务器上例如Centos如何安装Chrome 三、selenium内容详解chrome启动chrome启动参数元素…...