Welcome 微信登录

首页 / 网页编程 / PHP / PHP如何将log信息写入服务器中的log文件

将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.phpif (strtoupper(substr(PHP_OS, 0, 3)) === "WIN") { $defautLogFile = "C:/php/defLogFile.log";}// set default log file for Linux and other systemselse { $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 fileif (!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 filefwrite($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
页面是没有任何输出的:


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

root@chantyou:php# cd access_token/root@chantyou:access_token# lltotal 16-rwxrwxrwx 1 root root 9335 Jul 27 17:51 crifanLib.php-rwxrwxrwx 1 root root 567 Jul 27 17:52 wx_access_token.phproot@chantyou:access_token# lltotal 20-rwxrwxrwx 1 rootroot9335 Jul 27 17:51 crifanLib.php-rw-r--r-- 1 apache apache77 Jul 27 17:56 crifanLibTest.log-rwxrwxrwx 1 rootroot567 Jul 27 17:52 wx_access_token.phproot@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# lltotal 48drwxr-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.phpdrwxr-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.phproot@chantyou:php# chmod ugo+wx access_token/root@chantyou:php# lltotal 48drwxrwxrwx 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.phpdrwxr-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.phpif (strtoupper(substr(PHP_OS, 0, 3)) === "WIN") { $defautLogFile = "C:/php/defLogFile.log";}// set default log file for Linux and other systemselse { $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 filefile_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: is_resource – Manual
【总结】
1.此处可以通过:
fopen创建log文件
fwrite写入文件信息
fclose关闭文件
去实现log信息写入到文件中的。
2.更好的做法是:
直接用更方便的
file_put_contents直接输出内容到log文件
即可。
以上就是将log信息写入服务器中的log文件文件全部内容,希望大家喜欢。