- 浏览: 1777494 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
写个日志封装器....
<?php /** * 日志系统抽象类 * */ abstract class LogWriterAbstract { /** * 是否启用日志记录 * * @var boolean */ protected $_enabled = true; abstract function append($msg, $title = '', $level = 'info'); } /** * LogFirePHPWriter 类提供对 FirePHP 的支持 */ class LogFirePHPWriter extends LogWriterAbstract { /** * FirePHP 具体实现对象 * * @var FirePHP */ private $_kernel; function __construct(){ $this->_enabled = App::ini('_log_enabled',true); if (!$this->_enabled) return; require_once 'FirePHP.class.php'; $this->_kernel = FirePHP::getInstance(true); } function append($msg, $title = '', $level = 'info'){ if ($this->_enabled) $this->_kernel->fb($msg, $title, FirePHP::INFO); } } /** * LogFile 类提供基本的文件日志服务 */ class LogFileWriter extends LogWriterAbstract { /** * 保存运行期间的日志 * * @var string */ private $_log = ''; /** * 日期格式 * * @var string */ private $dateFormat = 'Y-m-d H:i:s'; /** * 保存日志文件的目录 * * @var string */ private $_logFileDir; /** * 保存日志的文件名 * * @var string */ private $_logFilename; /** * 要写入日志文件的错误级别 * * @var array */ private $_errorLevel; /** * 构造函数 */ function __construct() { $this->_enabled = App::ini('_log_enabled',true); if (!$this->_enabled) return; $dir = App::ini('_log_file_dir',null); if (empty($dir)){ $this->_enabled = false; return; } $dir = realpath($dir); if (substr($dir, -1) != DS) { $dir .= DS; } if (!is_dir($dir) || !is_writable($dir)) { $this->_enabled = false; } else { $this->_logFileDir = $dir; $this->_logFilename = $this->_logFileDir . App::ini('_log_filename','access.log'); $errorLevel = explode(',', strtolower(App::ini('_log_levels','notice, debug, warning, error, exception, info'))); $errorLevel = array_map('trim', $errorLevel); $errorLevel = array_filter($errorLevel, 'trim'); $this->_errorLevel = array(); foreach ($errorLevel as $e) { $this->_errorLevel[$e] = true; } global $___sfw_loaded_time; $sec = (int) $___sfw_loaded_time; $usec = $___sfw_loaded_time - $sec; $this->_startTag = sprintf("[%s %s] ======= SFW Loaded =======\n", date($this->dateFormat, $sec), $usec); if (isset($_SERVER['REQUEST_URI'])) { $this->_startTag .= sprintf("[%s] REQUEST_URI: %s\n", date($this->dateFormat), $_SERVER['REQUEST_URI']); } // 注册脚本结束时要运行的方法,将缓存的日志内容写入文件 ShutdownCallback::getInstance()->add(array($this, '__writeLog')); // 检查文件是否已经超过指定大小 if (file_exists($this->_logFilename)) { $filesize = filesize($this->_logFilename); } else { $filesize = 0; } $maxsize = (int)App::ini('_log_file_maxsize',512); if ($maxsize >= 512) { $maxsize = $maxsize * 1024; if ($filesize >= $maxsize) { // 使用新的日志文件名 $pathinfo = pathinfo($this->_logFilename); $newFilename = $pathinfo['dirname'] . DS . basename($pathinfo['basename'], '.' . $pathinfo['extension']) . date('-Ymd-His') . '.' . $pathinfo['extension']; rename($this->_logFilename, $newFilename); } } } } /** * 追加日志信息 * * @param string $msg * @param string $title * @param string $level */ function append($msg, $title = '', $level = 'info') { if ($this->_enabled && isset($this->_errorLevel[strtolower($level)])){ $this->_log .= sprintf("[%s] [%s] %s:%s\n", date($this->dateFormat), $level, $title, print_r($msg, true)); } } /** * 将缓存的日志信息写入实际存储,并清空缓存 * 此方法由系统自动调用 * */ function __writeLog(){ if (!$this->_enabled) return; if (empty($this->_log)) return; global $___sfw_loaded_time; $shutdown_time = microtime(true); $sec = (int) $shutdown_time; $usec = $shutdown_time - $sec; $elapsedTime = $shutdown_time - $___sfw_loaded_time; $content = $this->_startTag . $this->_log . sprintf("[%s %s] ======= SFW End (elapsed: %f seconds) =======\n\n",date($this->dateFormat, $sec), $usec, $elapsedTime); $fp = fopen($this->_logFilename, 'a'); if (!$fp) { return; } flock($fp, LOCK_EX); fwrite($fp, str_replace("\r", '', $content)); flock($fp, LOCK_UN); fclose($fp); } }
<?php /** * 应用程序基本启动文件,提供应用程序运行的关键设置信息 */ $root_dir = dirname(dirname(dirname(__FILE__))); /** * 如果要集成第三方的 PHP 库,错误报告也许要修改为: * * error_reporting(E_ALL & ~(E_STRICT | E_NOTICE)); */ error_reporting(E_ALL | E_STRICT); $config = array( /** * 应用程序的 ID,用于唯一标识一个应用程序 */ 'APPID' => 'todo', /** * 应用程序根目录 */ 'ROOT_DIR' => $root_dir, /** * 主程序所在目录 */ 'APP_DIR' => "{$root_dir}/_code/app", /** * 辅助库目录 */ 'LIBRARY_DIR' => "{$root_dir}/_code/lib", /** * 配置文件所在目录 */ 'CONFIG_DIR' => "{$root_dir}/_code/config", /** * 临时(缓存)文件所在目录 */ 'TMP_DIR' => "{$root_dir}/_code/tmp", /** * 日志文件所在目录 */ 'LOG_DIR' => "{$root_dir}/_code/log", /** * 所有扩展模块所在的目录 */ 'MODULE_DIR' => "{$root_dir}/_code/app/modules", ); // 设置类文件基本路径 //set_include_path('.' . PATH_SEPARATOR . $config['LIBRARY_DIR'] . PATH_SEPARATOR . get_include_path()); require_once("{$config['LIBRARY_DIR']}/app.php"); App::replaceIni($config); // 加载不同命名空间下的配置文件 {namespace}.sys.php,{namespace}.route.php $configForNamepace = array( /** * 国际化和本地化 */ '_i18n_multi_languages' => false,// 指示是否启用多语言支持 '_l10n_default_timezone' => 'Asia/Shanghai',// 默认的时区设置 /** * 日志设置 */ '_log_enabled' => true , '_log_writer' => 'LogFileWriter' , //LogFirePHPWriter '_log_file_dir' => App::ini('LOG_DIR'), '_log_filename' => "{$namespace}-access.log" , '_log_file_maxsize' => 512 , '_log_levels' => 'notice, debug, warning, error, exception, info' , /** * 数据库链接DSN设置 */ '_db_default_dsn' => array( 'driver' => 'mysqlt', 'host' => 'localhost', 'login' => 'root', 'password' => 'root', 'database' => 'smallcms', 'charset' => 'utf8', ), ); App::replaceIni($configForNamepace); /** * 初始化应用程序 */ // 设置默认的时区 date_default_timezone_set(App::ini('_i10n_default_timezone','Asia/Shanghai')); // 设置应用的日志记录服务 require_once("{$config['LIBRARY_DIR']}/log.php"); App::$_log_ = App::singleton(App::ini('_log_writer')); // 设置应用的缓存服务 // 加载数据库操作组件 require_once("{$config['LIBRARY_DIR']}/db.php"); // 设置分发器对象,并进行请求分发 require_once("{$config['LIBRARY_DIR']}/web.php"); $wd = WebDispatcher::getInstance(); $wd->setNamespace($namespace); // 设置过滤器 //$wd->addBeforeFilter(new RequestAuthFilter()); $response = $wd->dispatching(); if ($response) echo $response;
评论
11 楼
vb2005xu
2011-05-30
输出结果如下:
[2011-05-27 16:15:14 0.625001907349] ======= SFW Loaded =======
[2011-05-27 16:15:14] REQUEST_URI: /index.php?controller=about123
[2011-05-27 16:15:14] [error] error:需要的类文件 "controllers/about123.php" 没有找到.
[2011-05-27 16:15:14 0.693089962006] ======= SFW End (elapsed: 0.068088 seconds) =======
[2011-05-28 18:17:21 0.343753099442] ======= SFW Loaded =======
[2011-05-28 18:17:21] REQUEST_URI: /index.php?q=/product/index/module/bbs
[2011-05-28 18:17:21] [error] error:需要的类文件 "modules/bbs/controllers/product.php" 没有找到.
[2011-05-28 18:17:21 0.414000988007] ======= SFW End (elapsed: 0.070248 seconds) =======
[2011-05-28 18:22:13 0.390628099442] ======= SFW Loaded =======
[2011-05-28 18:22:13] REQUEST_URI: /index.php?q=contace/index/
[2011-05-28 18:22:13] [error] error:需要的类文件 "controllers/ontace.php" 没有找到.
[2011-05-28 18:22:13 0.461007118225] ======= SFW End (elapsed: 0.070379 seconds) =======
[2011-05-30 12:19:10 0.875003099442] ======= SFW Loaded =======
[2011-05-30 12:19:10] REQUEST_URI: /index.php
[2011-05-30 12:19:10] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:10 0.995488882065] ======= SFW End (elapsed: 0.120486 seconds) =======
[2011-05-30 12:19:11 0.125001907349] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.245165109634] ======= SFW End (elapsed: 0.120163 seconds) =======
[2011-05-30 12:19:11 0.343750953674] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.466424942017] ======= SFW End (elapsed: 0.122674 seconds) =======
[2011-05-30 12:19:11 0.546875953674] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.675940990448] ======= SFW End (elapsed: 0.129065 seconds) =======
[2011-05-30 12:19:11 0.781251907349] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.894905090332] ======= SFW End (elapsed: 0.113653 seconds) =======
[2011-05-30 12:19:12 1.90734863281E-006] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.118478059769] ======= SFW End (elapsed: 0.118476 seconds) =======
[2011-05-30 12:19:12 0.203125953674] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.324215888977] ======= SFW End (elapsed: 0.121090 seconds) =======
[2011-05-30 12:19:12 0.406250953674] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.518239021301] ======= SFW End (elapsed: 0.111988 seconds) =======
[2011-05-30 12:19:12 0.609375953674] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.729964971542] ======= SFW End (elapsed: 0.120589 seconds) =======
[2011-05-30 12:19:12 0.812503099442] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.924803972244] ======= SFW End (elapsed: 0.112301 seconds) =======
[2011-05-30 12:19:13 0.0156269073486] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.1363260746] ======= SFW End (elapsed: 0.120699 seconds) =======
[2011-05-30 12:19:13 0.234378099442] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.355084896088] ======= SFW End (elapsed: 0.120707 seconds) =======
[2011-05-30 12:19:13 0.437500953674] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.55776309967] ======= SFW End (elapsed: 0.120262 seconds) =======
[2011-05-30 12:19:13 0.640625953674] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.770454883575] ======= SFW End (elapsed: 0.129829 seconds) =======
[2011-05-30 12:19:13 0.859378099442] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.979728937149] ======= SFW End (elapsed: 0.120351 seconds) =======
[2011-05-30 12:19:14 0.0625019073486] ======= SFW Loaded =======
[2011-05-30 12:19:14] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:14] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:14 0.183491945267] ======= SFW End (elapsed: 0.120990 seconds) =======
[2011-05-30 12:19:14 0.265626907349] ======= SFW Loaded =======
[2011-05-30 12:19:14] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:14] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:14 0.38857793808] ======= SFW End (elapsed: 0.122951 seconds) =======
[2011-05-30 12:19:14 0.484375953674] ======= SFW Loaded =======
[2011-05-30 12:19:22] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:22] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:22 0.12629199028] ======= SFW End (elapsed: 7.641916 seconds) =======
引用
[2011-05-27 16:15:14 0.625001907349] ======= SFW Loaded =======
[2011-05-27 16:15:14] REQUEST_URI: /index.php?controller=about123
[2011-05-27 16:15:14] [error] error:需要的类文件 "controllers/about123.php" 没有找到.
[2011-05-27 16:15:14 0.693089962006] ======= SFW End (elapsed: 0.068088 seconds) =======
[2011-05-28 18:17:21 0.343753099442] ======= SFW Loaded =======
[2011-05-28 18:17:21] REQUEST_URI: /index.php?q=/product/index/module/bbs
[2011-05-28 18:17:21] [error] error:需要的类文件 "modules/bbs/controllers/product.php" 没有找到.
[2011-05-28 18:17:21 0.414000988007] ======= SFW End (elapsed: 0.070248 seconds) =======
[2011-05-28 18:22:13 0.390628099442] ======= SFW Loaded =======
[2011-05-28 18:22:13] REQUEST_URI: /index.php?q=contace/index/
[2011-05-28 18:22:13] [error] error:需要的类文件 "controllers/ontace.php" 没有找到.
[2011-05-28 18:22:13 0.461007118225] ======= SFW End (elapsed: 0.070379 seconds) =======
[2011-05-30 12:19:10 0.875003099442] ======= SFW Loaded =======
[2011-05-30 12:19:10] REQUEST_URI: /index.php
[2011-05-30 12:19:10] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:10 0.995488882065] ======= SFW End (elapsed: 0.120486 seconds) =======
[2011-05-30 12:19:11 0.125001907349] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.245165109634] ======= SFW End (elapsed: 0.120163 seconds) =======
[2011-05-30 12:19:11 0.343750953674] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.466424942017] ======= SFW End (elapsed: 0.122674 seconds) =======
[2011-05-30 12:19:11 0.546875953674] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.675940990448] ======= SFW End (elapsed: 0.129065 seconds) =======
[2011-05-30 12:19:11 0.781251907349] ======= SFW Loaded =======
[2011-05-30 12:19:11] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:11] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:11 0.894905090332] ======= SFW End (elapsed: 0.113653 seconds) =======
[2011-05-30 12:19:12 1.90734863281E-006] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.118478059769] ======= SFW End (elapsed: 0.118476 seconds) =======
[2011-05-30 12:19:12 0.203125953674] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.324215888977] ======= SFW End (elapsed: 0.121090 seconds) =======
[2011-05-30 12:19:12 0.406250953674] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.518239021301] ======= SFW End (elapsed: 0.111988 seconds) =======
[2011-05-30 12:19:12 0.609375953674] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.729964971542] ======= SFW End (elapsed: 0.120589 seconds) =======
[2011-05-30 12:19:12 0.812503099442] ======= SFW Loaded =======
[2011-05-30 12:19:12] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:12] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:12 0.924803972244] ======= SFW End (elapsed: 0.112301 seconds) =======
[2011-05-30 12:19:13 0.0156269073486] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.1363260746] ======= SFW End (elapsed: 0.120699 seconds) =======
[2011-05-30 12:19:13 0.234378099442] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.355084896088] ======= SFW End (elapsed: 0.120707 seconds) =======
[2011-05-30 12:19:13 0.437500953674] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.55776309967] ======= SFW End (elapsed: 0.120262 seconds) =======
[2011-05-30 12:19:13 0.640625953674] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.770454883575] ======= SFW End (elapsed: 0.129829 seconds) =======
[2011-05-30 12:19:13 0.859378099442] ======= SFW Loaded =======
[2011-05-30 12:19:13] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:13] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:13 0.979728937149] ======= SFW End (elapsed: 0.120351 seconds) =======
[2011-05-30 12:19:14 0.0625019073486] ======= SFW Loaded =======
[2011-05-30 12:19:14] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:14] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:14 0.183491945267] ======= SFW End (elapsed: 0.120990 seconds) =======
[2011-05-30 12:19:14 0.265626907349] ======= SFW Loaded =======
[2011-05-30 12:19:14] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:14] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:14 0.38857793808] ======= SFW End (elapsed: 0.122951 seconds) =======
[2011-05-30 12:19:14 0.484375953674] ======= SFW Loaded =======
[2011-05-30 12:19:22] REQUEST_URI: /index.php?q=/application/index/
[2011-05-30 12:19:22] [error] error:需要的文件 "代码地址/_code/app/views/_elements/repproductimgs_element.php" 没有找到.
[2011-05-30 12:19:22 0.12629199028] ======= SFW End (elapsed: 7.641916 seconds) =======
10 楼
vb2005xu
2011-05-30
这里记录下 一点 为什么在 LogFirePHPWriter 的构造函数里面 使用 自定义的
# // 注册脚本结束时要运行的方法,将缓存的日志内容写入文件
# ShutdownCallback::getInstance()->add(array($this, '__writeLog'));
而不使用 类的 析构函数 来自动设置写入... 这个原因 在于 异常的出现 , 当出现异常时 完全就抛出异常了 不会再进行 这个操作了....
所以 使用 自定义的 ShutdownCallback 来保证会被脚本100%执行....
这些都是 sfw 里面的代码 .... 呵呵...
ShutdownCallback 很简单 ... 就一个基本类
# // 注册脚本结束时要运行的方法,将缓存的日志内容写入文件
# ShutdownCallback::getInstance()->add(array($this, '__writeLog'));
而不使用 类的 析构函数 来自动设置写入... 这个原因 在于 异常的出现 , 当出现异常时 完全就抛出异常了 不会再进行 这个操作了....
所以 使用 自定义的 ShutdownCallback 来保证会被脚本100%执行....
这些都是 sfw 里面的代码 .... 呵呵...
ShutdownCallback 很简单 ... 就一个基本类
<?php /** * 对register_shutdown_function 函数栈的扩展 * */ final class ShutdownCallback { private $_stack = NULL; private function __construct(){ $this->_stack = array(); register_shutdown_function(array($this, 'flush')); } /** * 返回 ShutdownCallback 类的单例对象 * * @return ShutdownCallback */ static function getInstance(){ static $inst = NULL; if (!$inst) $inst = new self(); return $inst; } /** * 向框架注册一个脚本结束时要调用的方法 * 此方法用于取代 类的 析构函数,当脚本运行出现异常或者错误时,析构函数并不执行 * * $callback 类型: * 1. 字符串 -- str_func_name * 2. 数组 -- array($class_or_obj,$method) * @param mixed $callback * @param array $params */ function add($callback,array $params=null){ if (is_callable($callback)) $this->_stack[] = array($callback,$params); } function flush(){ while(!empty($this->_stack)){ list($callback,$params) = array_pop($this->_stack); call_user_func_array($callback,$params); } } }
9 楼
vb2005xu
2011-05-30
上面的代码经过测试有问题,不能自定义日志级别的输出 汗死 犯了很低级的错误 ,在 append 方法里面
原来是 校验 两个条件
更正后
应该加上 $this->_errorLevel[$level] 这个值的校验,缺省就是false 所以 isset肯定是true ,....
....
原来是 校验 两个条件
$this->_enabled && isset($this->_errorLevel[$level])
更正后
$this->_enabled && isset($this->_errorLevel[$level]) && $this->_errorLevel[$level]
应该加上 $this->_errorLevel[$level] 这个值的校验,缺省就是false 所以 isset肯定是true ,....
....
8 楼
抢街饭
2011-05-11
PHP 恶心的变量名字 看的我头疼
7 楼
crskyp
2011-05-05
1927105 写道
LZ邪恶的变量命名
支持楼主
6 楼
1927105
2011-05-05
LZ邪恶的变量命名
5 楼
Tank03
2011-05-05
嘿~~排版不错。下啦。
4 楼
vb2005xu
2011-05-03
发了 在 sfw最初版本里面 那个页面上 你看看 应该在首页上
3 楼
VE星辰
2011-05-03
建议顺便发个demo给我们下载,嘿嘿
2 楼
vb2005xu
2011-04-17
更新后的版本:
<?php /** * 日志系统抽象类 * */ abstract class LogWriterAbstract { /** * 是否启用日志记录 * * @var boolean */ protected $_enabled = true; /** * 日志记录的错误级别 * * @var array */ protected $_errorLevel = array( 'notice' => false, 'debug' => false, 'warning' => false, 'error' => false, 'exception' => false, 'info' => false, ); abstract function append($msg, $title = '', $level = 'info'); } /** * LogFirePHPWriter 类提供对 FirePHP 的支持 */ class LogFirePHPWriter extends LogWriterAbstract { function __construct(){ $this->_enabled = App::ini('_log/enabled',true); if (!$this->_enabled) return; $errorLevel = normalize(strtolower(App::ini('_log/levels','exception,error')),','); if (!empty($errorLevel)) foreach ($errorLevel as $e) $this->_errorLevel[$e] = true; } function append($msg, $title = '', $level = 'info'){ $level = strtolower(trim($level)); if ($this->_enabled && isset($this->_errorLevel[$level])){ switch($level){ case 'info': case 'debug': FirePhpHelper::getInstance()->info($msg, $title); break; case 'notice': FirePhpHelper::getInstance()->log($msg, $title); break; case 'exception': FirePhpHelper::getInstance()->warn($msg, $title); break; case 'error': FirePhpHelper::getInstance()->error($msg, $title); break; } } } } /** * LogFile 类提供基本的文件日志服务 */ class LogFileWriter extends LogWriterAbstract { /** * 保存运行期间的日志 * * @var string */ private $_log = ''; /** * 日期格式 * * @var string */ private $dateFormat = 'Y-m-d H:i:s'; /** * 保存日志文件的目录 * * @var string */ private $_logFileDir; /** * 保存日志的文件名 * * @var string */ private $_logFilename; /** * 构造函数 */ function __construct() { $this->_enabled = App::ini('_log/enabled',true); if (!$this->_enabled) return; $dir = App::ini('_log/file_dir',null); if (empty($dir)){ $this->_enabled = false; return; } $dir = realpath($dir); if (substr($dir, -1) != DS) { $dir .= DS; } if (!is_dir($dir) || !is_writable($dir)) { $this->_enabled = false; } else { $this->_logFileDir = $dir; $this->_logFilename = $this->_logFileDir . App::ini('_log/filename','access.log'); $errorLevel = normalize(strtolower(App::ini('_log/levels','exception,error')),','); if (!empty($errorLevel)){ foreach ($errorLevel as $e){ if (isset($this->_errorLevel[$e])) $this->_errorLevel[$e] = true; } } global $___sfw_loaded_time; $sec = (int) $___sfw_loaded_time; $usec = $___sfw_loaded_time - $sec; $this->_startTag = sprintf("[%s %s] ======= SFW Loaded =======\n", date($this->dateFormat, $sec), $usec); if (isset($_SERVER['REQUEST_URI'])) { $this->_startTag .= sprintf("[%s] REQUEST_URI: %s\n", date($this->dateFormat), $_SERVER['REQUEST_URI']); } // 注册脚本结束时要运行的方法,将缓存的日志内容写入文件 ShutdownCallback::getInstance()->add(array($this, '__writeLog')); // 检查文件是否已经超过指定大小 if (file_exists($this->_logFilename)) { $filesize = filesize($this->_logFilename); } else { $filesize = 0; } $maxsize = (int)App::ini('_log/file_maxsize',512); if ($maxsize >= 512) { $maxsize = $maxsize * 1024; if ($filesize >= $maxsize) { // 使用新的日志文件名 $pathinfo = pathinfo($this->_logFilename); $newFilename = $pathinfo['dirname'] . DS . basename($pathinfo['basename'], '.' . $pathinfo['extension']) . date('-Ymd-His') . '.' . $pathinfo['extension']; rename($this->_logFilename, $newFilename); } } } } /** * 追加日志信息 * * @param string $msg * @param string $title * @param string $level */ function append($msg, $title = '', $level = 'info') { if ($this->_enabled && isset($this->_errorLevel[strtolower($level)])){ $this->_log .= sprintf("[%s] [%s] %s:%s\n", date($this->dateFormat), $level, $title, print_r($msg, true)); } } /** * 将缓存的日志信息写入实际存储,并清空缓存 * 此方法由系统自动调用 * */ function __writeLog(){ if (!$this->_enabled) return; if (empty($this->_log)) return; global $___sfw_loaded_time; $shutdown_time = microtime(true); $sec = (int) $shutdown_time; $usec = $shutdown_time - $sec; $elapsedTime = $shutdown_time - $___sfw_loaded_time; $content = $this->_startTag . $this->_log . sprintf("[%s %s] ======= SFW End (elapsed: %f seconds) =======\n\n",date($this->dateFormat, $sec), $usec, $elapsedTime); $fp = fopen($this->_logFilename, 'a'); if (!$fp) { return; } flock($fp, LOCK_EX); fwrite($fp, str_replace("\r", '', $content)); flock($fp, LOCK_UN); fclose($fp); } }
1 楼
vb2005xu
2011-04-15
/** * 缓存组件抽象类 * */ abstract class CacheWriterAbstract { /** * 写入缓存 * * @param string $id * @param mixed $data * @param array $policy */ abstract function set($id, $data, array $policy = null); /** * 读取缓存,失败或缓存撒失效时返回 false * * @param string $id * @param array $policy * * @return mixed */ abstract function get($id, array $policy = null); /** * 删除指定的缓存 * * @param string $id * @param array $policy */ abstract function remove($id, array $policy = null); }
发表评论
-
ws-http 最简单轻量的PHP CURL工具库
2016-07-29 20:44 2622欢迎大家拍砖 https://github.com/to ... -
Facade 包装类 -- 解决视图里面长长的命名空间调用问题
2016-04-20 10:48 1745有时候模版里面定义 ... -
PHP单例模式面试注意事项
2015-10-20 09:57 1952最近面了不少PHP从业者,有实习生也有5/6年以上的开发者 ... -
NGINX 配置 SSL 证书 搭建 HTTPS 网站
2015-10-19 19:19 2918下面是详细的配置过程: 1、在服务器上使用 Open ... -
关于php cron任务管理的实现假想
2015-10-17 21:25 1898之前每开发一个计划任务功能均需要在线上操作crontab来新 ... -
修改一些PHP工具
2014-10-24 19:27 1800原来的代码 在非框架下是木有问题的,但是用在框架下就报错, ... -
sublime text linux上中文输入问题的终极解决方案
2014-10-13 11:07 8563我一直在使用sublime text ... -
qeephp3.0 发布了
2014-10-07 17:21 1701QeePHP 是一个快速、灵活的开发框架。应用各种成熟的架构 ... -
swiftmailer 的快捷助手 qser-mailer
2014-09-09 23:52 3593近日在对charsen的修改版上进行了再次的修改与调整,对 ... -
PHP 中简单的伪造IP刷票实现
2014-05-15 17:06 2758一般而言,我们的获取用户真实ip的代码大致是这样... / ... -
PHP5.5 htmlspecialchars 返回null的坑
2014-04-25 12:23 2612昨天在写 PDO数据库封装类的 测试代码时遇到这个问题,取 ... -
PHP 5.5 empty + 魔术变量 的坑
2014-04-16 15:53 1599今天在测试代码时遇到这么一个疑问? dump((in ... -
Aert_Log: 设计一个精简易用的日志
2014-04-13 18:28 2479日志记录对于应用的 ... -
创建一个简单的短链服务类
2013-07-01 18:20 1363整理一个简单的短链算法,整理到自己的代码库中: &l ... -
收集常用的PHP简单代码
2013-06-30 17:53 2054对于日常工作中整理出来的某些功能做个简单梳理: 1 ... -
简易PHP路由,支持正反向url解析支持
2013-06-21 22:23 8229几年前实现了一个简单的正向路由,那时候不会写反向路由解析, ... -
系统学习のCACHE 学习
2012-11-21 13:58 1905http://www.phpfans.net/article/ ... -
YY 下 sql查询封装类 不知道好不好使
2012-07-18 16:44 1333<?php class Pkg_Db_Actor { ... -
生成后台管理菜单 admin_menu 类
2012-05-05 18:27 4646<?php /** * 管理菜单 * */ ... -
抽取个sql生成器工具 -- 摘自 fuelphp1.1 版本
2012-04-25 20:17 1228<?php /** * Sql 创造者类 * ...
相关推荐
1. **初始化 zap 日志器**:创建一个基础的日志配置,设置日志级别(如Debug、Info、Error等),输出目的地(如文件、标准输出、网络等)以及时间格式。可以使用`zap.NewProduction()`或`zap.NewDevelopment()`快速...
log4cplus是C 编写的开源的日志系统,log为对其的封装类,支持类似Format方式输出日志,方便开发中对日志的编写以及维护,在程序启动的时候调用InitLogger方法,例如: 用法基本上和printf()和CSting::Format()...
在压缩包"系统日志查看器"中,包含的文件很可能是该工具的安装程序或执行文件,用户只需按照常规步骤安装或运行,即可在自己的计算机上使用该工具来查看和管理系统日志。 总之,系统日志查看器是IT运维人员的得力...
这个压缩包中的"TestConsoleApp"很可能是一个演示程序,展示了如何使用封装好的线程安全日志类。在多线程环境中,直接并发写入txt文件可能会导致数据交错,因为多个线程可能会同时写入,破坏日志的完整性。为了解决...
用java swing写的一个简单的日志分析工具,读取的是tomcat默认的日志格式,用的是jdk1.7编译的。 如果日志文件比较大,可以用命令设置内存启动(如:java -Xms512m -Xmx2048m -jar tomcat日志分析器.jar)
此压缩包可能包括了使用PowerShell脚本、API示例或事件查看器操作的教程,帮助用户更好地理解和管理Windows系统事件日志。通过学习这些内容,无论是系统管理员还是开发者,都能更有效地监控和维护Windows环境。
毕业设计源码员工工作日志管理系统.zip毕业设计源码员工工作日志管理系统.zip毕业设计源码员工工作日志管理系统.zip毕业设计源码员工工作日志管理系统.zip毕业设计源码员工工作日志管理系统.zip毕业设计源码员工工作...
对log4net工具包进行了二次封装,利用配置类和静态方法动态创建日志对象,可以设置日志名称、保存根目录、分支目录、日志文件大小、日志文件数量、日志保存时限等。 log4net 是一个高度灵活且强大的日志记录库,可...
本文将详细介绍如何使用Java反射机制实现一个简单但功能齐全的日志记录器——`LoggerUtil`。此日志记录器能够根据不同级别(如INFO、ERROR)记录日志,并允许通过反射动态调用日志记录方法,从而提供了一种灵活的...
0.31 python之logging日志类的封装.mp4
PyLogging库是对这个模块的一个小封装,旨在简化日志的配置和输出,使得开发者能更方便地管理和格式化日志信息。在`ansrivas-pylogging-f38bc72`这个压缩包中,我们很可能是找到了一个由用户ansrivas编写的对`...
QmlLog4Qml是一个专为Qt Quick(Qml)设计的日志记录工具,它使得在Qml应用程序中实现日志记录变得简单高效。在Qml编程中,日志记录对于调试、性能分析以及问题排查至关重要。QmlLog4Qml提供了一套完整的API,允许...
例如,使用这个封装好的日志类,代码可能如下所示: ```cpp Logger logger("path/to/logfile.log"); logger.info("这是一个信息日志"); logger.error("发生了一个错误", error_code); ``` 以上就是关于在QT下实现...
本文将深入探讨一个支持ASCII和Unicode编码的日志封装类的设计和实现,以`Log.cpp`和`Log.h`两个文件为例。 首先,`Log.h`文件通常包含类的声明,定义了日志类的接口。这个类可能包含以下几个关键部分: 1. **类...
工作日志写作指南 工作日志是员工在工作中记录自己的工作内容、完成情况、重大事件和疑难问题等信息的文档,目的是为了方便上级快速了解下属的工作状况和工作效率,在工作中存在的困难,从而在第一时间内配合下属...
同时,理解`catalina.out`日志文件的结构和内容也很重要,例如,识别错误级别(如INFO、WARN、ERROR)、跟踪堆栈信息以及理解服务器启动和关闭的流程。 在实际工作中,日志管理的最佳实践包括定期清理和归档旧日志...
1. 使用文本编辑器打开`/etc/rsyslog.conf`文件。 ```bash vi /etc/rsyslog.conf ``` 2. 在文件末尾添加以下内容: ```conf authpriv.* @10.30.231.71 ``` 或者使用命令行的方式追加内容: ```bash echo ...
Log4a 是一个基于 mmap, 高性能、高可用的 Android 日志收集框架.zip,Log4a is an mmap based, high-performance, highly available Android log collection library / Log4a 是一个基于 mmap, 高性能、高可用的 ...
3. 设置日志文件的存储路径和编码:需要确保日志文件的存储路径${catalina.base}/logs/catalina.out是可写的,并且设置日志文件的编码为UTF-8,确保日志的兼容性。 4. 定义日志输出格式:通过配置log4j.appender....
这个"TCT.Net.Base.ElasticSearch"库很可能是一个封装了Elasticsearch.NET和Nest的.NET Core项目。Elasticsearch.NET是Elastic官方提供的.NET低级别客户端,而Nest则是其高级别、类型安全的客户端,提供了一种更接近...