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 相关文章推荐
信用卡效验程序
Oct 09 PHP
php生成文件
Jan 15 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
PHP防盗链代码实例
Aug 27 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 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
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
python中map()与zip()操作方法
2016/02/27 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
keras 权重保存和权重载入方式
2020/05/21 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
python利用opencv保存、播放视频
2020/11/02 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
4s店机修工岗位职责
2013/12/20 职场文书
认识深刻的检讨书
2014/02/16 职场文书
就业协议书怎么填
2014/04/11 职场文书
李强优秀员工观后感
2015/06/16 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js