Liunx日志轮转

目录

一.日志的重要性

二、日志系统rsyslog

常见的日志文件(系统、进程、应用程序)

日志优先级

三、logrotate日志轮转

什么是日志轮转?

logrotate 的工作方式

logrotate 配置文件

logrotate命令


 

一.日志的重要性

Linux日志文件对于理解和解决系统中出现的问题非常重要。它们可以提供关于系统活动和问题的关键信息。以下是Linux日志的一些重要性:

1. 问题诊断: 当系统出现问题时,日志文件通常是我们首先检查的地方。它们可能会提供关于问题产生的原因及其发生时间的详细信息。有了这些信息,我们就可以更有效地定位和解决问题。

2. 监控: 日志文件可以用来监控系统的健康状态和性能。系统管理员可以配置日志分析工具,以定期检查日志并对异常活动进行通知。

3. 安全审计: 对于需要遵守某些统一的审计要求的公司来说,日志文件是非常重要的。日志可以提供证据来证明公司已遵守这些规定。此外,如果出现安全事故,日志文件可以帮助调查其原因并确定涉及的实体。

4. 合规性: 在许多行业中,正常运行的日志记录是必须的合规要求。例如,金融、医疗保健和教育行业等,都需遵守严格的数据保护和隐私法规。

5. 故障预警: 日志通常可以提前展示一些潜在的系统问题,比如磁盘空间不足、服务冲突、网络连接问题等,及时的处理这些预警信息可以避免问题的发生。

二、日志系统rsyslog

日志配置主文件:/etc/rsyslog.conf  

rsyslogd 是 rsyslog 的守护进程,负责处理来自各种来源的日志消息。它可以从本地系统、网络接口或其他进程中获取日志,并根据配置文件的指示将日志输出到指定的位置。这个位置可以是本地文件、远程服务器、数据库、消息队列等。rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron... 

但像我们安装的一些应用软件httpd/nginx/mysql等,它们可以自己的方式记录日志,不一定通过系统的通用日志系统。

常见的日志文件(系统、进程、应用程序)

tail -f /var/log/messages		        	#动态查看日志文件的尾部,系统主日志文件tail -f /var/log/secure		            #记录认证、安全的日志tail /var/log/maillog			            #跟邮件postfix相关tail /var/log/cron			                #crond、at进程产生的日志tail /var/log/dmesg			              	#和系统启动相关tail /var/log/yum.log                       #yum的日志tail -f /var/log/mysqld.log                 #MySQL日志tail /var/log/xferlog                  		#和访问FTP服务器相关/var/log/syslog: 全面记录系统信息的日志文件,包括启动过程中的信息以及系统运行过程中产生的各种信息。/var/log/kern.log: 这里记录了与Linux内核相关的所有信息。如果你对内核错误信息感兴趣,那么就可以在这里找到。/var/log/boot.log: 这个日志文件包含了系统启动信息。如果遇到系统启动问题,这个文件会是一个很好的参考。/var/log/auth.log: 这个日志文件包含了所有与系统认证相关的日志信息,包括所有尝试(成功或失败)登入系统的记录。/var/log/dmesg: 此文件记录了系统在启动过程中关于硬件和内核启动进程的信息。

lastlastlog 是两个常见的命令和文件,通常用于查看用户登录相关的信息。

#last 命令用于显示系统上最近的登录和注销记录。它读取 /var/log/wtmp 文件,显示用户登录的时间、终端、源IP地址(如果远程登录)以及登录持续时间等信息。
[root@localhost mail]# last
root     pts/0        192.168.226.1    Fri May 10 16:16   still logged in   
reboot   system boot  3.10.0-1160.el7. Fri May 10 07:54 - 19:06  (11:12)    
root     pts/0        192.168.226.1    Thu May  9 20:21 - down   (05:38)    
root     pts/1        192.168.226.1    Thu May  9 01:15 - 20:51  (19:35)    
root     pts/0        192.168.226.1    Wed May  8 17:44 - 03:19  (09:34)    
reboot   system boot  3.10.0-1160.el7. Wed May  8 17:44 - 02:00 (1+08:15)   
root     pts/0        192.168.226.1    Wed May  8 15:04 - crash  (02:40)    
reboot   system boot  3.10.0-1160.el7. Wed May  8 15:01 - 02:00 (1+10:58)   
root     pts/1        192.168.226.1    Tue Apr 30 15:39 - crash (7+23:21)   
root     pts/0        192.168.226.1    Tue Apr 30 15:38 - crash (7+23:22)   
reboot   system boot  3.10.0-1160.el7. Tue Apr 30 15:38 - 02:00 (9+10:21)   
root     pts/1        192.168.226.1    Tue Apr 30 15:38 - crash  (00:00)    
root     pts/0        192.168.226.1    Tue Apr 30 15:35 - crash  (00:03)    
root     tty1                          Tue Apr 30 23:35 - 15:38  (-7:-56)   
reboot   system boot  3.10.0-1160.el7. Tue Apr 30 23:35 - 02:00 (9+02:24)   wtmp begins Tue Apr 30 23:35:07 2024#lastlog 命令显示系统上所有用户的最后登录时间和其他相关信息。它读取 /var/log/lastlog 文件,显示用户的用户名、最后登录的时间、登录的终端、登录的IP地址等。
[root@localhost mail]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/0    192.168.226.1    五 5月 10 16:16:47 +0800 2024
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**
sync                                       **从未登录过**
shutdown                                   **从未登录过**
halt                                       **从未登录过**
mail                                       **从未登录过**
operator                                   **从未登录过**
games                                      **从未登录过**
ftp                                        **从未登录过**
nobody                                     **从未登录过**
systemd-network                            **从未登录过**
dbus                                       **从未登录过**
polkitd                                    **从未登录过**
sshd                                       **从未登录过**
postfix                                    **从未登录过**
chrony                                     **从未登录过**
ntp                                        **从未登录过**
apache                                     **从未登录过**
nginx                                      **从未登录过**
lzz                                        **从未登录过**
[root@localhost mail]# 

日志优先级

日志优先级是用于表示日志消息的重要性或紧急程度的标准。在计算机系统中,日志优先级被用来区分系统、应用程序或服务的不同类型的事件,从最紧急的错误到最一般的信息。了解日志优先级有助于监控、调试和排查问题。

常见的日志优先级

在 Unix 和 Linux 系统中,日志优先级通常使用 syslog 标准来定义。syslog 体系结构提供了标准的日志记录框架,包括以下常见的日志优先级:

  • Emergency(紧急)

    • 优先级 0。这是最高优先级,表示系统不可用或严重故障。这种日志通常意味着系统需要立即采取行动。
  • Alert(警告)

    • 优先级 1。需要立即采取行动以防止系统损坏或数据丢失。可能包括严重的硬件或软件问题。
  • Critical(关键)

    • 优先级 2。表示关键错误,可能影响系统的稳定性。通常需要尽快解决。
  • Error(错误)

    • 优先级 3。表示系统或应用程序遇到错误。可能导致部分功能失效或影响用户体验。
  • Warning(警告)

    • 优先级 4。指示潜在问题或预警,但不一定会导致故障。可以用来标识可能需要关注的情况。
  • Notice(通知)

    • 优先级 5。用于表示一般性的事件,不是错误或警告,但可能值得注意。通常用于记录系统状态的变化。
  • Informational(信息)

    • 优先级 6。用于记录系统或应用程序的常规操作信息。例如,用户登录/注销或服务启动/停止。
  • Debug(调试)

    • 优先级 7。这是最低优先级,用于记录调试信息,帮助开发人员或系统管理员进行问题诊断。

三、logrotate日志轮转

logrotate 是一个用于管理日志文件的工具,在 Linux 和 Unix 系统中非常常见。它可以定期轮转日志文件,以防止日志文件过大,并根据配置压缩、删除或归档旧日志。轮转的频率、保留的日志数量等都可以通过配置文件控制。以下是关于 logrotate 的详细说明。

什么是日志轮转?

日志轮转是一种管理日志文件的机制,自动切日志,旨在解决日志文件不断增长的问题。通过日志轮转,可以将日志文件分割、压缩、备份或删除,以保持日志目录的整洁和可管理性。

注:可以针对任何日志文件(rsyslog 日志、Nginx访问或错误日志...) 

1. 如果没有日志轮转,日志文件会越来越大
2. 将丢弃系统中最旧的日志文件,以节省空间 
3. logrotate本身不是系统守护进程,它是通过计划任务crond每天执行 

logrotate 的工作方式

logrotate 通过配置文件定义轮转策略,然后根据这些策略定期执行日志轮转。logrotate 的主要功能包括:

  • 按时间轮转:根据日志文件的创建时间或上次轮转时间,按天、周、月等进行轮转。
  • 按大小轮转:当日志文件达到指定大小时进行轮转。
  • 压缩日志:在轮转后,可以压缩旧的日志文件,减少磁盘空间的使用。
  • 限制日志数量:保留指定数量的旧日志文件,超出数量的日志文件会被删除。
  • 执行自定义操作:在轮转前后执行自定义命令,如重新启动服务、发送通知等。

logrotate 配置文件

logrotate 的配置文件通常位于 /etc/logrotate.conf具体的应用程序日志轮转配置在 /etc/logrotate.d/ 目录中。配置文件定义了日志轮转的策略。以下是一个典型的 logrotate 配置示例:

# 每天进行轮转
daily# 只保留 7 个旧日志文件
rotate 7# 如果日志文件为空,不进行轮转
notifempty# 轮转后是否压缩日志文件
compress# 轮转前后执行的自定义命令
prerotate# 在轮转前执行的命令echo "About to rotate logs..."
endscriptpostrotate# 在轮转后执行的命令echo "Logs rotated."
endscript

基本参数

  • daily/weekly/monthly:

    • 指定日志轮转的频率。daily 表示每天轮转,weekly 表示每周轮转,monthly 表示每月轮转。
  • size <大小>:

    • 当日志文件达到指定大小时进行轮转。可以用 K、M、G 指定大小,分别代表千字节、兆字节、千兆字节。
    • size
      触发分割的条件是:1.日志大小达到这个值,和时间周期没有关系。

    • minsize
      触发分割的条件是:1.时间周期到了,2.日志大小达到这个值;两个条件都要满足。

    • maxsize
      触发分割的条件是:1.时间周期到了,2. 日志大小大于这个值;两个条件任何一个满足。
  • rotate <数量>:

    • 指定要保留的旧日志文件数量。超过这个数量的旧日志文件会被删除。

文件处理参数

  • compress/nocompress:

    • 是否在轮转后压缩旧日志文件。compress 表示启用压缩,nocompress 表示不压缩。
  • compresscmd <命令>:

    • 指定用于压缩的命令,默认是 gzip。可以更改为 bzip2xz 等。
  • compressext <扩展名>:

    • 指定压缩后的文件扩展名。默认是 .gz
  • compressoptions <选项>:

    • 指定用于压缩的选项。例如,设定 gzip 的压缩级别。
  • create <权限> <用户> <组>:

    • 在轮转后创建新的日志文件,并指定文件的权限、所有者和组。例如,create 0644 root root

条件参数

  • missingok:

    • 如果日志文件不存在,logrotate 不会报错。
  • ifempty/notifempty:

    • 指定日志文件为空时的行为。ifempty 表示即使日志文件为空也进行轮转,notifempty 表示日志文件为空则不进行轮转。
  • sharedscripts:

    • 指定是否在一组日志轮转中共享 prerotatepostrotate 脚本。如果是共享的,则每组脚本只执行一次。

自定义脚本参数

  • prerotate/postrotate:

    • 在日志轮转前或轮转后执行自定义脚本。例如,可以在 prerotate 中停止服务,在 postrotate 中重启服务。
    prerotate 
    # 轮转前执行的操作 
    echo "Before rotating logs..." 
    endscript #参数命令postrotate 
    # 轮转后执行的操作 
    echo "After rotating logs..." 
    endscript

错误处理参数

  • error <错误处理命令>:
    • logrotate 出现错误时执行的命令。可以用来记录错误或发送通知。

其他参数

  • include <文件路径>:

    • 包含另一个配置文件。用于将不同的日志配置分开管理。
  • olddir <目录>:

    • 将轮转后的旧日志文件移到指定目录。

如何使用这些参数

 在 /etc/logrotate.conf 文件中,或 /etc/logrotate.d/ 目录中的配置文件中,可以使用这些参数来定义日志轮转策略。通常会根据日志的类型、大小和频率来配置不同的策略。

原/etc/logrotate.conf 解释:

[root@linux-server ~]# vim /etc/logrotate.conf	
weekly     			#轮转的周期,一周轮转,单位有年,月,日 
rotate 4			#保留4份 
create				#轮转后创建新文件 
dateext             #使用日期作为后缀 
#compress			#日志轮替时,旧的日志进行压缩 
include /etc/logrotate.d  			 #包含该目录下的配置文件,会引用该目录下面配置的文件/var/log/wtmp {			          	#对该日志文件设置轮转的方法    monthly			                #一月轮转一次  minsize 1M			            	#最小达到1M才轮转,否则就算时间到了也不轮转create 0664 root utmp		        #轮转后创建新文件,并设置权限   rotate 2			                #保留2份 
}/var/log/btmp {    missingok			              	#丢失不提示    monthly			                create 0600 root utmp		        rotate 1			                
} 

 配置别的日志示例:

例1
[root@linux-server ~]# vim /etc/logrotate.conf# 全局配置
daily
rotate 7
compress# 特定日志文件的配置
/var/log/nginx/access.log {size 100Mcreate 0644 nginx nginxpostrotatesystemctl reload nginxendscript
}#每天轮转日志,保留 7 个旧日志文件,并启用压缩。
#当 /var/log/nginx/access.log 超过 100MB 时,进行轮转。
#轮转后创建新的日志文件,权限为 0644,所有者和组分别为 nginx。
#轮转后重新加载 Nginx 服务。

 特定的服务的日志位置需要在/etc/logrotate.d/目录下

例2
[root@linux-server ~]# vim /etc/logrotate.d/newbee/var/log/newbee{              # 指定日志的位置
prerotate                     # 在日志轮转前要做的事chattr -a /var/log/newbee # 取消隐藏权限a
endscript                     # 结束脚本# 日期可以选用的有:weekly daily monthly yearly
dateext                       # 以日期为后缀
daily                         # 轮转周期为 1天
rotate 5                      # 保留5份日志
create 0644 root root         # 设置权限 属主属组 
compress                      # 设置压缩postrotate                    # 轮转之后要做的事情chattr +a /var/log/newbee # 再次添加a权限endscript                     # 结束脚本
}                             #注意花括号不要少

例3:
[root@linux-server ~]# vim /etc/logrotate.d/yum/var/log/yum.log {
# 针对 /var/log/yum.log 文件的日志轮转配置
#如果日志文件不存在,不会报错或警告missingoknotifempty
# 如果日志文件为空,则不会进行轮转size 30k
#当日志文件大小达到 30 KB 时,就会触发轮转daily
#每天轮转rotate 3
#只保留 3 个轮转后的旧日志文件create 0644 root root
#在轮转后创建新的日志文件,权限设为 0644,所有者和组为 root
}测试:
#/usr/sbin/logrotate就是logrotate的命令位置,这个位置就是代表logrotate,他俩等价,这个知识点要记住
[root@linux-server ~]# /usr/sbin/logrotate /etc/logrotate.conf	  #手动轮转
[root@localhost logrotate.d]# ls /var/log/yum*
/var/log/yum.log  /var/log/yum.log-20240510[root@localhost logrotate.d]# grep yum /var/lib/logrotate/logrotate.status  #查看记录所有日志文件最近轮转的时间
"/var/log/yum.log" 2024-5-10-19:51:31

logrotate命令

命令具有多种参数,用于配置和控制日志轮转行为。以下是常用的 logrotate 命令参数及其详细说明:

基本参数

  • -c / --config <文件路径>

    • 指定 logrotate 使用的配置文件。如果不指定,默认是 /etc/logrotate.conf
  • -f / --force

    • 强制执行日志轮转,即使没有满足轮转条件。这在测试和强制轮转时很有用。
  • -d / --debug

    • 调试模式,不实际执行日志轮转,但会输出详细的调试信息。用于检查 logrotate 配置和潜在的问题。
  • -v / --verbose

    • 输出更多的详细信息,显示 logrotate 在执行时的过程和细节。适用于调试和检查轮转结果。
  • -s / --state <文件路径>

    • 指定状态文件,用于记录日志轮转的状态和时间戳。默认是 /var/lib/logrotate/status。改变这个路径可能用于在不同环境中记录状态。

其他参数

  • -l / --log <文件路径>

    • 指定 logrotate 的日志文件路径。这个日志文件记录 logrotate 本身的活动,而不是被轮转的日志。
  • -t / --test

    • 测试模式,类似于 --debug,但输出的内容更简洁。这个模式下,不实际执行轮转。
  • -m / --mail <邮件地址>

    • 在日志轮转后,将日志发送到指定的邮件地址。这个功能用于将日志信息发送到指定收件人。
  • -L / --list

    • 列出 logrotate 当前要处理的日志文件列表。这个选项可以帮助你查看哪些文件会被轮转。
  • --usage

    • 显示 logrotate 的使用说明和参数列表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue基础配置

vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path"; //引入svg需要用到的插件 import { createSvgIconsPlugin } from vite-plugin-svg-icons //mock插件提供方法 import { viteMockServe } from vite-…

MySQL慢查询SQL优化

一、慢查询日志 描述&#xff1a;通过慢查询日志等定位那些执行效率较低的SQL语句 查看 # 慢查询是否开启 show variables like slow_query_log%; # 慢查询超时时间 show variables like long_query_time%;执行SQL 开启慢查询日志 set global slow_query_log ON;设置慢查…

笔试强训week4

day1 Q1 难度⭐⭐ 小易的升级之路_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3...bn. 如果遇到的怪物防…

头文件相互包含 前向声明

目录 ClassA.h ClassA.cpp ClassB.h ClassB.cpp error: C2143: 语法错误: 缺少“&#xff1b;”(在“*”的前面) 当两个类需要相互访问对方的成员或方法时&#xff0c;通常意味着它们之间存在某种依赖关系。这种依赖关系可能源于类的设计或功能需求。以下是一个简单的例子&…

ffmpeg常用的命令(windows)

ffmpeg -i visit.mp4 查看信息 ffmpeg -i visit.mp4 -hide_banner 去掉无关的信息&#xff0c;只保留目标文件的信息 ffmpeg -i visit.mp4 visit.avi 转换文件信息 ffmpeg -i visit.mp4 -qscale 0 visit.avi 保留原始的视频质量输出 ffmpeg -i visit.mp4 …

latex编译参考文献是问号解决办法

一、背景 使用Latex写文章时&#xff0c;编译tex文件后&#xff0c;正文中参考文献会变为&#xff1f;号&#xff0c;具体解决办法如下。 二、latex编译参考文献是问号解决办法 找到tex源文件所在的文件夹&#xff0c;删除所有除tex文件同名的文件&#xff0c;重新编译即可&…

cookie,session,token

目的&#xff1a;解决用户登录状态 从一个简单的登录开始说起&#xff0c; 在我们访问bilibili的时候&#xff0c;第一次需要登录&#xff0c;但后续就不需要登录了&#xff0c;可以直接访问bilibili。 而且每次在页面请求服务器的资源都需要维持登录状态&#xff0c;如果没…

电商核心技术揭秘51:多渠道营销整合策略

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

支付宝——图技术在金融反欺诈中的应用

目录 图在金融反欺诈中的应用背景 图驱动的感知研判决策处置 图在金融反欺诈中的演进 总结和展望

MySQL利用变量进行查询操作

在MySQL中&#xff0c;可以使用变量来存储查询结果&#xff0c;以便在随后的查询中使用。以下是一个示例&#xff0c;展示了如何使用变量进行查询操作&#xff1a; 创建一个示例表&#xff1a; CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(…

OpenCV入门1:Python基础编程

目录 环境配置 Python基础语法 import 与 from...import If ... Else 语句 While 循环 For 循环 集合数据类型 列表 函数 类和对象 环境配置 详情请参考&#xff1a;Pycharm环境配置完整教程 Python基础语法 import 与 from...import 在 python 用 import 或者 f…

视频号音乐怎么下载

音乐&#xff0c;那个能够触动灵魂的艺术形式&#xff0c;穿越屏幕&#xff0c;流淌在视频号的每一个角落。然而&#xff0c;有时候&#xff0c;我们更希望能将那些动人心弦的旋律保存下来&#xff0c;让它们成为我们日常生活的一部分&#xff0c;陪伴我们度过每一个动人瞬间。…

DRM/RESP无法连接linux上redis的原因

问题一&#xff1a; redis.conf配置文件 进入到自己的redis软件目录 vim redis.conf 将bind 127.0.0.1 : 1 注释掉&#xff0c;改成bind 0.0.0.0&#xff0c;让远程所有ip都可以访问 将daemonize yes 守护进程&#xff0c;修改后可在后台运行 protected-mod…

NM2-WRDUW施耐德电动机保护器EOCR-NM2

EOCR智能电动机保护器原产地为韩国&#xff0c;隶属于施耐德(韩国)电气有限公司工厂。此公司早起源于韩国三和SAMWHA株式会社&#xff0c;是早研发电子式电动机保护器厂家&#xff0c;产品涵盖过电流继电器EOCR-SS,EOCR-SE2,EOCR-AR&#xff0c;欠电流继电器EUCR&#xff0c;数…

Spring AOP(2)

目录 Spring AOP详解 PointCut 切面优先级Order 切点表达式 execution表达式 切点表达式示例 annotation 自定义注解MyAspect 切面类 添加自定义注解 Spring AOP详解 PointCut 上面代码存在一个问题, 就是对于excution(* com.example.demo.controller.*.*(..))的大量重…

控制情绪是交易成功的根本?大错特错

布雷特斯坦伯格&#xff08;Brett Steenbarger&#xff09;是一位在美国享有盛誉的交易心理学专家&#xff0c;他曾在华尔街的多个顶尖培训中心担任交易员的心理指导。身为心理学教授兼高级交易员的布雷特在交易心理方面要比别人了解得多。而且小编觉得做一个成功的交易员只靠交…

笔试强训Day15 二分 图论

平方数 题目链接&#xff1a;平方数 (nowcoder.com) 思路&#xff1a;水题直接过。 AC code&#xff1a; #include<iostream> #include<cmath> using namespace std; int main() {long long int n; cin >> n;long long int a sqrtl(n);long long int b …

欢乐钓鱼大师游戏攻略,自动钓鱼!

在《欢乐钓鱼大师》的游戏中&#xff0c;每个玩家都沉浸在湖水的世界里&#xff0c;手持钓竿&#xff0c;期待着每次的收获。这不仅是一场简单的游戏&#xff0c;更是一次对技巧和耐心的考验。在这个充满乐趣和挑战的世界中&#xff0c;掌握正确的钓鱼技巧和选择合适的装备至关…

电子版图书制作,一键转换可仿真翻页的画册

在数字化浪潮的冲击下&#xff0c;传统纸质图书逐渐被电子版图书取而代之。电子版图书以其便携、环保、更新快速等特点&#xff0c;吸引了越来越多的读者。制作一款既具备电子图书的便捷性&#xff0c;又能仿真翻页的画册&#xff0c;成为当下图书出版行业的新趋势 1.要制作电子…

【QT教程】QT6模型-视图编程 QT模型视图编程

QT6模型-视图编程 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免…