【问题标题】:How do I handle Apache errors with a module?如何使用模块处理 Apache 错误?
【发布时间】:2011-12-14 08:53:56
【问题描述】:

我希望创建一个 Apache 模块,只要将任何内容写入 Apache 错误日志,它就会执行一些额外的任务。我需要处理什么钩子?

更新 关于我正在尝试做的事情的更多信息:我有一个专有的日志记录组件,它聚合来自不同环境和框架中的多个服务器的错误消息 - Linux、PHP、Windows 03/08、.NET 2/4 等...... .NET 组件已完成,我相信 Apache 模块是 LAMP 方面的路线。每当 Apache 听到错误时,它都会将其转发到我已经创建的 Web 服务。

【问题讨论】:

    标签: apache logging error-handling apache2 hook


    【解决方案1】:

    你可以pipe the errorlog to a program:

    ErrorLog "|/path/to/yourscript.pl >>/var/log/apache2/error.log"
    

    yourscript.pl 可以是一个小的 Perl 程序。重要的是它会一直运行直到 STDIN 完成(所以不要解析一行并退出,程序只会在 apache 启动时调用一次)

    #!/usr/local/bin/perl
    
    $|=1; # Don't buffer
    print while <STDIN>;
    

    【讨论】:

      【解决方案2】:

      为了简单起见,我会推荐 Konerak 的回答。

      如果您真的想走模块路线并深入研究源代码并编写自己的记录器处理程序模块,则apache源代码使用libapr,它具有ap_hook_log_transaction注册功能。它在源代码中的几个地方使用:

      corey@localhost ~/httpd-2.2.21 $ grep -Rl ap_hook_log .
      ./modules/filters/mod_reqtimeout.c
      ./modules/test/mod_optional_fn_import.c
      ./modules/test/mod_optional_hook_export.c
      ./modules/loggers/mod_logio.c
      ./modules/loggers/mod_log_forensic.c
      ./modules/loggers/mod_log_config.c
      ./modules/experimental/mod_example.c
      ./docs/manual/developer/modules.html.ja.utf8
      ./docs/manual/developer/modules.html.en
      

      假设您编写自己的模块,编译它,并将其加载到您的 apache 配置中,我的理解是您可以拦截一个日志事件,用它做一些事情,然后将它传递给下一个钩子,或者停止就在那儿。

      希望这会有所帮助。

      【讨论】:

      • 我想我可能误解了 Konerak 的回答,在您发表评论后不得不重新阅读。根据您的回答,我已经能够找到更多看起来很有希望的信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2010-09-11
      • 2013-03-21
      • 2011-04-01
      • 2018-10-19
      • 2014-06-28
      • 2016-06-22
      相关资源
      最近更新 更多