嵌入式开发之syslog和rsyslog构建日志记录

1.syslogd作客户端

BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.Usage: syslogd [OPTIONS]System logging utility-n              Run in foreground-O FILE         Log to FILE (default:/var/log/messages)-l N            Log only messages more urgent than prio N (1-8)-S              Smaller output-s SIZE         Max size (KB) before rotation (default:200KB, 0=off)-b N            N rotated logs to keep (default:1, max=99, 0=purge)-R HOST[:PORT]  Log to IP or hostname on PORT (default PORT=514/UDP)-L              Log locally and via network (default is network only if -R)-D              Drop duplicates-C[size_kb]     Log to shared mem buffer (use logread to read it)-f FILE         Use FILE as config (default:/etc/syslog.conf)

大概翻译下:

BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.Usage: syslogd [OPTIONS]System logging utility-n              运行在前台。-O FILE         log输出到指定文件中 (默认:/var/log/messages)。-l N            设置记录的优先级,如果设置-l 7,是不会记录等级7,即LOG_DEBUG的,只会记录LOG_INFO及更高优先级。-S              是否显示hostname,以及user.info之类的详细信息。-s SIZE         在log达到SIZE后,循环log到messgas.0中,后续依次变动。-b N            保持的messages个数,messages最新,带的数字越大越老。依次覆盖。-R HOST[:PORT]  log输出到指定远程服务器。(默认 PORT=514/UDP)-L              log本地保存和网络传输 (如果设置-R的话,默认是网络传输)-D              Drop duplicates-C[size_kb]     log输出到共享内存,通过logread读取。-f FILE         指定conf文件。(default:/etc/syslog.conf)

从帮助信息,我们首先可以看到busybox,也就是我所查看的设备的syslogd并不是单独的应用,是busybox里面配置的,另外,关于配置文件,有时候在/etc下看不到配置文件,手动创建也不管用,这是因为busybox配置的时候,没有勾选syslogd配置文件选项,如下:
在这里插入图片描述
不支持配置文件也没事,可以在运行的时候指定参数,下面是一个脚本,S01logging:

#!/bin/sh
#
# Start logging
#SYSLOGD_ARGS="-n -s 10240 -O /userdata/messages -b 10 -R 192.168.0.161 -L"
KLOGD_ARGS=-n
[ -r /etc/default/logging ] && . /etc/default/loggingstart() {printf "Starting logging: "start-stop-daemon -b -S -q -m -p /var/run/syslogd.pid --exec /sbin/syslogd -- $SYSLOGD_ARGSstart-stop-daemon -b -S -q -m -p /var/run/klogd.pid --exec /sbin/klogd -- $KLOGD_ARGSecho "OK"
}stop() {printf "Stopping logging: "start-stop-daemon -K -q -p /var/run/syslogd.pidstart-stop-daemon -K -q -p /var/run/klogd.pidecho "OK"
}case "$1" instart)cat /etc/os-releasestart;;stop)stop;;restart|reload)stopstart;;*)echo "Usage: $0 {start|stop|restart}"exit 1
esacexit $?

注意:上面的 -R 192.168.0.161,没有设置端口,默认是udp 514端口,将log信息上传到这个ip的服务器,所以这个ip的设备也需要配置一个服务端,然后就可以接收设备的log信息了。

2.rsyslog作服务端

现在默认的linux pc系统都已经安装了rsyslog的,我用的是Ubuntu18.04默认就安装了这个服务,只是没启动而已,修改配置,来作为log的服务端,打开修改配置文件:

sudo vim /etc/rsyslog.conf

将下面屏蔽的地方打开:

#################
#### MODULES ####
#################module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

修改为:

#################
#### MODULES ####
#################module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

这样修改之后,启动服务,因为默认是没有启动的,启动命令:

sudo service rsyslog start

查看是否监听udp 514端口:

zl@zl-Lenovo:~$ sudo netstat -aulntp | grep rsyslog
[sudo] password for zl:
udp        0      0 0.0.0.0:514         0.0.0.0:*                      936/rsyslogd
udp6       0      0 :::514              :::*                           936/rsyslogd

客户端上传的日志会自动保存到/var/log/syslog文件里面,而且是无法区分设备的,比如一个ip是192.168.0.34的设备,还有一个是192.168.0.165的设备,他们的日志会混到一个文件,如果要分开,甚至要按照应用来区分,也是可以的,需要设置一个模板,再次打开配置文件,在 GLOBAL DIRECTIVES 下添加如下内容:

###########################
#### GLOBAL DIRECTIVES ####
############################$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *
$template RemoteLogs,"/var/log/%HOSTNAME%/messages.log" *
*.* ?RemoteLogs
& ~

" $template RemoteLogs," /var/log/%HOSTNAME%/messages.log" *"保存的文件如下:

root@zl-Lenovo:/var/log# tree .
.
├── 192.168.0.165
│   └── messages.log
├── 192.168.0.34
│   └── messages.log

" $template RemoteLogs," /var/log/%HOSTNAME%/%PROGRAMNAME%.log" *"保存的文件如下:

root@zl-Lenovo:/var/log# tree .
.
├── 192.168.0.165
│   ├── mediaserver.log
│   └── nvrserver.log
├── 192.168.0.34
│   └── nvrserver.log

可以根据需求来设置服务端,保存不同形式的log文件。

注意:

root@zl-Lenovo:/var/log# tree .
.
├── 192.168.0.165
│   ├── mediaserver.log
│   └── nvrserver.log
├── 192.168.0.34
│   └── nvrserver.log

可以根据需求来设置服务端,保存不同形式的log文件。

注意:

如果删掉了/var/log目录下保存的日志文件,必须重启下rsyslog服务,否则不会再保存文件。

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

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

相关文章

深度学习中有哪些超参数,都有什么作用

深度学习中有许多超参数需要设置,它们会对模型的性能和训练过程产生重要影响。以下是一些常见的超参数及其作用: 学习率(Learning Rate):控制参数更新的步长。较小的学习率可以使模型收敛更稳定,但可能需要…

自动化备份方案

背景说明 网上有很多教程,写的都是从零搭建一个什么什么,基本上都是从无到有的教程,但是,很少有文章提及搭建好之后如何备份,我觉得备份才是一个系统生命周期内永恒的主题,是一个值得花时间严肃对待的问题…

javaee spring jdbcTemplate的使用

依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…

Leetcode328 奇偶链表

思路&#xff1a;分别处理奇偶&#xff0c;保存奇偶的第一个和最后一个节点&#xff0c;注意最后链接的时候需要把偶数的next去掉再拼接不然就成环了 class Solution:def oddEvenList(self, head: ListNode) -> ListNode:if not head or not head.next or not head.next.ne…

使用openssl rand随机生成MAC地址的方法

介绍 当我们使用虚拟网卡的时候&#xff0c;有时候需要为虚拟网卡配置随机的MAC地址。我们知道&#xff0c;网卡的MAC地址实际上是一个6字节的整型数&#xff0c;通常表现为用英文冒号&#xff08;:&#xff09;隔开的十六进制字符串&#xff08;全部大写或者全部小写&#xf…

设计模式--模板方法模式(Template Method Pattern)

一、什么是模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的实现延迟到子类中。模板方法模式允许在不改变算法的…

OpenCV c++ 使用imshow显示灰色窗口

OpenCV使用imshow显示灰色窗口 原因是使用了system(‘pause’);函数&#xff0c;只需要将该函数去掉&#xff0c;使用opencv中的对应函数 waitKey(0) 即可实现同样效果。 system(“pause”); 改为&#xff1a; cv::waitKey(0); 显示效果&#xff1a;

Decoupling Knowledge from Memorization: Retrieval-augmented Prompt Learning

本文是LLM系列的文章&#xff0c;针对《Decoupling Knowledge from Memorization: Retrieval 知识与记忆的解耦&#xff1a;检索增强的提示学习 摘要1 引言2 提示学习的前言3 RETROPROMPT&#xff1a;检索增强的提示学习4 实验5 相关实验6 结论与未来工作 摘要 提示学习方法在…

Unity贝塞尔曲线的落地应用-驱动飞行特效

前言 本文教你怎么用贝塞尔曲线驱动一个飞行特效 中间点的准备 开放一些可以给策划配置的变量 startPos flyEffect.transform.position; var right (GetAimPoistion(targetActor) - flyEffect.transform.position).x > 0?1:-1; midPos startPos new Vector3(righ…

适配ADRC自抗扰控制算法的MFP450-ADRC 套件焕新而来

关注 FMT 开源自驾仪的开发者可能知道&#xff0c;早在 2018 年 7 月 FMT开源自驾仪的早期版本就已经实现了 ADRC 算法。 经过几年的发展&#xff0c;FMT 在自抗扰控制算法的适配上做了进一步的优化&#xff0c;为了方便科研工作者和开发者快速上手&#xff0c;我们针对搭载 F…

并发编程的故事——共享模型之内存

共享模型之内存 文章目录 共享模型之内存一、JVM内存抽象模型二、可见性三、指令重排序 一、JVM内存抽象模型 主要就是把cpu下面的缓存、内存、磁盘等抽象成主存和工作内存 体现在 可见性 原子性 有序性 二、可见性 出现的问题 t线程如果频繁读取一个静态变量&#xff0c;那…

解决Spring Data JPA中的NullPointerException问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

苹果为 Vision Pro 头显申请游戏手柄专利

苹果Vision Pro 推出后&#xff0c;美国专利局公布了两项苹果公司申请的游戏手柄专利&#xff0c;其中一项的专利图如下图所示。据 PatentlyApple 报道&#xff0c;虽然申请专利并不能保证苹果公司会推出游戏手柄&#xff0c;但是苹果公司同时也为游戏手柄申请了商标&#xff0…

性能优化维度

CPU 首先检查 cpu&#xff0c;cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做&#xff0c;也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令&#xff1a; Memory free 命令&#xff1a; 温馨提示&#xff1a…

postgresql-窗口函数

postgresql-窗口函数 简介窗口函数的定义分区选项&#xff08;PARTITION BY&#xff09;排序选项&#xff08;ORDER BY&#xff09;窗口选项&#xff08;frame_clause&#xff09; 聚合窗口函数排名窗口函数演示了 CUME_DIST 和 NTILE 函数 取值窗口函数 简介 常见的聚合函数&…

因果推断(六)基于微软框架dowhy的因果推断

因果推断&#xff08;六&#xff09;基于微软框架dowhy的因果推断 DoWhy 基于因果推断的两大框架构建&#xff1a;「图模型」与「潜在结果模型」。具体来说&#xff0c;其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应&#xff1b;而在估计阶段则主要…

雅思写作 三小时浓缩学习顾家北 笔记总结(二)

目录 饥饿网一百句翻译 Using government funds for pollution cleanup work can create a comfortable environment. "Allocating government funds to pollution cleanup work can contribute to the creation of a comfortable environment." Some advertise…

ChatGPT的局限性及商业化应用限制讨论

首先&#xff0c;ChatGPT仅使用公开可用的信息&#xff0c;这是其第一个局限。如果基础信息缺失、过时、模糊或过于泛化&#xff0c;AI生成的内容就将不会准确。 只有在使用企业内部专有信息和知识创建特定的GPT时&#xff0c;才会出现真正的商业化解决方案。但对企业而言&…

Opencv基于文字检测去图片水印

做了一个简单的去水印功能&#xff0c;基于文字检测去图片水印。效果如下&#xff1a; 插件功能代码参考如下&#xff1a; using namespace cv::dnn; TextDetectionModel_DB *textDetector0; void getTextDetector() {if(textDetector)return;String modelPath "text_de…

【MySQL】3、MySQL的索引、事务、存储引擎

create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统&#xff0c;能够更快速的查询信…