文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python之syslog学习

2023-01-31 07:04

关注

大家在写程序时,都喜欢将过程和输出结果以log的形式保留下来,供参考。大部分朋友都采取的是open方式打开一个文件句柄方式,将其信息write进去,今天我学习的是采取unix或者类unix提供的一个syslog服务。在我们的python里提供了一个syslog的模块,这个模块就是为系统syslog程序提供的一个接口。

以下我将用通俗的语言和例子来说明下面的函数:

syslog.openlog(ident[, logopt[, facility]])

这个就是初始化syslog接口的函数,在这里有一个必须的参数和两个可选的参数。

第一个参数,ident

这个就是一个标识字符串,是log里每一行中程序的名程,如:

syslog.openlog("test.py")

syslog.syslog("The process is test.py")

tail -n 1 /var/log/messages

Apr 22 16:26:52 databak test.py: The process is test.py

对上了吧?看明白了吧?

第二个参数,logopt

选项名称:LOG_CONS,LOG_NDELAY,LOG_NOWAIT,LOG_PID,LOG_PERROR

大家可以从中选择一个,或者多个(要借助或操作符”|”),如:

Syslog.openlog(“test.py”,syslog.LOG_PID|syslog.LOG_PERROR)

Syslog.syslog(“The messages print pid and messages print to stderr”)

>>> syslog.syslog("The messages print pid and messages print to stderr")

test.py[16826]: The messages print pid and messages print to stderr

[root@databak scripts]# tail -n 1 /var/log/messages

Apr 22 16:33:32 databak test.py[16826]: The messages print pid and messages print to stderr

看到没,它一方面将其直接打印出来,另一方面将日志记录到messages中,并且按要且添加了此进程的pid号

注:LOG_PERROR 错误除了记录到syslog机构中,同时还会在stderr打印出来。

第三个参数,facility

名称:LOG_AUTH,LOG_CRON,LOG_DAEMON,LOG_KERN,LOG_LOCALx,LOG_LPR,LOG_MAIL,LOG_NEWS,LOG_USER,LOG_UUCP

系统管理员使用这些参数配置信息如何分解到不同的文件和服务中。

在前面,我们一直将信息输出到messages文件中,这次,我们要结合syslog.conf的配置来将其输出到其他文件了。

修改syslog.conf,添加

auth.*                                                 /var/log/python.auth

将认证的信息输出到python.auth中,那么我们的程序应该如何写呢?

Syslog.openlog(“test.py”,syslog.LOG_PID,syslog.LOG_AUTH)

Syslog.syslog(“Test Auth!”)

[root@databak scripts]# tail -f /var/log/python.auth

Apr 22 16:43:47 databak test.py[16829]: Test Auth!

[root@databak scripts]# tail -n 1 /var/log/messages

Apr 22 16:43:17 databak test.py[16829]: Test Auth!

看到没,messages和python.auth这两个文件里都有了相关的信息了,怎么回事呢?我想让其只输出到python.auth,不想输出到messages呀?我想是因为我们没有配置syslog的优先权,我们的syslog.syslog默认的优先权是LOG_INFO,自然我们将其内容一方面输出到认证的文件里,一方面又输出到messages文件里了。所以,我们需要修改下syslog.conf的配置,

*.info;*****;auth.none              /var/log/messages        

大家再试下。。。。

这个函数大家明白了吧?接下来,我们看syslog函数

在上面的例子中,syslog函数一直伴随着我们,我相信大家也看到了一点门道了,现在我还是把函数公示给大家吧。

syslog.syslog([priority], message)

这里有两个参数,一个可选一个必写。

Message就不用说了,我的例子都有了,只是要说明下可选参数了。

Priority,

名称:LOG_EMERG,LOG_ALERT,LOG_CRIT,LOG_ERR,LOG_WARNING,LOG_INFO,LOG_DEBUG(默认为LOG_INFO)

我们想将认证错误的信息写到python.err文件中,那么修改syslog.conf

auth.err                                           /var/log/python.err

看程序:

Syslog.openlog(“test.py”,syslog.LOG_PID,syslog.LOG_AUTH)

Syslog.syslog(syslog.LOG_ERR,“Add error information to python.err file”)

结果:

[root@databak ~]# tail -f /var/log/python.err

Apr 22 17:05:00 databak test.py[16933]: Add error information to python.err file

[root@databak ~]# tail -n 1 /var/log/messages

实验成功,那么,我改下优先权看下,看程序:

Syslog.openlog(“test.py”,syslog.LOG_PID,syslog.LOG_AUTH)

Syslog.syslog(syslog.LOG_INFO,“Add info information to python.err file”)

结果:

[root@databak ~]# tail -f /var/log/python.err

[root@databak ~]# tail -n 1 /var/log/messages

两个文件都没有,因为你的程序没有符合任合一个(syslog.conf)的要求,所以信息不会写到任何一个文件中的。

总结:

Openlog,syslog这两个函数并且结合syslog.conf的配置,就能定制出一种很好的日志记录功能。通过openlog的函数,我们就可以将信息分门别类的记录到何种文件下

并采取syslog函数参数便可以将何种服务的级别记录到何种文件下,前提需要syslog.conf的配合。


如果想了解更多,请关注我们的公众号
公众号ID:opdevos
扫码关注

gongzhouhao.jpg

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯