PHP如何将log信息写入服务器中的log文件


Posted in PHP onJuly 29, 2015

将log信息写入服务器中的log文件文件,折腾了一大圈终于找到了解决方案,具体内容如下:

折腾:

【记录】php中如何写类和如何使用类

期间,需要整理出一份,可配置的,通用的,log系统。

支持写入log信息到log文件中。

【折腾过程】

1.搜:

php log to file

参考:

PHP: error_log ? Manual

PHP: syslog ? Manual

How to create logs with PHP ? Web Services Wiki

Write to a log file with PHP | Redips spideR Net

下载代码:

Download redips10.tar.gz

2.期间:

【已解决】PHP中函数前面加上at符号@的作用

3.然后用代码:

crifanLib.php

<?php
/*
[Filename]
crifanLib.php
[Function]
crifan's php lib, implement common functions
[Author]
Crifan Li
[Contact]
http://www.crifan.com/contact_me/
[Note]
1.online see code:
http://code.google.com/p/crifanlib/source/browse/trunk/php/crifanLib.php
[TODO]
[History]
[v1.0]
1.initial version, need clean up later
*/
class crifanLib {
 private $logFile;
 private $logFp;
 /*
  Init log file
 */
 function logInit($inputLogFile = null){
  // set default log file name
  // in case of Windows set default log file
  //http://stackoverflow.com/questions/1482260/how-to-get-the-os-on-which-php-is-running
  //http://php.net/manual/zh/function.php-uname.php
  if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
   $defautLogFile = 'C:/php/defLogFile.log';
  }
  // set default log file for Linux and other systems
  else {
   $defautLogFile = '/tmp/defLogFile.log';
  }
  $this->logFile = $inputLogFile ? $inputLogFile : $defautLogFile;
  // open log file for writing only and place file pointer at the end of the file
  // (if the file does not exist, try to create it)
  $this->logFp = fopen($this->logFile, 'a') or exit("Can't open $this->logFile!");
 }
 /*
  Write log info to file
 */
 function logWrite($logContent){
  // if file pointer doesn't exist, then open log file
  if (!is_resource($this->logFp)) {
   $this->logInit();
  }
  // define script name
  $script_name = pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME);
  // define current time and suppress E_WARNING if using the system TZ settings
  // (don't forget to set the INI setting date.timezone)
  $time = @date('[Y-m-d H:i:s] ');
  // write current time, script name and message to the log file
  fwrite($this->logFp, "$time ($script_name) $logContent" . PHP_EOL);
 }
 /*
  Deinit log
 */
 function logDeinit(){
  if (is_resource($this->logFp)) {
   fclose($this->logFp);
  }
 }
}
 ?>

然后测试代码:

<?php
/*
 Author: Crifan Li
 Version: 2015-07-27
 Contact: http://www.crifan.com/about/me/
 Function:  Wechat get access token
*/
include_once "crifanLib.php";
//test log
$crifanLib = new crifanLib();
$crifanLib->logInit("/xxx/access_token/crifanLibTest.log");
$crifanLib->logWrite("This is crifanLib log test message.");
$crifanLib->logDeinit();
?>

然后去执行对应的代码:

http://xxx/access_token/wx_access_token.php

页面是没有任何输出的:

PHP如何将log信息写入服务器中的log文件

然后的确生成了log文件了:

root@chantyou:php# cd access_token/
root@chantyou:access_token# ll
total 16
-rwxrwxrwx 1 root root 9335 Jul 27 17:51 crifanLib.php
-rwxrwxrwx 1 root root 567 Jul 27 17:52 wx_access_token.php
root@chantyou:access_token# ll
total 20
-rwxrwxrwx 1 root  root  9335 Jul 27 17:51 crifanLib.php
-rw-r--r-- 1 apache apache  77 Jul 27 17:56 crifanLibTest.log
-rwxrwxrwx 1 root  root  567 Jul 27 17:52 wx_access_token.php
root@chantyou:access_token# cat crifanLibTest.log 
[2015-07-27 10:10:33] (wx_access_token) This is crifanLib log test message.
root@chantyou:access_token#

【注意】

要记得给对应的(此处是Linux服务器中的对应的文件夹添加写权限:

root@chantyou:php# ll
total 48
drwxr-xr-x 2 root root 4096 Jul 27 17:55 access_token
-rwxr-xr-x 1 root root 1091 Sep 25 2014 errorCode.php
-rw-r--r-- 1 root root 2230 Jun 10 14:16 MicromsgVerify.php
-rwxr-xr-x 1 root root 4288 Sep 25 2014 pkcs7Encoder.php
-rwxr-xr-x 1 root root 452 Sep 15 2014 Readme.txt
-rwxr-xr-x 1 root root 724 Sep 22 2014 sha1.php
drwxr-xr-x 2 root root 4096 Jul 20 12:34 wechat_encypt
-rwxr-xr-x 1 root root 5327 Sep 15 2014 WXBizMsgCrypt.php
-rwxrwxrwx 1 root root 2455 Jul 16 18:06 wx_didaosuzhou.php
-rwxr-xr-x 1 root root 1346 Sep 22 2014 xmlparse.php
root@chantyou:php# chmod ugo+wx access_token/  
root@chantyou:php# ll
total 48
drwxrwxrwx 2 root root 4096 Jul 27 17:55 access_token
-rwxr-xr-x 1 root root 1091 Sep 25 2014 errorCode.php
-rw-r--r-- 1 root root 2230 Jun 10 14:16 MicromsgVerify.php
-rwxr-xr-x 1 root root 4288 Sep 25 2014 pkcs7Encoder.php
-rwxr-xr-x 1 root root 452 Sep 15 2014 Readme.txt
-rwxr-xr-x 1 root root 724 Sep 22 2014 sha1.php
drwxr-xr-x 2 root root 4096 Jul 20 12:34 wechat_encypt
-rwxr-xr-x 1 root root 5327 Sep 15 2014 WXBizMsgCrypt.php
-rwxrwxrwx 1 root root 2455 Jul 16 18:06 wx_didaosuzhou.php
-rwxr-xr-x 1 root root 1346 Sep 22 2014 xmlparse.php

否则会报错的:

Can't open /xxx/access_token/crifanLibTest.log file!

4.不过突然想起来:

之前已经学过了,

file_put_contents

就可以替代了:fopen,fwrite,fclose了。

所以再去优化为:

crifanLib.php

<?php
/*
[Filename]
crifanLib.php
[Function]
crifan's php lib, implement common functions
[Author]
Crifan Li
[Contact]
http://www.crifan.com/contact_me/
[Note]
1.online see code:
http://code.google.com/p/crifanlib/source/browse/trunk/php/crifanLib.php
[TODO]
[History]
[v2015-07-27]
1.add logInit, logWrite
[v1.0]
1.initial version, need clean up later
*/
class crifanLib {
 private $logFile;
 private $logFp;
 /*
  Init log file
 */
 function logInit($inputLogFile = null){
  // set default log file name
  // in case of Windows set default log file
  //http://stackoverflow.com/questions/1482260/how-to-get-the-os-on-which-php-is-running
  //http://php.net/manual/zh/function.php-uname.php
  if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
   $defautLogFile = 'C:/php/defLogFile.log';
  }
  // set default log file for Linux and other systems
  else {
   $defautLogFile = '/tmp/defLogFile.log';
  }
  $this->logFile = $inputLogFile ? $inputLogFile : $defautLogFile;
 }
 /*
  Write log info to file
 */
 function logWrite($logContent){
  // define script name
  $scriptName = pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME);
  // define current time and suppress E_WARNING if using the system TZ settings
  // (don't forget to set the INI setting date.timezone)
  $timeStr = @date('[Y-m-d H:i:s]');
  // write current time, script name and message to the log file
  file_put_contents($this->logFile, "$timeStr ($scriptName) $logContent" . PHP_EOL, FILE_APPEND);
 }
}
 ?>

测试文件为:

<?php
/*
 Author: Crifan Li
 Version: 2015-07-27
 Contact: http://www.crifan.com/about/me/
 Function: test crifanLib log
*/
include_once "crifanLib.php";
//test log
$crifanLib = new crifanLib();
$crifanLib->logInit("/xxx/logTest.log");
$crifanLib->logWrite("This is crifanLib log test message using file_put_contents");
?>

效果是:

root@chantyou:access_token# ll
total 16
-rw-r--r-- 1 root root 9524 Jul 27 18:16 crifanLib.php
-rwxrwxrwx 1 root root  561 Jul 27 18:18 wx_access_token.php
root@chantyou:access_token# ll
total 20
-rw-r--r-- 1 root   root   9524 Jul 27 18:16 crifanLib.php
-rw-r--r-- 1 apache apache   76 Jul 27 18:19 logTest.log
-rwxrwxrwx 1 root   root    561 Jul 27 18:18 wx_access_token.php
root@chantyou:access_token# cat logTest.log
[2015-07-27 12:05:47] (wx_access_token) This is crifanLib log test message using file_put_contents
root@chantyou:access_token#
如图:

PHP如何将log信息写入服务器中的log文件

注:

期间参考:

PHP: is_resource ? Manual

【总结】

1.此处可以通过:

fopen创建log文件
fwrite写入文件信息
fclose关闭文件
去实现log信息写入到文件中的。

2.更好的做法是:

直接用更方便的

file_put_contents直接输出内容到log文件
即可。

以上就是将log信息写入服务器中的log文件文件全部内容,希望大家喜欢。

PHP 相关文章推荐
php访问查询mysql数据的三种方法
Oct 09 PHP
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
php 中英文语言转换类
Sep 07 PHP
php中的strpos使用示例
Feb 27 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 PHP
java解析json方法总结
May 16 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 #PHP
php去掉文件前几行的方法
Jul 29 #PHP
PHP实现的简单网络硬盘
Jul 29 #PHP
PHP简单生成缩略图相册的方法
Jul 29 #PHP
PHP之预定义接口详解
Jul 29 #PHP
PHP实现的迷你漂流瓶
Jul 29 #PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 #PHP
You might like
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
js创建数组的简单方法
2016/07/27 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python中常用检测字符串相关函数汇总
2015/04/15 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
python如何写出表白程序
2020/06/01 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
城管大队整治方案
2014/05/06 职场文书
会议室标语
2014/06/21 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python