项目准备三之日志系统使用
项目准备三之日志系统使用
- 前言
- 一、Linux日志
- 1.1 系统常用的日志
- 1.2 日志管理服务 rsyslog
- 1.3 日志级别
- 二、zlog安装
- 三、zlog简单使用
- 3.1 全局参数[global]
- 3.2 日志等级[levels]
- 3.3 格式(Formats)
- 3.4 规则(Rules)
- 3.4.1 级别匹配
- 3.4.2 分类匹配
- 四、代码演示
- 4.1 创建空的日志文件
- 4.2 编写规则
- 4.3 编写测试代码
- 4.4 效果图
- 五、项目总结
注:本文系湛江市第十七中学星火创客团队及岭南师范学院物联网俱乐部原创部分训练项目,转载请保留声明。
前言
今天是闭关的的第56天,项目已经完成,今天特地抽时间来总结一下这个项目的具体知识点之日志系统。
一、Linux日志
在Linux系统下有大量的日志,用于记录系统、程序运行中发生的各种事件,通过阅读日志,有助于诊断和解决系统故障。在开发项目时加入日志系统也会方便调试分析,找到问题。zlog是一个轻量级、高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库,比较适合嵌入式开发。
1.1 系统常用的日志
/var/log/message 系统信息日志,包含错误信息等/var/log/secure 系统登录日志/var/log/cron 定时任务日志/var/log/maillog 邮件日志/var/log/boot.log 系统启动日志
1.2 日志管理服务 rsyslog
【1】作用:主要用来采集日志,不产生日志【2】配置文件:/etc/rsyslog.conf
1.3 日志级别
debug ##有调试信息的,日志通信最多info ##一般信息日志,最常用notice ##最具有重要性的普通条件的信息warning ##警告级别err ##错误级别,阻止某个功能或者模块不能正常工作的信息crit ##严重级别,阻止整个系统或者整个软件不能正常工作的信息alert ##需要立刻修改的信息emerg ##内核崩溃等重要信息none ##什么都不记录
二、zlog安装
参考官方文档:https://www.cnblogs.com/dpf-10/p/5354629.html
三、zlog简单使用
示例:配置文件
# comments
[global]strict init = true
buffer min = 1024
buffer max = 2MB
rotate lock file = /tmp/zlog.lock
default format = "%d.%us %-6V (%c:%F:%L) - %m%n"
file perms = 600[levels]
TRACE = 10
CRIT = 130, LOG_CRIT[formats]
simple = "%m%n"
normal = "%d %m%n"[rules]
default.* >stdout; simple*.* "%12.2E(HOME)/log/%c.log", 1MB*12; simplemy_.INFO >stderr;my_cat.!ERROR "/var/log/aa.log"my_dog.=DEBUG >syslog, LOG_LOCAL0; simplemy_mice.* $user_define;
3.1 全局参数[global]
代表一个节的开始,四个小节的顺序不能变,依次为global-levels-formats-rules。这一节可以忽略不写。语法为
(key) = (value)strict init
如果"strict init"是true,zlog_init()将会严格检查所有的格式和规则,任何错误都会导致zlog_init() 失败并且返回-1。当"strict init"是false的时候,zlog_init()会忽略错误的格式和规则。 这个参数默认为true。buffer minbuffer max
zlog在堆上为每个线程申请缓存。“buffer min"是单个缓存的最小值,zlog_init()的时候申请这个长度的内存。写日志的时候,如果单条日志长度大于缓存,缓存会自动扩充,直到到"buffer max”。 单条日志再长超过"buffer max"就会被截断。如果 “buffer max” 是 0,意味着不限制缓存,每次扩充为原先的2倍,直到这个进程用完所有内存为止。缓存大小可以加上 KB, MB 或 GB这些单位。默认来说"buffer min"是 1K , “buffer max” 是2MB。rotate lock file
锁文件,确保多线程程序在记录日志时引发的安全问题,默认为日志文件走作为锁。default format
这个参数是缺省的日志格式,默认值为:"%d %V [%p:%F:%L] %m%n"
这种格式产生的输出类似这样:
2012-02-14 17:03:12 INFO [3758:test_hello.c:39] hello, zlog
3.2 日志等级[levels]
[global]default format = "%V %v %m%n"[levels]TRACE = 30, LOG_DEBUG[rules]my_cat.TRACE >stdout;/********************下面这部分为解释,上面这部分为制定的规则*********************/
内置的默认等级是(这些不需要写在配置文件里面)DEBUG = 20, LOG_DEBUG
INFO = 40, LOG_INFONOTICE = 60, LOG_NOTICEWARN = 80, LOG_WARNINGERROR = 100, LOG_ERRFATAL = 120, LOG_ALERTUNKNOWN = 254, LOG_ERR这样在zlog看来,一个整数(30)还有一个等级字符串(TRACE)代表了等级。这个整数
必须位于[1,253]之间,其他数字是非法的。数字越大代表越重要。现在TRACE比DEBUG
重要(30>20),比INFO等级低(30<40)。在这样的定义后,TRACE就可以在下面的配置文件
里面用了。例如这句话:my_cat.TRACE >stdout; 意味着等级>=TRACE的,包括INFO, NOTICE, WARN, ERROR, FATAL会被写到标准输出。
3.3 格式(Formats)
用来定义日志的格式。语法为:(name) = “(actual formats)”(name)被后面的规则使用。(name)必须由数字和字母组成,下划线"_"也算字母。(actual format)前后需要有双引号。
3.4 规则(Rules)
用于描述日志是怎么被过滤、格式化以及被输出的。这节可以若忽略不写,日志输没有输出,这也是配置文件中不可缺省的重要部分,详细请看官方文档。
3.4.1 级别匹配
3.4.2 分类匹配
四、代码演示
以下为本人在项目实现之前学习的代码,主要为借鉴与自我编写得来,请大家以批评的态度来学习,如有建议可留言,我将不胜感激。
4.1 创建空的日志文件
4.2 编写规则
zlog.conf文件如下:
#DEBUG = 20, LOG_DEBUG
#INFO = 40, LOG_INFO
#NOTICE = 60, LOG_NOTICE
#WARN = 80, LOG_WARNING
#ERROR = 100, LOG_ERR
#FATAL = 120, LOG_ALERT
#UNKNOWN = 254, LOG_ERR[global]strict init = truebuffer min = 1024buffer max = 2MB#roate lock ifile = /tmp/zlog.lockdefault format = "%d.%ms %-6V (%F:%L) - %m%n"file perms = 600[levels]TRACE = 10;[formats]file1 = "%d.%ms [%-6V] %m%n"file2 = "%d.%ms [%-6V] (%c:%F:%L) %m%n"[rules]*.* "../log_record/z_cat_all.%d(%F).log"z_cat.=DEBUG "../log_record/debug.log";file2z_cat.=INFO "../log_record/info.log";file2z_cat.=NOTICE "../log_record/notice.log";file2z_cat.=WARN "../log_record/warn.log";file2z_cat.=ERROR "../log_record/error.log";file2z_cat.=FATAL "../log_record/fatal.log";file2
4.3 编写测试代码
/********************************************************************************** Copyright: (C) 2021 Lingnan Normal University* All rights reserved.** Filename: log_base_v1_1.c* Description: This file * * Version: 1.0.0(2021年08月03日)* Author: wuxiaoxian <15218392154@163.com>* ChangeLog: 1, Release initial version on "2021年08月03日 09时59分08秒"* ********************************************************************************/#include <stdio.h>
#include <stdlib.h>
#include "zlog.h"int main (int argc, char **argv)
{int rc;zlog_category_t *w_zc;rc = zlog_init("zlog.conf");if(rc){printf ("zlog init failure! \n");exit(-1);}printf ("zlog int success!\n");w_zc = zlog_get_category("z_cat");if(!w_zc){printf ("zlog category failure\n");zlog_fini();exit(-2);}printf ("zlog category success!\n");zlog_debug(w_zc,"zlog_debug test message!");zlog_info(w_zc,"zlog_info test message!");zlog_notice(w_zc,"zlog_notice test message!");zlog_warn(w_zc,"zlog_warn test message!");zlog_error(w_zc,"zlog_error test message!");zlog_fatal(w_zc,"zlog_fatal test message!");zlog_info(w_zc,"zlog_info test message!");//zlog_fini();
}
4.4 效果图
五、项目总结
在大型软件系统中,为了检测运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件,在日志文件中存放程序流程中的一些重要信息,包括:变量名称及其值、消息结构定义、函数返回值及其执行情况、脚本执行及调用情况等。通过阅读日志文件,我们能很快地跟踪程序流程,并发现程序地问题。因此,熟练掌握日志系统地编写方法并快速地阅读日志文件,是对一个软件开发工程师地基本要求。
项目准备三之日志系统使用相关推荐
- C++ LinuxWebServer项目(5)同步异步日志系统
一.前言 对于任何一个服务器而言,日志系统的设计是非常重要的,尝试设计一个简易的同步异步日志系统来完成系统日志的记录. 二.基础知识 日志,由服务器自动创建,并记录运行状态,错误信息,访问数据的文件. ...
- PHP框架中的日志系统
引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程序猿才真正动的英文),调试的时候也会很方便,还可以记 ...
- 使用XLog、Spring-Boot、And-Design-Pro搭建日志系统
一.前言:移动端为什么要三方日志系统 日志系统用于记录用户行为和数据以及崩溃时的线程调用栈,以帮助程序员解决问题,优化用户体验. iOS系统就有自带Crash收集应用程序"ReportCra ...
- C++系统日志库精选:深入剖析glog与log4cplus,轻松搭建高效日志系统
目录标题 引言 日志系统的重要性 glog与log4cplus简介与应用场景 C++日志系统库的选择依据 glog基础知识 glog库的关键功能 glog库的安装与使用 glog库的基本日志功能与级别 ...
- linux 任务计划 权限设置,Linux系统 文件权限+计划任务+日志系统
实验目的:熟练掌握权限相关概念和具体操作 实验环境:Red Hat Enterprise Linux Server 5.3 实验步骤: 一.文件权限 二.计划任务 三.日志 一.文件权限 (一)基本权 ...
- 04. 项目博客之日志
项目博客之日志 系统没有日志,就等于人没有眼睛 第一,访问日志 access log(server 端最重要的日志) 第二,自定义日志(包括自定义事件.错误记录等) 1. nodejs 文件操作 文件 ...
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见 ...
- Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考)
Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) 上面是我基于Spring Cloud ,Spring Boot 和 Docker 搭建的一个分布式日志系统. 目前已在我 ...
- Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
前言 项目做正规了,日志系统是少不了的,目前大部分日志平台推荐基于 ELK 构建,不过 ELK 算是比较重了,架构太大,中小项目不太好 Hold 住,希望找一款简单一些的,如果实在找不到再上 ELK, ...
最新文章
- 机房收费系统总结【5】——无用功
- extern用法详解(转)
- java中的年轻态,14、Java垃圾回收机制(示例代码)
- 关于群论证明费马小定理?
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
- StarkSoft题库管理系统
- sqlite3简单操作
- java两年需要,Java 两年总结
- 零基础编译ffmpeg到wasm
- dnn神经网络_卷积神经网络(五):总结
- linux系统--C语言程序开发的基本步骤(包含gcc的基本步骤)
- IDEA如何设置资源目录
- 晶振的匹配电容计算公式
- 【文化课每周学习记录】2019.3.10——2019.3.16
- 如何找回被删除的文件
- developer.biao.daily.20140628
- 字符串实质,sizeof strlen
- 教你30元自制考勤打卡系统!
- 详解分布式 ID 生成器
- cpufreq: cpufreq_online: Failed to initialize policy for cpu: 0 (-19)
热门文章
- html视频分屏插件,视频分屏效果制作 可在同一个画面播放多个视频的操作步骤详解...
- 互联网产品进阶笔记(1)图书推荐
- _明天的路,我该怎么走
- 设置httpClient的超时时间及关闭自动重发
- Three.js的渲染过程
- IDEA过期后如何重新申请(详细版)
- springboot实现小程序打赏支付功能
- python 几种android截屏方式的学习与使用
- android禁止录屏功能,react-native(安卓)项目中禁止截屏与录屏
- Redis分布式锁----悲观锁实现,以秒杀系统为例