V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
toyuanx
V2EX  ›  PHP

将 PHP 脚本的错误日志整合发送到开发人员邮箱

  •  
  •   toyuanx · 2017-09-30 11:23:56 +08:00 · 3244 次点击
    这是一个创建于 2596 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求如下:

    1.运行一个 PHP 脚本,脚本中有很多捕获异常记录日志的操作

    2.已经有发送邮件的接口;

    3.现在要将每次运行该 PHP 脚本产生的 warn 或 error 日志整合发送到邮箱,有什么方法吗?

    我现在只知道把日志记录当字符串拼起来发送到邮箱。。。。

    第 1 条附言  ·  2017-09-30 17:37:52 +08:00
    谢谢各位的指点,由于单个脚本的日志文件不大,我最后采用 awk 来筛选日志。
    15 条回复    2017-10-02 05:59:58 +08:00
    batnss
        1
    batnss  
       2017-09-30 11:55:37 +08:00
    运行 1 2 3 不就好了吗
    janus77
        2
    janus77  
       2017-09-30 12:47:59 +08:00
    不是直接生成.log 文件 发附件吗
    toyuanx
        3
    toyuanx  
    OP
       2017-09-30 14:12:01 +08:00
    @janus77 只发送错误或警告的,如果没有就不发送
    toyuanx
        4
    toyuanx  
    OP
       2017-09-30 14:13:38 +08:00
    @batnss 能再具体一点吗,之前只接触过写日志,1 2 3 不懂是什么意思
    yougeren
        5
    yougeren  
       2017-09-30 15:07:22 +08:00
    错误或警告单独打印不就行了
    b821025551b
        6
    b821025551b  
       2017-09-30 15:32:52 +08:00
    就是把日志文件用附件的形式发出去啊。
    t333st
        7
    t333st  
       2017-09-30 17:10:01 +08:00
    写过 域名定时检测告警系统,服务器上跑定时任务去检测目标域名,所有结果都入库以供需要查阅,访问失败则会以邮件进行告警。。。。
    其实不难啊,你只需要清楚自己要的是什么,然后简单架构一下,分模块写,写好再连接起来
    不就是搭积木么
    vex2
        8
    vex2  
       2017-09-30 17:22:25 +08:00
    set_exception_handler
    set_error_handler
    shiny
        9
    shiny  
       2017-09-30 17:25:48 +08:00
    为什么不用 Sentry, 可以邮件 /Slack 推送新出现的错误。
    holyghost
        10
    holyghost  
       2017-09-30 17:38:54 +08:00


    你需要 sentry,朋友
    lslqtz
        11
    lslqtz  
       2017-09-30 19:34:38 +08:00
    这不很简单嘛
    分类记录日志,定时不就好了
    还搞筛选,日志大慢不死你。。
    zqhong
        12
    zqhong  
       2017-09-30 20:02:42 +08:00
    日志记录使用 Monolog,handler 选择 NativeMailerHandler,日志级别设置为 warning。

    NativeMailerHandler 的源码在这里:
    https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/NativeMailerHandler.php
    zqhong
        13
    zqhong  
       2017-09-30 20:11:23 +08:00
    错误的捕捉参考下面这个:
    https://gist.github.com/zqhong/0a7c7942b573608f2a0101a5f72a8f79


    大致只需要设置这几个就行:
    set_exception_handler
    set_error_handler
    register_shutdown_function
    lyzy
        14
    lyzy  
       2017-10-01 00:35:34 +08:00 via Android
    seaslog
    cxbig
        15
    cxbig  
       2017-10-02 05:59:58 +08:00
    1. 简单的跑个 cron 就行,用 awk,grep,sed 之类的命令挑出你要的来,直接 sendmail 到邮箱即可。
    2. 如果单个 log 文件过大,也可以考虑按文件大小的 logrotate 做,利用 postscript,用 1 提到的手法处理一下分出来的那部分。
    3. 再往复杂的考虑,可以用 ELK 这类巨型工具。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2546 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:35 · PVG 09:35 · LAX 17:35 · JFK 20:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.