UdpLog.php 2.23 KB
<?php
/**
 * Created by IntelliJ IDEA.
 * User: hbomb_000
 * Date: 2016/5/5
 * Time: 18:17
 */

namespace Plugin;


/**
 * Class UdpLog
 * @useage:
 * UdpLog::info('get payment list begin',array('order_code'=>123231));
 * @package WebPlugin
 */
class UdpLog
{
    //influxdb url
    public static $url = 'influxdb.yohobuy.com';
    //influxdb port
    public static $port = '4444';
    //influxdb measurement
    public static $measurement = 'php_log';

    /**
     * proc line and send log to influxdb
     * @param $level
     * @param $message
     * @param $meta
     */
    private static function procLog($level,$message,$debugInfo,$meta='') {
        $level = str_replace(__CLASS__.'::','',$level);
        $file = $debugInfo[0]["file"];
        $line = $debugInfo[0]["line"];

        //make tags
        $tags = array(
            'host='.gethostname(),
            'level='.$level,
            'file='.$file,
            'line='.$line
        );

        //make a line
        $tags = implode(',',$tags);

        $string = self::$measurement .','.$tags.' message="'.$message.'",meta="'.var_export($meta,true).'"';
        self::send($string);
    }

    /**
     * send by udp
     * @param $string
     */
    private static function send($string) {
        $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        $len = strlen($string);
        socket_sendto($sock, $string, $len, 0, self::$url, self::$port);
        socket_close($sock);
    }

    /**
     * info log
     * @param $message
     * @param $meta
     */
    public static function info($message,$meta='') {
        self::procLog(__METHOD__,$message,debug_backtrace(),$meta);
    }

    /**
     * warn log
     * @param $message
     * @param $meta
     */
    public static function warn($message,$meta='') {
        self::procLog(__METHOD__,$message,debug_backtrace(),$meta);
    }

    /**
     * error log
     * @param $message
     * @param $meta
     */
    public static function error($message,$meta='') {
        self::procLog(__METHOD__,$message,debug_backtrace(),$meta);
    }

    /**
     * debug log
     * @param $message
     * @param $meta
     */
    public static function debug($message,$meta='') {
        self::procLog(__METHOD__,$message,debug_backtrace(),$meta);
    }
}