Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
随笔 - 546, 文章 - 1230, 评论 - 373, 阅读 - 239万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

PHP日志操作类

Posted on   analyzer  阅读(2733)  评论(0编辑  收藏  举报
<php 
/**
 * 日志类
 *
 * @package    log
 * @version    $Id$
 */
class Log
{
    /**
     * 单个日志文件大小限制
     *
     * @var int 字节数
     */
    private static $i_log_size = 5242880; // 1024 * 1024 * 5 = 5M
 
    /**
     * 设置单个日志文件大小限制
     * 
     * @param int $i_size 字节数
     */
    public static function set_size($i_size)
    {
    	if( is_numeric($i_size) ){
    		self::$i_log_size = $i_size;
    	}<code>
    }
 
    /**
     * 写日志
     *
     * @param string $s_message 日志信息
     * @param string $s_type    日志类型
     */
    public static function write($s_message, $s_type = 'log')
    {
        // 检查日志目录是否可写
         if ( !file_exists(LOG_PATH) ) {
            @mkdir(LOG_PATH);     
        }
         chmod(LOG_PATH,0777);
        if (!is_writable(LOG_PATH)) exit('LOG_PATH is not writeable !');
    	$s_now_time = date('[Y-m-d H:i:s]');
        $s_now_day  = date('Y_m_d');
        // 根据类型设置日志目标位置
        $s_target   = LOG_PATH;
        switch($s_type)
        {
            case 'debug':
                $s_target .= 'Out_' . $s_now_day . '.log';
                break;
            case 'error':
                $s_target .= 'Err_' . $s_now_day . '.log';
                break;
            case 'log':
                $s_target .= 'Log_' . $s_now_day . '.log';
                break;
            default:
                $s_target .= 'Log_' . $s_now_day . '.log';
                break;
        }
 
        //检测日志文件大小, 超过配置大小则重命名
        if (file_exists($s_target) &amp;&amp; self::$i_log_size &lt;= filesize($s_target)) {
            $s_file_name = substr(basename($s_target), 0, strrpos(basename($s_target), '.log')). '_' . time() . '.log';
            rename($s_target, dirname($s_target) . DS . $s_file_name);
        }
        clearstatcache();
        // 写日志, 返回成功与否
        return error_log("$s_now_time $s_message\n", 3, $s_target);
    }
}
?>

使用日志类:

<?php
define('DS', DIRECTORY_SEPARATOR);                 // 设置目录分隔符
define('LOG_PATH',dirname(__FILE__).DS.'log'.DS); // 日志文件目录
require './Log.class.php';                        // 导入日志类文件
Log::set_size(1024*1024*10);                       // 设置单个文件大小
Log::write('Error: aaaa','log');                   // 写日志
?>

 

转自:http://blog.gzconans.com/?p=1285

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
我要啦免费统计
点击右上角即可分享
微信分享提示