周末来加班 一早就遇见了客户的疯狂连击 ,具体问题就是  客户添加了一次考试 这场考试的及格线是80

那么问题来了 有两个用户 40多分就及格了

客户肯定是不懂数据库的   但是我们可以清楚的看到 这两个问题用户出现的问题在于 及格线pass字段为0 真特么二 ,怎么办找原因吧  ,还好有操作日志。

好吧 问题解决了 客户那边也有了交代  (直接截图扔他脸上 你自己设置的及格线 现在来问我??),那么今天的目的就是告诉大家操作日志的重要性,不但是为了怼客户,

接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程序猿才真正动的英文),调试的时候也会很方便,还可以记录一些重要的操作等等,总之一个完整的项目要是没了日志系统,就已经开发的路上布满了荆棘、坑洼,肯定会磕磕绊绊的。

此文作者的日志是单一日志,加数学序号扩展。

我现在用的是日期日志,应用功能环境不一样,实现的东西有些不同。。

废话不多说了,附上日志类库的源代码:

/** * 日志处理类 *  * @since alpha 0.0.1 * @date 2014.03.04 * @author genialx *  */  class Log{  //单例模式  private static $instance    = NULL;  //文件句柄  private static $handle      = NULL;  //日志开关  private $log_switch     = NULL;  //日志相对目录  private $log_file_path      = NULL;  //日志文件最大长度,超出长度重新建立文件  private $log_max_len        = NULL;  //日志文件前缀,入 log_0  private $log_file_pre       = 'log_';  /** * 构造函数 *  * @since alpha 0.0.1 * @date 2014.02.04 * @author genialx */  protected function __construct(){//注意:以下是配置文件中的常量,请读者自行更改  $this->log_file_path     = LOG_FILE_PATH;  $this->log_switch     = LOG_SWITCH;    $this->log_max_len    = LOG_MAX_LEN;  }  /** * 单利模式 *  * @since alpha 0.0.1 * @date 2014.02.04 * @author genialx */  public static function get_instance(){  if(!self::$instance instanceof self){  self::$instance = new self;  }  return self::$instance;  }  /** *  * 日志记录 *  * @param int $type  0 -> 记录(THING LOG) / 1 -> 错误(ERROR LOG) * @param string $desc * @param string $time *  * @since alpha 0.0.1 * @date 2014.02.04 * @author genialx *  */  public function log($type,$desc,$time){  if($this->log_switch){  if(self::$handle == NULL){  $filename = $this->log_file_pre . $this->get_max_log_file_suf();  self::$handle = fopen($this->log_file_path . $filename, 'a');  }  switch($type){  case 0:  fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));  break;  case 1:  fwrite(self::$handle, 'ERROR LOG:' . ' ' . $desc . ' ' . $time . chr(13));  break;  default:  fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));  break;  }  }  }  /** * 获取当前日志的最新文档的后缀 *  * @since alpha 0.0.1 * @date 2014.02.04 * @author genialx */  private function get_max_log_file_suf(){  $log_file_suf = null;  if(is_dir($this->log_file_path)){  if($dh = opendir($this->log_file_path)){  while(($file = readdir($dh)) != FALSE){  if($file != '.' && $file != '..'){  if(filetype( $this->log_file_path . $file) == 'file'){  $rs = split('_', $file);  if($log_file_suf < $rs[1]){  $log_file_suf = $rs[1];  }  }  }  }  if($log_file_suf == NULL){  $log_file_suf = 0;  }  //截断文件  if( file_exists($this->log_file_path . $this->log_file_pre . $log_file_suf) && filesize($this->log_file_path . $this->log_file_pre . $log_file_suf) >= $this->log_max_len){  $log_file_suf = intval($log_file_suf) + 1;  }  return $log_file_suf;  }     }  return 0;  }  /** * 关闭文件句柄 *  * @since alpha 0.0.1 * @date 2014.02.04 * @author genialx */  public function close(){  fclose(self::$handle);  }
}   

功能说明:

该日志类利用单例模式,节省资源。自行判断文件大小,超出指定大小则按序自行创建文件。如:文件log_0大于指定大小,则重新创建log_1文件(注意:创建文件是安装文件名后缀的数字的,请勿随意更改日志文件名)。
有待优化:

没有指定文件的最大个数,所以定期要手动删除过多的日志文件。

转载于:https://www.cnblogs.com/yumingzhao/p/9381479.html

日志管理系统的重要性---怼死你的客户相关推荐

  1. CentOS 7下安装Logstash ELK Stack 日志管理系统(上)

    介绍The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源,任何 ...

  2. java面试线程必备知识点,怼死面试官,从我做起

    转载自 java面试线程必备知识点,怼死面试官,从我做起 |--多线程一定好么? cpu密集不好 io密集好 |--如何减少上下文切换: 无锁并发(数据id根据Hash分段).CAS.最少线程 |-- ...

  3. 利用最新的开源软件构建日志管理系统

    我们已经知道OSSIM是目前为数不多的几个开源的SIEM/安全管理平台之一,而目前还没有什么集成化的日志管理(LM)系统. 不过,只要你愿意,可以自己DIY一个日志管理系统,并且用到的都是最新的技术. ...

  4. Python+Django毕业设计中小型企业工作日志管理系统APP(程序+LW+部署)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. ELK日志管理系统的搭建

    ELK日志管理系统的搭建 环境准备 Linux安装Elasticsearch 使用的 Elasticsearch的版本是7.6.2.Elasticsearch7.x要求 Linux内核必须是4+版本以 ...

  6. 日志管理系统排名_目前较好的日志管理系统有哪些?

    企业网络日志管理是企业IT管理员的重要工作之一,日志分析对网络安全具有非常重要的意义.随着互联网的飞速发展,企业网络信息安全面临的挑战越来越大,内鬼恶意操作,外部网络攻击,内部误操作等都能破坏企业网络 ...

  7. 开源服务器日志实时查看系统,开源日志管理系统

    开源日志管理系统 内容精选 换一换 鲲鹏工程师培训及认证为客户提供鲲鹏认证伙伴基于open系开源内核构建的商业软件培训,包含商业软件介绍.特性描述.操作使用.开发指导等内容. 来自:其他 MindX ...

  8. 基于javaweb+jsp的工作日志管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)

    基于javaweb+jsp的工作日志管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot) JavaWeb JavaBean JSP MVC ...

  9. 基于javaweb+jsp的工作日志管理系统

    基于javaweb+jsp的工作日志管理系统 JavaWeb JavaBean JSP MVC MySQL Tomcat JavaScript Bootstrap 基础JSP+Servlet或JSP+ ...

最新文章

  1. 计算机全球服务器,云计算的宿命:全球合并成一台计算机,支持无服务器运行...
  2. struts.xml向页面传参
  3. Android Tab 选项卡的简单实现
  4. python设置坐标轴刻度值字体大小_python 设置xlabel,ylabel 坐标轴字体大小,字体类型...
  5. linux系统模块管理
  6. HarmonyOS之常用组件TextField的功能和使用
  7. VC6 CImage 加载jpg png bmp
  8. 离合器半联动点的判断和技巧 为您支招
  9. Windows Phone Developer Registration 开发人员无法连接注册解决
  10. bzoj2705: [SDOI2012]Longge的问题
  11. word转HTML 基本版
  12. 李永乐2021线代讲义练习题答案
  13. xcode13创建mac控制台应用程序
  14. JLink的JTag和SWD模式引脚定义
  15. 移动端 1px 像素处理
  16. 中望3D 2021 插入基准面 - 2实体构面法
  17. 电影网页制作HTML+CSS
  18. 机器学习学习过程记录
  19. Android 音频可视化
  20. Windows 10 64bit 安装dotnetfx 3.5出错的解决办法(备忘)

热门文章

  1. python微控制器编程从零开始-Python微控制器编程从零开始 使用MicroPython
  2. python银行系统-菲菲用python模拟银行系统
  3. python快速自学方式-Python自学之路 ,自学Python快速入门方法
  4. python运行慢-提高python运行速度的几个技巧
  5. python怎么打开编辑器-python用什么编辑器进行项目开发
  6. python窗口程序-Python GUI 编程(Tkinter)
  7. python填写excel-Python玩转Excel的读写改实例
  8. python怎么学最快-人工智能Python开发怎么学才能最快入门
  9. shell中基本正则表达式的元字符
  10. 设置网络映射后,电脑重启后自动重连