【问题标题】:Python App ouput to syslog serverPython 应用程序输出到 syslog 服务器
【发布时间】:2012-01-23 11:42:59
【问题描述】:

我正在尝试在 google 上进行一些搜索(每 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(logging.FileHandler("hits.log")) ^ SyntaxError: 无效语法

【问题讨论】:

    标签: python unix syslog system-administration


    【解决方案1】:

    你可以配置日志模块输出到syslog,见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 域套接字将日志记录到本地 syslog。您还可以指定一个主机名以使用 UDP 记录到 syslog。有关详细信息,请参阅文档。

    【讨论】:

    • 感谢您的快速响应,我已经看到了,但老实说,我正在努力理解它。你能给我举个例子吗?我看不到如何将结果写入日志并将其发送到系统日志服务器
    • 所以您想同时记录到文件和系统日志服务器?在这种情况下,添加两个处理程序。
    • 感谢您指出 SysLogHandler 我会从那里仔细查看,您能告诉我如何将结果写入日志吗?例如 logging.warn('url')
    • codeape 我试图将结果从(我的原始帖子)从 Windows 框中获取到系统日志服务器(远程)
    • 您的三行日志记录设置代码不应在循环内。将其移出循环,使其只执行一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多