监视glob模式指定的任何日志文件中的关键字的守护程序

logdogs的Python项目详细描述


https://img.shields.io/travis/yanxurui/logdogs/master.svghttps://img.shields.io/pypi/v/logdogs.svghttps://img.shields.io/pypi/pyversions/logdogs.svghttps://img.shields.io/pypi/status/logdogs.svg

监视glob模式指定的任何日志文件中的关键字的守护程序。

后台日志文件由狗和用户定期检查 当根据 关键字regex。

功能

  • 全局路径
  • 正则表达式关键字
  • 与logrotate兼容
  • custmize handler函数或可调用对象
  • 日志文件在观看< < > >之前不一定存在。
  • 一只狗可以看多个日志,一个日志可以被多个 狗

用法

安装:

pip install logdogs

开始时间:

logdogs -c conf.py

停止:

kill <pid>

PID文件将被自动删除。

py是包含大写模块变量的配置文件 作为配置。下面是一个示例:

importosimportloggingLOG_FILE='logdogs.log'LOG_LEVEL='INFO'# you can even call basicConfig to customize the log insteadINTEVAL=10# secondsDAEMONIZE=TrueDIR=os.path.abspath('.')PID_FILE='logdogs.pid'STDOUT='logdogs.out'STDERR='logdogs.err'# the above 4 configurations only work when DAEMONIZE is Truelogger=logging.getLogger(__name__)classMyHandler(object):def__init__(self):self.count=0def__call__(self,file,lines):self.count+=1logger.info('...')# Do whatever you want here...DOGS={"test":{"paths":["a.log","b.log"],"handler":MyHandler(),"includes":[r"wrong"],"excludes":[r"nothing"]},"glob":{"paths":["**/*.log"],"handler":MyHandler(),"includes":[r"(?!)wrong"],}}

在这种情况下,日志狗将作为守护进程在当前目录中运行 每10秒检查一次日志文件。将监视a.log和b.log 通过狗测试和地球仪。当包含wrong但不包含 nothing写入.log,将调用两个狗的处理程序。

配置文件中的有效变量如下所述。

配置

狗包括:

  1. 由glob模式指定的一组日志文件
  2. 由includes和excludes定义的筛选器
  3. 处理函数或可调用对象

dog是{name: attribute}形式的dict,其中name不是 important和attribute是包含以下键的dict:

处理程序

处理程序是具有以下签名的函数:

def handler(file, lines):
    """
    file is the absolute path of the log file.
    lines is a list of the lines includes newline characters(\n)
    """
    pass

默认处理程序是可调用的对象:

class Handler(object):
    """
    default handler for log event
    """
    def __call__(self, file, lines):
        print(lines)

由您来处理这个处理程序中的日志行,例如 邮寄、发送至微信等。

包括和不包括

它们是正则表达式,并且都是可选的。处理者是 如果在includes行中找到任何regex,并且在 在行中找不到排除项。也就是说,or逻辑是 在includes中应用,and逻辑在excludes中应用。

路径

path是一个列表,它支持以下形式:

  1. 单个文件:['/var/logs/a.log']
  2. 多个文件:['/var/logs/a.log', '/var/logs/b.log']
  3. 全局模式:['/var/logs/*.log']
  4. 递归glob(类似于bash上的globstar):['/var/logs/**/*.log']
  • 在最后2种情况下,当监控器不存在日志文件时 开始
  • 同一个日志文件可以在多个dog块中重叠

两次检查之间睡眠的秒数

对数

  • 日志文件:指定日志文件。如果没有,日志将被打印到stdout 指定的
  • 日志级别(警告):要使用哪个日志级别

守护

  • 守护进程(false):是否在 后台组,以下配置仅在后台程序化为 正确
  • dir:设置工作目录,默认为/
  • pid_文件:pid文件路径
  • stdout:重定向stdout的位置(打印异常回溯 示例)
  • stderr:重定向sterr的位置

开发

python setup.py develop

测试

python -m unittest -v test_function.TestFunction

待办事项

  • 更多处理程序
  • 穿线

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中,我需要读取一个文本文件,并将每一行放在一个单独的数组中。但每次我读文本文件时,我都无法拆分行   SpringJavaservlet返回不正确的用户代理   java如何在spring测试中动态设置环境变量   绑定后的java关闭通道   java我想在设置方法中使用selenium执行多用户登录操作,我没有使用testng。xml我正在使用maven pom。仅xml   java foreach 2d数组分配   我想用java编写prim算法   java如何在Spring Boot中验证Rest请求   JavaJScrollPane问题   java将一个节点与另一个节点关联起来   java获取错误:范围内无法访问Polyline类型的封闭实例   字节[]到int,反之为java