日志可以在程序出现bug时帮助排查问题,如果没有日志在解决bug时很可能无从下手。这两天修改了一个发邮件的功能,期间在自测代码的时候对日志接触的比较多,也意识到其重要性,在这里小结一下。由于公司使用的是Phalcon框架,因此这篇文章主要说说在Phalcon框架下添加日志。
在Phalcon框架下添加日志
Phalcon框架下添加日志的方法如下:
1 | //可以添加不同级别的日志 |
例如:
1 | //1中的发邮件功能在线上环境时可以这样添加日志 |
正常情况下Phalcon日志会自动记录时间,但是在命令行运行不会记录,如果要在命令行运行或测试代码,例如执行定时脚本任务等,可以记录时间,这样便于在出错时尽快找出原因所在。此外,如果想要日志直接在终端输出,可以在函数的第一行加上下面这种用法:
1 | \Phalcon\DI::getDefault()->getLog()->toConsole=1; |
Phalcon日志详细用法可以参考:日志记录(Logging) — Phalcon 2.0.8 文档 - Phalcon PHP
在哪里添加日志比较合适
一般来说容易出错的函数最好添加日志,便于排查问题,例如上述的发邮件函数。在开发的时候有些地方不知道是否容易出错,但是后续过程中如果出现了bug,就会知道哪些地方容易出错,可以加上日志。还是以发邮件功能为例,突然有一天南京那边的分公司说没有收到邮件,但是其它的分公司都收到了(后面发现有少数几家分公司也没有收到邮件,只是没有在意而已),经排查发现原来是生成邮件附件时出问题了,附件内容用iconv(“UTF-8”, “GB2312”, $contents)函数进行字符编码转换时$contents含有特殊字符转换失败,iconv()函数返回false,导致附件内容为空,邮件不发送,在修复了这个bug之后给iconv()函数添加了日志如下:
1 | private function createAttach($fileName, $contents) { |
需要注意的是file_put_contents()函数也容易出错从而返回false,因此这里选择给file_put_contents()函数添加日志也是可以的。此外在次数不是很多的循环中可以添加日志,这样可以知道每条是否执行成功。
查看日志
日志一般在/tmp/或者/apps/log/文件夹里,假如我们要查看的日志文件为daily_mail.log,可以使用tail命令查看最近的日志:
1 | tail -f daily_mail.log |
或者先用less命令打开日志文件,再shift+g跳到日志末尾,然后用k/j进行上/下翻动:
1 | less daily_mail.log |
如果需要查找包含特定信息的日志内容,例如查找包含南京的最近的日志,可以这样做:
1 | tail -f daily_mail.log | grep 南京 |
如果需要查看所有包含南京的日志信息,可以这样做:
1 | cat daily_mail.log | grep 南京 |