文档章节

php日志记录类

php_fangting
 php_fangting
发布于 2016/10/19 15:06
字数 408
阅读 13
收藏 0

<?php
 

class FileLog {

    const LOG_FILE_NAME = '%s_log_%s.log';
    const SINGLE_LOG_FILE_NAME = '%s_log.log';
    const LOG_CONTENT_FORMAT = '%s %s %s';
    static $LOG_FILE_PATH = '/home/logs/';
    static $flag_file_name = 'default';
    
    public static function init($flag){
        self::$flag_file_name = $flag;
        $basePath=config("baseConfig.basePath");
        self::$LOG_FILE_PATH = $basePath.'/logs/';
    }

    public static function logDt(){
        return date('Ymd');
    }

    public static function logFileName($single=false){
        if ($single) {
            return sprintf(self::SINGLE_LOG_FILE_NAME,self::$flag_file_name);
        } else {
            return sprintf(self::LOG_FILE_NAME,self::$flag_file_name,self::logDt());
        }
    }
    /**
     * @param $log_type
     * @param $contents
     * @param bool|true $filter_numeric
     * emerg 严重错误,导致系统崩溃无法使用
     * alert 警戒性错误, 必须被立即修改的错误
     * crit 临界值错误, 超过临界值的错误,例如一天24小时,而输入的是25小时这样
     * err 一般性错误
     * warn  警告性错误, 需要发出警告的错误
     * notice 通知,程序可以运行但是还不够完美的错误
     * info 信息,程序输出信息
     * debug 调试,用于调试信息
     * sql SQL语句
     */
    public static function logs($log_type,$contents,$filter_numeric = true){
        $log_string = '';
        if(is_array($contents)){
            foreach($contents as $key => $value){
                if(empty($value)){
                    $value = '-';
                }
                if(is_numeric($key) && $filter_numeric){
                    $log_string .= ' ' . $value;
                } else {
                    $log_string .= ' ' . $key . ' ' . $value;
                }
            }
        } else {
            $log_string = $contents;
        }

        /*if($log_string[0] == ' '){
            $log_string = substr($log_string,1);
        }*/

        $content_date = date('H:i:s');

        if(isset($_SERVER['argv'])){  //zyc 修改 用于命令行
            $user_agent = '';
        }else{
            $user_agent = $_SERVER['HTTP_USER_AGENT'];
        }

        $x_for_ip = '-';
        if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $x_for_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        }

        $client_ip = '-';
        if(!empty($_SERVER["HTTP_CLIENT_IP"])){
            $x_for_ip = $_SERVER["HTTP_CLIENT_IP"];
        }

        $ip = '-';
        if(!empty($_SERVER["REMOTE_ADDR"])){
            $ip = $_SERVER["REMOTE_ADDR"];
        }

        $log_content = sprintf(self::LOG_CONTENT_FORMAT,$content_date,$log_type,$log_string) . ' ' . $user_agent . ' ' . $x_for_ip . ' ' . $client_ip . ' ' . $ip . PHP_EOL;

        $file_name = self::$LOG_FILE_PATH . self::logFileName();

        @file_put_contents($file_name,$log_content,FILE_APPEND);

    }

    public static function SingleLog($log_type,$contents,$filter_numeric = true){
        $log_string = '';
        if(is_array($contents)){
            foreach($contents as $key => $value){
                if(empty($value)){
                    $value = '-';
                }
                if(is_numeric($key) && $filter_numeric){
                    $log_string .= ' ' . $value;
                } else {
                    $log_string .= ' ' . $key . ' ' . $value;
                }
            }
        } else {
            $log_string = $contents;
        }

        if($log_string[0] == ' '){
            $log_string = substr($log_string,1);
        }

        $content_date = date('H:i:s');
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
        $x_for_ip = '-';
        if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $x_for_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        }

        $client_ip = '-';
        if(!empty($_SERVER["HTTP_CLIENT_IP"])){
            $x_for_ip = $_SERVER["HTTP_CLIENT_IP"];
        }

        $ip = '-';
        if(!empty($_SERVER["REMOTE_ADDR"])){
            $ip = $_SERVER["REMOTE_ADDR"];
        }

        $log_content = sprintf(self::LOG_CONTENT_FORMAT,$content_date,$log_type,$log_string) . ' ' . $user_agent . ' ' . $x_for_ip . ' ' . $client_ip . ' ' . $ip . PHP_EOL;

        $file_name = self::$LOG_FILE_PATH . self::logFileName(true);

        file_put_contents($file_name,$log_content,FILE_APPEND);

    }

}

 

© 著作权归作者所有

php_fangting
粉丝 0
博文 4
码字总数 2833
作品 0
程序员
私信 提问
TP的php日志记录类解析

PHP运行的时候缺少一个后台,不能直接从后台看到日志的各种运行信息。但是在正常写代码里,我们又需要不断的获取到运行的信息。在php的信息记录函数里面,内置了一个errorlog的函数用来记录错...

熊猫88
2015/12/07
1K
0
laravel中的错误与日志

日志 laravel中的日志是基于monolog而封装的。laravel在它上面做了几个事情: 把monolog中的addInfo等函数简化成为了info这样的函数 增加了useFiles和useDailyFiles两个参数,使得做日志管理...

王二狗子11
2018/01/07
0
0
PHP日志扩展--SeasLog

Change log: 1.7.6 Fixed analyzerDetail bug, use grep -ai key_words. Fixed issue #152. Segfault in cli. 1.7.5 Update license from Apache License 2.0 to PHP License 3.01. Support ......

蝙蝠
2014/02/07
15.5K
10
SeasLog 2.0.2 大版本发布,自动记录 PHP 慢方法 TopN

2019年开工大吉! 经过SCG(SeasX Core Group)团队谨慎仔细的构思、开发和测试,终于迎来了SeasLog的大版本更新。 自SeasLog 2.0.2版本开始,SeasLog将支持自动记录用户态PHP函数的某些层级内...

Neeke
02/13
2.6K
9
PHP 日志扩展 SeasLog 1.7.6 发布,支持模板自定义

SeasLog 1.7.6 发布,更新内容: 1.7.6 Fixed analyzerDetail bug, use grep -ai key_words. Fixed issue #152. Segfault in cli. 1.7.5 License更新,从Apache License 2.0 更新到 PHP Lice......

Neeke
2017/09/19
1K
7

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
17
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部