python syslog

article/2025/8/23 19:54:25

最近在写一些命令行守护程序,类似于 Linux 下的一些常运行的程序,除了用到一些常见的IO 以及进程间通信的内容之外,还尝试了一下 Unix 系列的 syslog,在尝试过程中,发现 Python 已经在 logging 模块中很方便得集成了 syslog 的功能,很是方便;但同时,Python 的内置库中也提供了 syslog 的支持,所以,我就对这两种方式都进行一个介绍和总结。

syslog

开始之前想说说什么是 syslog,在 Linux 中,有很多后台程序都是以后台进程的形式存在运行,例如 crontab/sshd/nginx 等,有些是系统的,有些是我们自己添加的,但是,他们都有一些相同的特点:

  1. 我们不能直接从标准输入给他们输入,也不能直接从标准输出获得他们的输出
  2. 他们通常在固定的位置有日志可以查看,这个位置通常在 /var/log
  3. ... ...

对于其中的第 2 个特点,大部分 Linux 后台进程都通过 syslog 来实现。因为服务器中很多进程的调试和维护都需要一个稳定专业的日志系统,因此,Linux 提供了一个守护进程专门用来处理系统日志,而这个守护进程就是 syslogd,不过,现在的系统大都使用 rsyslod(syslog 升级版) 代替。例如以下是我在一台 Ubuntu16 的机器上的 syslogd 进程:

有一点值得一提的是,无论是内核还是用户态,都可以使用 syslog,只不过他们的路径不一样

  • 用户态:我们调用 syslog 生成日子,然后这个函数将日志输出到一个 UNIX域套接字类型的文件 /dev/log 中,然后 rsyslogd 监听这个文件来获取日志
  • 内核态[2]:内核日志通过调用 printk 等函数打印到内核的环状缓存中,然后这个缓存的内容和文件 /proc/kmsg 是直接映射的,所以 rsyslogd 就可以直接读取这个文件获得日志了

syslog 日志的位置

rsyslogd 在接收到日志之后,需要将日志输出到特定的日志文件中,默认情况下

  • 调试信息会保存到 /var/log/debug 文件中
  • 普通信息会保存到 /var/log/messages 文件中
  • 内核消息会保存到 /var/log/kern.log 文件中

但是这些都是可以改变的,在我的系统中,配置文件的位置是 /etc/rsyslog.conf,因为我没准备修改这些配置,所以就没有研究配置信息,有需要可以参考资料[3]。

内置 syslog 库

在 Python 中,直接就有内置的函数库可以使用 syslog,一段很简单的代码如下:

就可以在 /var/log/syslog 中看到这个内容了:

我们还可以加上日志级别

然而,我们会发现,这些日志有些简单,例如我们不知道是哪个进程打出来的,这个时候,还有一个函数值得我们一试,那就是 openlog

然后再看看我们的日志输出:

可以看到,这些设置都不是那么好用,毕竟是比较底层的接口,所以我们来尝试一下高层一点的。

与 logging 模块结合

我们查阅一下 Python 文档中的 logging 模块的文档,可以发现又一个 handler 叫做:SysLogHandler,看一下参数,并不比 syslog 的原始函数简单,但是,我们可以忽略所有这些参数,而简单得控制日志输出:

 

class logging.handlers.SysLogHandler(address=(‘localhost’, SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)
  • address: 前面说了 rsyslog 是一个套接字,这里可以制定套接字的地址,注意:这个可以是不在同一台机器
  • facility:这个参数的作用是告诉 rsyslog 日志的类型,从而可以让他根据不同的类型执行不同的操作
  • socktype:这个不用多解释了

所以使用的话就和其他的 Handler 一致,简单得记一下:

这里的 address 用的是 /dev/log,因为我查看了一下我机器上是没有开放 514 端口的,查了一下资料[5]发现:/dev/log 是一个 Unix 套接字,而我机器上并不开放所有机器可用的日志服务,所以使用 /dev/log 就好了。

Reference

  1. What is the difference between syslog, rsyslog and syslog-ng?
  2. Kernel logging: APIs and implementation
  3. Rsyslogd Configuration
  4. python syslog handler codes
  5. Understand logging in Linux
  6. Linux高性能服务器编程

http://chatgpt.dhexx.cn/article/pZoLrRLr.shtml

相关文章

linux syslog

linux syslog 1. syslog 定义1.1 RFC3195 2. syslog 组成3. syslog配置3.1 3CD 配置syslog 日志服务器 4. syslog api4.1. c api 代码示例:4.2 syslog 例子2: 1. syslog 定义 在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既…

Syslog 教程:工作原理、示例、最佳实践等

Syslog 是用于从各种网络设备以特定格式发送和接收通知消息的标准。这些消息包括时间戳、事件消息、严重性、主机 IP 地址、诊断等。就其内置的严重性级别而言,它可以传达 0 级、紧急、5 级、警告、系统不稳定、严重和 6 级和 7 级(信息和调试&#xff0…

关于fidder

fidder教程 https://www.cnblogs.com/R-bear/p/7508133.html fidder抓包工具总结 https://www.cnblogs.com/yyhh/p/5140852.html 从别人那里截了几张图。觉得写的挺好的,保存下来,日后复看。

Python fidder的简单实用

Fidder 对中间数据进行拷贝 然后再发送给服务器 Winconfig->勾选IE->浏览IE->一点一拖看数据(选项卡定位到composer)

Fidder下载安装

一、登录Fidder官网:https://www.telerik.com/fiddler 二、在Fidder官网页点击下载 三、输入信息,点击下载windows版 四、对于弹出的Fidder可执行文件,点击“保存文件”进行下载 五、执行下载好的Fidder可执行程序,在弹出的条款…

Fidder显示抓取IP地址

1.打开fiddler, 快捷键CtrlR 或者 菜单->Rules->Customize Rules…,然后在CustomRules.js文件里CtrlF查找字符串:static function Main(),然后添加一行代码即可显示IP,代码如下: FiddlerObject.UI.lvSessions.…

学习Fidder和willow

自学fidder和willow Fidder是什么 一种Web调试工具可以记录所有客户端和服务器的http和https请求允许监视、设置断点、修改输入输出数据其包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展 Fidder的工作原理 Fiddler是以代理web服务器的形式工…

fidder classic 界面介绍

界面划分 开始抓包 (1)默认情况下都是开启的,点击下图可以关闭或开启抓包。 (2)点击“file”----“capture traffic”也可以开始抓包 菜单栏 重要的菜单栏 reset script 重置你修改的脚本;在rules里&…

Fidder下抓取https

1、首先需要手机连接上Fiddler代理,而Fiddler默认是不允许其他设备进行连接的,点击 Tools > Options...,在 Connections 面板选中 Allow remote computers to connect 允许其他设备连接 点击 Tools > Options...,在 HTTPS 面…

fidder使用

前言 本文会对Fidder这款工具的一些重要功能,进行详细讲解,带大家进入Fidder的世界,本文会让你明白,Fidder不仅是一个抓包分析工具,也是一个请求发送工具,更加可以当作为Mock Server使用,而且可…

Fidder应用(一)

Fiddler调式使用(一)深入研究 阅读目录 Fiddler的基本概念如何安装Fiddler了解下Fiddler用户界面理解不同图标和颜色的含义web session的常用的快捷键了解web Session上下文菜单Fiddler如何捕获firefox中的会话Fiddler如何捕获Https会话Fiddler的HTTP统计视图移动开发如何使用…

Fidder教程

一.Fiddler的基本介绍 Fiddler的官方网站:http://www.telerik.com/fiddler Fiddler官方网站提供了大量的帮助文档和视频教程,学习Fiddler的最好资料 Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出…

fidder使用教程(一)

目录 一、抓包原理 二、Fiddler截获HTTP包用处 三、页面介绍 四、实际操作讲解 五、Fidder设置过滤(抓取指定服务器地址的数据) 六、web测试--弱网环境 七、Fiddler模拟接口测试(自定义请求) Fiddler打断点修改接口请求数…

【fidder】fidder工具的简单使用

文章目录 1、初识fidder1.1、fidder简介1.2、工作原理 2、理解http协议2.1、http协议2.2、http请求报文2.3.1、请求方法2.3.2、URL2.3.3、请求头部 2.3、http响应报文2.3.1、状态码2.3.2、响应头 3、fidder工具详解3.1、工具栏基本使用3.2、会话列表(session list&a…

Fiddler的安装和使用教程(详细)

一、安装 1、fiddler工具下载网址:http://www.telerik.com/download/fiddler。 2、运行 FiddlerSetup.exe一键完成安装。 3、安装成功后点击关闭按钮,所选路径下多出一个Fiddler文件夹 4、运行fiddler.exe。 二、Fiddler的配置 1、Fiddler的抓包原理 Fi…

网络层(1.网络层提供的两种服务)

网络层应该提供怎样的服务,是面向“连接”还是“无连接”,本质上是在互联网通信中,可靠交付应该由谁来负责,是网络还是端系统。 1. 面向连接,让网络负责可靠交付 这种观点是借助电信网的成功经验,让网络负…

计算机网络(四)—— 网络层(1、2):网络层概述、网络层提供的两种服务

计算机网络系列内容的学习目录 → \rightarrow →谢希仁计算机网络学习系列内容汇总。 1. 网络层概述1.1 课后练习 2. 网络层提供的两种服务2.1 面向连接的虚电路服务2.2 无连接的数据报服务2.3 虚电路服务与数据报服务的比较2.4 课后练习 1. 网络层概述 ■ 网络层的主要任务是…

网络层(八)

网络层 文章目录 网络层网络层服务网络层的核心功能——转发与路由网络层的核心功能——建立连接网络层服务模型虚电路网络数据报网络数据报网络 or 虚电路网络 IP协议IP数据报格式IP分片IP编址无类域间路由(CIDR) 网络地址转换(NAT&#xff…

第三层:网络层

第五章:网络层 网络层关注的是如何将源端数据包一路送到接收方.为了将数据包送到接收方,可能 沿途要经过许多跳(hop)中间路由器。这种功能显然与数据链路层的功能不同,数据链路层的目标没那么宏伟&#xf…

网络原理——网络层与数据链路层

JavaEE传送门 JavaEE 网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制 网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理 目录 网络层IP 协议IP 地址路由选择 数据链路层以太网 网络层 网络层做的工作, 就是两点之间, 规划出一…