Linux socket日志位置,由一个简单需求到Linux环境下的syslog、unix domain socket

本文介绍了如何在Linux环境下,通过Python的logging模块将日志输出到syslog,并利用Unix Domain Socket进行进程间通信。首先,展示了将日志写入文件的方式,然后转变为通过syslog输出,通过`/dev/log`连接到rsyslogd。解释了`/dev/log`实际指向的是`/run/systemd/journal/dev-log`,而rsyslogd监听`/run/systemd/journal/syslog`。最后,讨论了如何配置rsyslogd来过滤和转发日志,以及如何将日志发送到远程服务器进行分析。
摘要由CSDN通过智能技术生成

需求:

回到顶部

工作中有一个在Linux(debian8)环境下运行的服务器程序,用python语言实现,代码中有不同优先级的日志需要记录,开发的时候都是使用python的logging模块输出到文件,示例代码如下:

copycode.gif1 import logging, os 2  3 logger = None 4 def get_logger(): 5     global logger 6     if not logger: 7         logger = logging.getLogger('ServerLog') 8         logger.setLevel(logging.INFO) 9         filehandler = logging.FileHandler(os.environ['HOME'] + '/Server.log', encoding='utf8')10         filehandler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))11         logger.addHandler(filehandler)12     return logger13 14 def some_func():15     get_logger().info("call some_func")16 17 if __name__ == '__main__':18     some_func()

copycode.gif

运行上面这段代码,就会在home目录下面产生一个server.log文件。

后来数据分析的部门说他们希望能够实时拿到一部分日志,他们有一台专门处理日志的服务器,那么怎么把日志发给他们呢?笔者之前并没有相关经验,数据分析部门的同事说,这种需求他们都是找运维人员帮忙。运维同事给出的方案很简单:产品把日志写到syslog,然后他们负责把带有某些关键字的日志转发给数据分析部门,在运维同事的指导下,把代码改成了这样:

copycode.gif1 import logging 2 import logging.handlers 3  4 logger = None 5 def get_logger(): 6     global logger 7     if not logger: 8         logger = logging.getLogger('ServerLog') 9         logger.setLevel(logging.INFO)10 11         sys_handler = logging.handlers.SysLogHandler('/dev/log', facility=logging.handlers.SysLogHandler.LOG_LOCAL0)12         syslog_tag = 'ServerLog'13         sys_handler.setFormatter(logging.Formatter(syslog_tag + ":%(asctime)s - %(name)s - %(levelname)s - %(message)s"))14 15         logger.addHandler(sys_handler)16     return logger17 18 def some_func():19     get_logger().info("call some_func")20 21 if __name__ == '__main__':22     some_func()

copycode.gif

上面的代码修改了日志的输出形式,直观的感受就是从文件server.log 到了 /dev/log,但/dev/log对应的是SysLogHandler,并不是FileHandler,所以肯定不是一个普通的文件。此时,我有两个疑问:第一,这里我并没有将日志输出到home目录下的Server.log文件,但是程序运行的时候生成了这么一个文件;第二,怎么讲日志发送到数据分析部门的服务器。

不懂就问:

Q:新的代码下怎么生成Server.log文件,日志内容又是怎么转发到数据分析部门的服务器?

A:  这个是/etc/init.d/rsyslog这个后台程序根据/etc/rsyslog.conf 这个配置文件 将日志输出到不同的文件,包括网络文件,即其他服务器。看/etc/rsyslog.conf这个配置就明白了。

Q:OK,那python代码将文件输出到/dev/log跟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值