如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人。谢谢大家!❤

如果解决不了,可以在文末进群交流。

如果对你有帮助的话麻烦点个【推荐】~最好还可以follow一下我的GitHub~感谢观看!

对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。但是,任何一个产品在投入使用后,都难 免会有错误出现,那么如何记录一些对开发者有用的错误报告呢?我们可以在单独的文本文件中将错误报告作为日志记录。错误日志的记录,可以帮助开发人员或者 管理人员查看系统是否存在问题。 如果需要将程序中的错误报告写入错误日志中,只要在PHP的配置文件中,将配置指令log_errors开启即可。错误 报告默认就会记录到Web服务器的日志文件里,例如记录到Apache服务器的错误日志文件error.log中。当然也可以记录错误日志到指定的文件中 或发送给系统syslog。

下面是直接封装OK的,直接调用即可。写入的信息样式如下:

[2018-07-24 10:27:43][debug] begin notify3
[2018-07-24 10:27:43][debug] call back:[]
[2018-07-24 10:27:43][debug] error:can shu cuo wu
[2018-07-24 14:11:47][debug] begin notify3
[2018-07-24 14:11:47][debug] call back:[]
[2018-07-24 14:11:47][debug] error:can shu cuo wu
[2018-07-24 14:11:48][debug] begin notify3
[2018-07-24 14:11:48][debug] call back:[]
[2018-07-24 14:11:48][debug] error:can shu cuo wu
[2018-07-24 14:11:48][debug] begin notify3
[2018-07-24 14:11:48][debug] call back:[]
[2018-07-24 14:11:48][debug] error:can shu cuo wu
[2018-07-24 14:11:48][debug] begin notify3
[2018-07-24 14:11:48][debug] call back:[]
[2018-07-24 14:11:48][debug] error:can shu cuo wu
[2018-07-24 14:11:48][debug] begin notify3
[2018-07-24 14:11:48][debug] call back:[]
[2018-07-24 14:11:48][debug] error:can shu cuo wu
[2018-07-24 19:16:22][debug] error:post data is empty
[2018-07-24 20:05:59][debug] error:post data is empty
[2018-07-24 20:06:00][debug] error:post data is empty
[2018-07-24 20:06:01][debug] error:post data is empty
[2018-07-24 20:06:06][debug] error:post data is empty
[2018-07-24 20:06:07][debug] error:post data is empty
[2018-07-24 20:06:07][debug] error:post data is empty
[2018-07-24 20:06:08][debug] error:post data is empty
[2018-07-24 21:27:16][debug] error:post data is empty
<?php
//以下为日志 interface ILogHandler
{
public function write($msg); } class CLogFileHandler implements ILogHandler
{
private $handle = null; public function __construct($file = '')
{
$this->handle = fopen($file,'a');
} public function write($msg)
{
fwrite($this->handle, $msg, 4096);
} public function __destruct()
{
fclose($this->handle);
}
} class Log
{
private $handler = null;
private $level = 15; private static $instance = null; private function __construct(){} private function __clone(){} public static function Init($handler = null,$level = 15)
{
if(!self::$instance instanceof self)
{
self::$instance = new self();
self::$instance->__setHandle($handler);
self::$instance->__setLevel($level);
}
return self::$instance;
} private function __setHandle($handler){
$this->handler = $handler;
} private function __setLevel($level)
{
$this->level = $level;
} public static function DEBUG($msg)
{
self::$instance->write(1, $msg);
} public static function WARN($msg)
{
self::$instance->write(4, $msg);
} public static function ERROR($msg)
{
$debugInfo = debug_backtrace();
$stack = "[";
foreach($debugInfo as $key => $val){
if(array_key_exists("file", $val)){
$stack .= ",file:" . $val["file"];
}
if(array_key_exists("line", $val)){
$stack .= ",line:" . $val["line"];
}
if(array_key_exists("function", $val)){
$stack .= ",function:" . $val["function"];
}
}
$stack .= "]";
self::$instance->write(8, $stack . $msg);
} public static function INFO($msg)
{
self::$instance->write(2, $msg);
} private function getLevelStr($level)
{
switch ($level)
{
case 1:
return 'debug';
break;
case 2:
return 'info';
break;
case 4:
return 'warn';
break;
case 8:
return 'error';
break;
default: }
} protected function write($level,$msg)
{
if(($level & $this->level) == $level )
{
$msg = '['.date('Y-m-d H:i:s').']['.$this->getLevelStr($level).'] '.$msg."\n";
$this->handler->write($msg);
}
}
}

调用方法:

<?php
$logDir = DISCUZ_ROOT."./source/plugin/vyuan/logs/";
if(!is_dir($logDir)){
mkdir($logDir, 0777,true);
}else{
chmod($logDir, 0777);
} //初始化日志
$logHandler= new CLogFileHandler("/source/plugin/logs/".date("Y-m-d").".log");
$log = Log::Init($logHandler, 15); if(empty($orderInfo)){
Log::DEBUG('dingdan bu cun zai');
}else{
Log::DEBUG('dingdan cun zai');
}

不懂地方可留言,或者进微信群内交流。群二维码如果过期,请加我微信:mengyilingjian.

php error_log记录日志的使用方法--拿来即用,超简单的更多相关文章

  1. php error_log记录日志的使用方法和配置 (日志目录一定要手动创建)

    对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...

  2. 把C#程序(含多个Dll)合并成一个Exe的超简单方法

    开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超 ...

  3. chm转换为html的超简单方法

    在Windows下chm转换为html的超简单方法(反编译CHM文件的方法) 通过调用Windows命令,将chm 文件转换为html 文件. 方法: 命令行(cmd),输入hh -decompile ...

  4. 超简单的NDK单步调试方法

    令人兴奋的是,ADTr20已经支持JNI单步调试,再也不需要如上这么麻烦的步骤了 你现在需要做的只需以下2步: 1.使用ndk-build编译时,加上如下参数NDK_DEBUG=1,之后生成so文件之 ...

  5. Asp.Net读取服务器EXE文件的方法!(超简单实例)

    Asp.Net读取服务器EXE文件的方法!(超简单实例) Process process = new Process(); process.StartInfo.FileName = "d:\ ...

  6. [转]PHP实现页面静态化的超简单方法

    为什么要页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快:如果页面中一些内容不经常改动,动态 ...

  7. 超简单的qps统计方法(推荐)【转】

    统计最近N秒内的QPS值(包括每秒select,insert等值) mysql> select variable_name,sum(per_sec) as qps from (select st ...

  8. 三行代码实现.NET MVC统计显示页面的执行时间 超简单的实现方法 分析页面执行效率

    三行代码实现.NET MVC统计显示页面的执行时间 超简单的实现方法 分析页面执行效率    博客页脚处添加了页面执行时间统计显示,如下图所示,也可以直接查看网页页脚处. 实现方法非常简单,只需三行代 ...

  9. 【STM32H7教程】第28章 STM32H7时间关键代码在ITCM执行的超简单方法

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第28章       STM32H7时间关键代码在ITCM执行 ...

随机推荐

  1. Java JDBC利用反射技术将查询结果封装为对象

    1.JDBC将返回结果集封装成对象demo class JdbcDemo { /** * 获取数据库列名 * @param rs * @return */ private static String[ ...

  2. python2.7报错Non-ASCII character '\xe5' in file的解决方法

    在文件首行加#coding=utf-8,一定要在最顶行添加

  3. oracle的insert的时候&符号如何插入

    chr(38)替换& insert   into   table   values( 'http://localhost:8080/index.action?username=138& ...

  4. [LeetCode] 349. Intersection of Two Arrays 两个数组相交

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  5. Oracle:时间字段模糊查询

    需要查询某一天的数据,但是库里面存的是下图date类型 将Oracle中时间字段转化成字符串,然后进行字符串模糊查询 select * from CAINIAO_MONITOR_MSG t WHERE ...

  6. Python3 列表list合并的4种方法

    方法1: 直接使用"+"号合并列表 aList = [1,2,3] bList = ['www', 'pythontab.com'] cList = aList + bList   ...

  7. Markdown 测试用例

    标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 字体 *斜体文本* ...

  8. CI中如何配置BootStrap

  9. Elasticsearch-6.7.0系列(七)SpringCloud连接ES集群,使用ES用户名密码

    pom.xml代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...

  10. Jmeter_自带脚本录制

    1.http请求+查看结果树 代理服务器操作步骤 1.创建一个线程组(右键点击“测试计划“---> ”添加“ ---> ”线程组“) 2.创建一个http代理服务器(右键“测试计划”--& ...