失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php error_log()将错误信息写入日志文件

php error_log()将错误信息写入日志文件

时间:2020-04-11 08:41:52

相关推荐

php error_log()将错误信息写入日志文件

php教程|php手册

php错误信息,error_log

php教程-php手册

使用dedecms的朋友可能会自己dedecms会记录程序执行错误文件和注入sql到一个日志文件中去,下面我来介绍在php中的一个error_log()将错误信息写入日志文件实例,希望此方法对大家有帮助.

沈阳有互助系统源码吗,vscode编写c常用插件,ubuntu 分割文件,重启tomcat报404,https图片爬虫,php公交查询系统,相城seo优化哪家强,导航网站在线网站源码,手机砍价模板lzw

error_log() 是发送错误信息到某个地方的一个函数,在程序编程中比较常见,尤其是在程序调试阶段.

车牌识别 安卓源码,ubuntu 声卡编程,tomcat带不带编译功能,爬虫分页怎么,php 定义一个对象,滨海新区seo网络营销推广lzw

本文将用实例讲解一下error_log()这个函数的用法,以及一些需要注意的问题,代码如下:

舞蹈学校源码,vscode的书,ubuntu内置,tomcat选定状态,sqlite语句触发器,zencart后台批量上传插件,后台管理系统前端框架jar包,家里墙角爬虫怎么办,php 虚拟主机配置,广州头条seo费用,部队网站下载,网页flash视频播放器代码,vhms模板大全lzw

<?php

$str=’这是条错误信息。’;

error_log($str,3,’errors.log’);

上述是最常用的error_log()例子,它的作用是把一条信息写入errors.log这个文件里,这个文件如果不存在则自动创建,在这个例子中,我们看到有一个参数“3”,注意这个数字“3”不能更改也不能去掉.

下面列举一下使用error_log()这个函数的过程中可能出现的问题:

(1)程序报错提示:Warning: error_log() [function.error-log]: failed to open stream: Permission denied in …on line …

上述错误的出现,是因为文件没有写权限,开启该目录的文件写权限即可.

(3)写入到log文件中的信息不能换行

使用error_log()写入log文件,会发现文字是没有换行的,可以对以上代码做如下改进:

<?php $str="这是条错误信息。rn"; error_log($str,3,errors.log);

注意$str,用的是双引号,php单引号和双引号的区别,还在字符串结尾加上了rn,这跟第一个实例那个写法是不同的,下面我再分享两个自定义记录出错日志实例,代码如下:

0){ switch($user_defined_err[ ype]){ case 1: $user_defined_errType = 致命的运行时错误(E_ERROR); break; case 2: $user_defined_errType = 非致命的运行时错误(E_WARNING); break; case 4: $user_defined_errType = 编译时语法解析错误(E_PARSE); break; case 8: $user_defined_errType = 运行时提示(E_NOTICE); break; case 16: $user_defined_errType = PHP内部错误(E_CORE_ERROR); break; case 32: $user_defined_errType = PHP内部警告(E_CORE_WARNING); break; case 64: $user_defined_errType = end脚本引擎内部错误(E_COMPILE_ERROR); break; case 128: $user_defined_errType = end脚本引擎内部警告(E_COMPILE_WARNING); break; case 256: $user_defined_errType = 用户自定义错误(E_USER_ERROR); break; case 512: $user_defined_errType = 用户自定义警告(E_USER_WARNING); break; case 1024: $user_defined_errType = 用户自定义提示(E_USER_NOTICE); break; case 2048: $user_defined_errType = 代码提示(E_STRICT); break; case 4096: $user_defined_errType = 可以捕获的致命错误(E_RECOVERABLE_ERROR); break; case 8191: $user_defined_errType = 所有错误警告(E_ALL); break; default: $user_defined_errType = 未知类型; break; } $msg = sprintf(\%s %s %s %s %s,date("Y-m-d H:i:s"),$user_defined_errType,$user_defined_err[message],$user_defined_err[file],$user_defined_err[line]);//开源代码 error_log($msg,0);} } register_shutdown_function(exceptionHandler);

调用方法:

<?php //文件2:【test.php】 include(error.class.php); echo $_COOKIE[aaaaadfa]; //此cookie不存在就会产生一个错误,用来做测试用 echo $_SESSION[aaaaadfa]; //此session不存在就会产生一个错误,用来做测试用

例2,日志记录类,代码如下:

setLog("test".time()); * //使用默认 * $logs=new Logs(); * $logs->setLog("test".time()); * //记录信息数组 * $logs=new Logs(); * $arr=array( * ype=>info, * info=> est, * ime=>date("Y-m-d H:i:s",time()) * ); * $logs->setLog($arr); **********************************************************/ class Logs {private $_filepath; //文件路径private $_filename; //日志文件名private $_filehandle; //文件句柄/***作用:初始化记录类*输入:文件的路径,要写入的文件名*输出:无*/public function Logs($dir = null, $filename = null) { //默认路径为当前路径 $this->_filepath = emptyempty ( $dir ) ? \ : $dir; //默认为以时间+.log的文件文件 $this->_filename = emptyempty ( $filename ) ? date ( Y-m-d, time () ) . .log : $filename; //生成路径字串 $path = $this->_createPath ( $this->_filepath, $this->_filename ); //判断是否存在该文件 if (! $this->_isExist ( $path )) { //不存在 //没有路径的话,默认为当前目录 if (! emptyempty ( $this->_filepath )) { //创建目录 if (! $this->_createDir ( $this->_filepath )) { //创建目录不成功的处理die ( "创建目录失败!" ); } } //创建文件 if (! $this->_createLogFile ( $path )) { //创建文件不成功的处理 die ( "创建文件失败!" ); } } //生成路径字串 $path = $this->_createPath ( $this->_filepath, $this->_filename ); //打开文件 $this->_filehandle = fopen ( $path, "a+" );}/***作用:写入记录*输入:要写入的记录*输出:无*/public function setLog($log) { //传入的数组记录 $str = ""; if (is_array ( $log )) { foreach ( $log as $k => $v ) { $str .= $k . " : " . $v . "n"; } } else { $str = $log . "n"; } //写日志 if (! fwrite ( $this->_filehandle, $str )) { //写日志失败 die ( "写入日志失败" ); }}/***作用:判断文件是否存在*输入:文件的路径,要写入的文件名*输出:true | false*/private function _isExist($path) { return file_exists ( $path );}/***作用:创建目录(引用别人超强的代码-_-;;)*输入:要创建的目录*输出:true | false*/private function _createDir($dir) { return is_dir ( $dir ) or ($this->_createDir ( dirname ( $dir ) ) and mkdir ( $dir, 0777 ));}/***作用:创建日志文件*输入:要创建的目录*输出:true | false*/private function _createLogFile($path) { $handle = fopen ( $path, "w" ); //创建文件 fclose ( $handle ); return $this->_isExist ( $path );}/***作用:构建路径*输入:文件的路径,要写入的文件名*输出:构建好的路径字串*/private function _createPath($dir, $filename) { if (emptyempty ( $dir )) { return $filename; } else { return $dir . "/" . $filename; }}/***功能: 析构函数,释放文件句柄*输入: 无*输出: 无*/function __destruct() { //关闭文件 fclose ( $this->_filehandle );} }

修正:

1,不用每写一条日志就进行次文件的IO的操作,在对象声明时打开文件句柄

2,支持数组类型的日志记录

3,可使用默认路径和默认文件,为当前目录下的YYYY-MM-DD.log文件

总结:个人更喜欢系统自带的函数,如果系统自带的日志记录函数满足不了我们就可以使用下面自定义函数.

如果觉得《php error_log()将错误信息写入日志文件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。