gpt4 book ai didi

linux - 用于解析的Perl程序结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:23 26 4
gpt4 key购买 nike

我对程序架构有疑问。假设您有 100 个不同格式的日志文件,您需要解析这些信息并将其放入 SQL 数据库中。我的看法是这样的:

  1. 使用通用配置文件,如:

    program1->name1("apache",/var/log/apache.log) (modulename,path to logfile1)
    program2->name2("exim",/var/log/exim.log) (modulename,path to logfile2)

    ....

    sqldb->configuration
  2. 使用类似模块的东西(每个程序 1 个文件)type1.module(正则表达式、日志结构(某些变量)、sql(表和函数))

  3. fork 或 thread 进程(不知道现在 Linux 上哪个更好)用于不同的程序。

那么问题来了,我的看法正确吗?我应该为每个程序使用一个模块 (web/MTA/iptablat)或者有更好的方法吗?我认为一些正则表达式是相同的,比如日期/时间/ip/url。怎么办?或者我错过了什么?


例子:mta exim4 主日志

2011-04-28 13:16:24 1QFOGm-0005nQ-Ig <= exim@mydomain.org.ua** H=localhost (exim.mydomain.org.ua) [127.0.0.1]:51127 I=[127.0.0.1]:465 P=esmtpsa X=TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32 CV=no A=plain_server:spam S=763 id=1303985784.4db93e788cb5c@mydomain.org.ua T="test" from <exim@exim.mydomain.org.ua> for test@domain.ua

粗体 的所有内容都已解析并将放入 sqldb.incoming 表中。现在我在 perl 中有结构来保存每个解析的变量,如 $exim->{timstamp} 或 $exim->{host}->{ip}

我的程序将执行类似tail -f/file 的操作并逐行解析

灵 active :假设我想向 Apache 服务器添加支持(只需为用户 IP 和下载的文件添加时间戳)。我只需要知道要解析的日志文件,应该是什么正则表达式以及应该是什么 sql 结构。所以我打算把它当作一个模块。只需使用参数(日志文件、文件类型) fork 或线程主进程。也许我会进一步添加一些不解析的选项(也许某些日志级别很低,你只是看不到那里的 mutch)

最佳答案

我会这样做:

  1. 创建一个格式如下的配置文件:appname:logpath:logformatname
  2. 创建一个继承自基础解析器类的 Perl 类的集合。
  3. 编写一个脚本来加载配置文件,然后循环遍历其内容,将每次迭代传递给相应的处理程序对象。

如果您想要步骤 1 和步骤 2 的示例,我们有一个 on our project .请参见 MT::FileMgr 和 MT::FileMgr::* here .

关于linux - 用于解析的Perl程序结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5898488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com