监视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方法来评估安卓中任何旨在提高性能的变化   java是模拟大量用户对web服务请求的好方法吗?   java在从中检索整数时遇到问题。性质   JBoss发布期间的java问题   java如何在安卓应用程序中运行重命名shell命令(根目录)   java JafaFX ListView更改单个单元格/项目/行的颜色   java Queue RingBuffer实现Queue12。不起作用   java Spring启动404未找到错误   从Java运行cygwin编译程序   java显示10椭圆时的新行   java Serenity报告屏幕截图不起作用   javascript如何从angularJS向java函数发送JSON数据   @ManyToMany连接的java订单结果列表   java为什么这里不遵循运算符优先级?   继承在Java中,子类可以继承哪些方法?   Eclipse RCP应用程序中的java动态语言切换   java是否需要同步ConcurrentHashMap<K,V>中只返回值作为对象的函数?   调用java可执行文件并捕获异常的Shell脚本