Python 应用程序输出到系统日志服务器

标签 python unix syslog system-administration

我正在尝试在谷歌上进行一些搜索(每 5 分钟左右循环一次)。 当它被击中时,我希望它能将结果推送到系统日志服务器。我是 python 的新手,所以请原谅我的无知,我已经搜索了很长时间,但找不到我的问题的答案。

我打算添加多个查询来寻找不同的结果,具体取决于 logevent 不同的查询结果。

WARN "possible hit"
CRITICAL "definatly a hit"
etc

我希望输出是这样的: 日志类型、url、日期/时间

下面是我到目前为止一直在玩的代码。我可以搜索并记录到一个文件,但不是我想要的。我只得到时间和偶数类型的格式,我没有在日志中得到查询结果。而且我不知道如何登录到系统日志服务器。

#!/usr/bin/python
import urllib
import simplejson, logging

query = urllib.urlencode({'q' : 'SEARCHTERMHERE'})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \ % (query)
search_results = urllib.urlopen(url)
json = simplejson.loads(search_results.read())
results = json['responseData']['results']
for i in results:
  logging.basicConfig(format='%(asctime)s %(message)s', filename='hits.log')
  logging.warning ('Likley hit')
  print i['url']

#!/usr/bin/python
import urllib
import simplejson 
import logging
from logging.handlers import SysLogHandler

query = urllib.urlencode({'q' : 'SEARCHTERMHERE'})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \
% (query)

search_results = urllib.urlopen(url)
json = simplejson.loads(search_results.read())
results = json['responseData']['results']

for i in results:
  print i['url']
  logger = logging.getLogger()
  logger.addHandler(SysLogHandler(address=('192.168.0.2', 514), facility=LOG_USER, socktype=socket.SOCK_DGRAM)
  logger.addHandler(logging.FileHandler("hits.log"))
  logging.warn("likley Hit: " + i['url'])

我得到: 文件“gog.py”,第 18 行 logger.addHandler(记录.FileHandler("hits.log")) ^ SyntaxError: 语法无效

最佳答案

您可以配置日志记录模块输出到系统日志,参见http://docs.python.org/library/logging.handlers.html#sysloghandler

简单的例子:

from logging.handlers import SysLogHandler
import logging

logger = logging.getLogger()
logger.addHandler(SysLogHandler('/dev/log'))
logger.addHandler(logging.FileHandler("filename.log"))

logging.warn("Hello world")

以上使用 Unix 域套接字记录到本地系统日志。您还可以指定主机名以使用 UDP 记录到系统日志。有关详细信息,请参阅文档。

关于Python 应用程序输出到系统日志服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8971074/

相关文章:

python - 将整数分配给字符串

python - 我如何做一个 "for each",从列表的某个索引开始(Python)?

windows - 让PHP命令行逐页显示phpinfo?

在 Windows 上找不到 syslog.h

linux - 安全地打开系统日志文件

php - 使用 PHP 读取系统日志

python - 将列表理解转换为 for 循环

python - 如何指定我的 jupyter 笔记本中正在使用哪些 python 和哪些模块?

linux - 当一个进程被杀死(*nix)时,系统调用的调用会发生什么?

Select()可以用来检测和识别多个流输入