PHP如何记录错误和发送错误

1. 使用 pecl extension SeasLog

1. 为什么使用SeasLog
  • 高性能 (使用C语言开发,写在缓存池中,等到达到一定量的时候一次性写入文件中,解决了频繁写入带来的速度慢的问题)
  • 无需配置
  • 功能完善,使用简单
2. install & config
pecl install seaslog
vim /usr/local/php/etc/php.ini
extension=seaslog.so
3. error type

INFO
ERROR
NOTICE
DEBUG
Alert

4. use
mkdir logpath
chmod -R 777 logpath   //Must can writeable
Seaslog::setBasePath('/home/logpath/log');
Seaslog::setLogger('guestbook');
Seaslog::log('Notice', 'this is notice log!')
5. Tips
  1. 不要在虚拟主机中使用SeasLog
  2. 不要在集群服务中使用SeasLog , 它只在单一服务器上使用比较好, 集群上面一般使用支持网络的日志系统! 如kafka( LinkedIn开源的 )
  3. Seaslog::setLogger(‘errorController’); 这里面不能有大写 应该写成errorcontroller
  4. 如果想使用analyzerDetail 分析错误日志, 必须关掉php.ini中的: seaslog.disting_type = 0 ;是否以type分文件 1是 0否(默认

2. php自带的功能

1. 将错误记录到指定的文件中,配置过程如下
log_errors=on
error_log=/tmp/php_error.log

header('content-type:text/html; charset=utf-8');
//开启所有的错误报告
error_reporting(-1);
//设置时区
ini_set('date.timezone', 'PRC');
//禁用页面显示错误
ini_set('display_errors', 0);
//开启日志记录功能
ini_set('log_errors', 1);
//设置错误日志保存的位置
ini_set('error_log', '/tmp/custom_error.log');
//忽略重复的错误
ini_set('ignore_repeated_errors', 'on');
//忽略重复的错误来源
ini_set('ignore_repeated_source', 'on');

error_log('我要把你记录到我的自定义错误日志中'.date('Y-m-d H:i:s', time()));
trigger_error('trigger_error-----我要把你记录到我的系统错误日志中'.date('Y-m-d H:i:s', time()), E_USER_NOTICE);
2.将错误记录到系统日志中

常用: ini_set('error_log', 'syslog');

方法一
//开启所有的错误报告
error_reporting(-1);
//禁用页面显示错误
ini_set('display_errors', 0);
//开启日志记录功能
ini_set('log_errors', 1);
//设置错误日志保存的位置------(系统日志)
ini_set('error_log', 'syslog');
//忽略重复的错误
ini_set('ignore_repeated_errors', 'on');
//忽略重复的错误来源
ini_set('ignore_repeated_source', 'on');

// error_log('error_log-----我要把你记录到我的系统错误日志中'.date('Y-m-d H:i:s', time()));
trigger_error('trigger_error-----我要把你记录到我的系统错误日志中'.date('Y-m-d H:i:s', time()), E_USER_NOTICE);

方法二
//====================出于安全问题不用===========================
//打开到系统日志的链接
openlog('PHP5.6.0', LOG_PID, LOG_SYSLOG);
syslog(LOG_ERR, 'this is a test syslog'.date('Y-m-d H:i:s', time()));
closelog();
3.将错误日志通过邮件发送
  • 1.error_log('msg', 1, mail_addr); 第二个参数设置为1
    ** bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )
message
应该被记录的错误信息。

message_type
设置错误应该发送到何处。可能的信息类型有以下几个:

error_log() 日志类型
0   message 发送到 PHP 的系统日志,使用 操作系统的日志机制或者一个文件,取决于 error_log 指令设置了什么。 这是个默认的选项。
1   message 发送到参数 destination 设置的邮件地址。 第四个参数 extra_headers 只有在这个类型里才会被用到。
2   不再是一个选项。
3   message 被发送到位置为 destination 的文件里。 字符 message 不会默认被当做新的一行。
4   message 直接发送到 SAPI 的日志处理程序中。
destination
目标。它的含义描述于以上,由 message_type 参数所决定。

extra_headers
额外的头。当 message_type 设置为 1 的时候使用。 该信息类型使用了 mail() 的同一个内置函数。
//开启所有的错误报告
error_reporting(-1);
//禁用页面显示错误
ini_set('display_errors', 0);
//开启日志记录功能
ini_set('log_errors', 1);
//忽略重复的错误
ini_set('ignore_repeated_errors', 'on');
//忽略重复的错误来源
ini_set('ignore_repeated_source', 'on');

//设置第二个参数为1将,使用邮件发送错误日志信息
error_log('error_log-----我要把你记录到我的系统错误日志中'.date('Y-m-d H:i:s', time()), 1, '732578448@qq.com');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值