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
大家再试下。。。。
出自:http://5ydycm.blog.51cto.com/115934/303046