1. <?php
  2.  
  3. /*
  4. 思路:给定文件,写入读取(fopen ,fwrite……)
  5.  
  6. 如果大于1M 则重写备份
  7.  
  8. 传给一个内容,
  9. 判断大小,如果大于1M,备份
  10. 小于则写入
  11. */
  12. class Log{
  13.  
  14. //定义一个常量,创建一个文件的名称
  15. const LOGFILE = 'curr.log';
  16.  
  17. //写入文件
  18. public static function write($cont){
  19. $cont .="\r\n";
  20. $log = self::isBak(); //计算文件的地址,判断大小
  21. $fh = fopen($log,'ab'); //打开,追加模式
  22. fwrite($fh,$cont);
  23. fclose($fh);
  24. }
  25.  
  26. //备份日志
  27. public static function bak(){
  28. //给出写入文件的路径,把原来的日志
  29. //改为年月日 .bak 的形式
  30. $log = ROOT .'data/log/'. self::LOGFILE;
  31. $bak = ROOT .'data/log/'.date('Ymd') .mt_rand(10000,99999). '.bak';
  32.  
  33. return rename($log,$bak);
  34.  
  35. }
  36.  
  37. //判断日志是否大于1M
  38. public static function isBak(){
  39. //判断文件是否存在
  40. $log = ROOT .'data/log/'. self::LOGFILE;
  41. if(!file_exists($log)){
  42. //如果不存在,则创建该文件
  43. touch($log); // touch在linux也有此命令,是快速的建立一个文件
  44. return $log;
  45. }
  46.  
  47. //判断大小
  48. clearstatcache(true,$log); //清除缓存,则创建.bak文件
  49. $size = filesize($log);
  50.  
  51. if($size <= 1024*1024){
  52. //如果<=1M 则写入
  53. return $log;
  54. }
  55. //到这一行,说明大于1M
  56. if(!self::bak()){
  57. return $log;
  58. } else {
  59. touch($log);
  60. return $log;
  61. }
  62. }
  63. }
  64.  
  65. ?>

极端法测试调用,循环执行10000次

  1. //另起页面
  2. //引入日志功能类
  3. class mysql{
  4. public function query($sql){
  5. Log::write($sql);
  6. }
  7. }
  8. $mysql= new mysql();
  9. /**/
  10. for($i=0;$i<10000;$i++){
  11. $sql='select goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goods where goods_id='.rand(10000,99999);
  12. $mysql->query($sql);
  13. }
  14.  
  15. Log::write('记录');
  16. echo "执行完毕";

php之框架增加日志记录功能类的更多相关文章

  1. HAproxy增加日志记录功能和自定义日志输出内容、格式

    http://blog.51cto.com/eric1/1854574 一.增加haproxy日志记录功能   1.1 由于数据分析的需要,我们必须打开haproxy日志,记录相关信息. 在配置前,我 ...

  2. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  3. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil

    封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...

  4. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,nloglogutil

    封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...

  5. C# 日志记录工具类--LogHelper.cs测试

    C# 日志记录工具类:(适用于不想使用log4j等第三方的Log工具的时候,希望自己写个简单类实现)LogHelper.cs内容如下: using System; using System.Diagn ...

  6. 如何自行给指定的SAP OData服务添加自定义日志记录功能

    有的时候,SAP标准的OData实现或者相关的工具没有提供我们想记录的日志功能,此时可以利用SAP系统强大的扩展特性,进行自定义日志功能的二次开发. 以SAP CRM Fiori应用"My ...

  7. LogHelper 日志记录帮助类

    1.LogHelper 日志记录帮助类 using System; using System.Collections.Generic; using System.Linq; using System. ...

  8. 在SpringBoot中用SpringAOP实现日志记录功能

    背景: 我需要在一个SpringBoot的项目中的每个controller加入一个日志记录,记录关于请求的一些信息. 代码类似于: logger.info(request.getRequestUrl( ...

  9. tp5下通过composer实现日志记录功能

    tp5实现日志记录 1.安装 psr/log composer require psr/log 它的作用就是提供一套接口,实现正常的日志功能! 我们可以来细细的分析一下,LoggerInterface ...

随机推荐

  1. Bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍 中位数,数学

    1696: [Usaco2007 Feb]Building A New Barn新牛舍 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 394  Solve ...

  2. VShell破解版

    VShell破解版 VShell破解版

  3. How to install Python 2.7 and Python 3.3 on CentOS 6

    原文地址:http://toomuchdata.com/2014/02/16/how-to-install-python-on-centos/

  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先 ...

  5. delphi TSaveDialog

    TSaveDialog 预览          实现过程 动态创建和使用保存文件对话框 procedure TForm1.Button1Click(Sender: TObject);begin  wi ...

  6. PIC16F877A最小功能板 - 原理图系列

    一.顶层 主要由port转换.MCU.复位.键盘.晶振和显示等5部分电路组成. 二.模块层 1. port转换电路 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...

  7. JAVA获取随机数

    在Java中我们能够使用java.util.Random类来产生一个随机数发生器.它有两种形式的构造函数,各自是Random()和Random(long seed).Random()使用当前时间即Sy ...

  8. MapReduce明星搜索指数统计,找出人气王

    我们继续通过项目强化掌握Combiner和Partitioner优化Hadoop性能 1.项目介绍 本项目我们使用明星搜索指数数据,分别统计出搜索指数最高的男明星和女明星. 2.数据集 3.分析 基于 ...

  9. iOS 数据持久化(1):属性列表与对象归档

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  10. $(this).next()与$(this).children()

    $(this).next() 当前元素同级的下个元素,而非子元素 $(this).children() 是当前元素的下一级元素的集合,就是子元素的集合,而不管子元素的后代元素 所以这两个没有什么可比性 ...