下载log4php 地址:http://logging.apache.org/log4php/
参考网址:https://www.cnblogs.com/sdgf/p/5748716.html
apache官网下载之后,解压得到的文件夹目录,对于需要的LOG4PHP的主要核心代码 在src/main/php下面,将其拿出来。放在你需要的文件目录下。
- 刚刚开始,用的是.xml配置文件,后来为了可以自由生成日志文件。改成.php配置文件。配置文件普遍和Logger.php文件同级。
.xml配置文件:log4Config.xml
<configuration xmlns = "http://logging.apache.org/log4php/" >
<appender name="route_file_appender" class="LoggerAppenderDailyFile">
<!-- 使用appender类LoggerAppenderDailyFile创建一个名为route_file_appender的 appender ,用于记录到文件。 -->
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="%p^^%d{Y-m-d H:i:s}^^%X{UNIQID}^^%X{IP}^^%X{REQUEST_URL}^^%X{USERID}^^%X{REQUEST_PARAM}^^%X{OPERATION}^^%X{OBJECT}^^%X{OLD_VALUE}^^%X{NEW_VALUE}^^%X{DESCRIPTION}^^%X{RESULT}^^%m^^%n" />
</layout>
<param name="file" value="route.%s.log" />
<!-- 设置file参数,告诉appender写入哪个文件。 -->
<param name="threshold" value="info"/>
<param name="append" value="true" />
<param name="datePattern" value="Y-m-d" />
</appender>
<logger name="Route">
<level value="info" />
<!-- 将记录器级别设置为WARN。这意味着根记录器不会记录级别低于WARN的日志记录请求。 -->
<appender_ref ref="route_file_appender" />
<!-- 将myAppender链接到根记录器,以便根记录器收到的所有事件都将转发到myAppender并写入日志文件。 -->
</logger>
</configuration>
.php配置文件:phpConfig.php
<?php
return array (
'appenders' =>
array (
'route_file_appender' =>
array (
'class' => 'LoggerAppenderDailyFile',
'layout' =>
array (
'class' => 'LoggerLayoutPattern',
'params' =>
array (
'conversionPattern' => '%p^^%d{Y-m-d H:i:s}^^%X{UNIQID}^^%X{IP}^^%X{REQUEST_URL}^^%X{USERID}^^%X{REQUEST_PARAM}^^%X{OPERATION}^^%X{OBJECT}^^%X{OLD_VALUE}^^%X{NEW_VALUE}^^%X{DESCRIPTION}^^%X{RESULT}^^%m%n',
),
),
'params' =>
array (
'file' => 'route.%s.log',
'threshold' => 'info',
'append' => 'true',
'datePattern' => 'Y-m-d',
),
),
),
'loggers' =>
array (
'Route' =>
array (
'level' => 'info',
'appenders' =>
array (
0 => 'route_file_appender',
),
),
),
'renderers' =>
array (
),
);
?>
在core文件夹下写一个运行代码:logfour.php
<?php
/**
* @authors zoe
* @date 2018-09-25
* @version 1.0.0
*/
$set_current_path = str_replace('\\', '/', dirname(__DIR__));
require_once($set_current_path . '/include/log4php/Logger.php');
require_once($set_current_path . '/include/log4php/LoggerMDC.php');
class AutoLog4 {
public static $path = null;
public $php_logger_config = null;
public static $objself = null;
public function __construct(){
self::$path = str_replace('\\', '/', dirname(__DIR__));
}
/**
* 单例
*/
public static function getInstance(){
if( !(self::$objself instanceof self) ){
self::$objself = new self;
}
return self::$objself;
}
public function putlog(
$UID_NAME, //操作人
$REQUEST_PARAM = null, //参数
$OPERATION = null, //retrieve create delete update
$OBJECT = null, // php名字+act
$OLD_VALUE = null, //旧值
$NEW_VALUE = null, //新值
$DESCRIPTION = null, //自定义
$RESULT = null, //结果:成功失败
$m = 'php') {
$this->php_logger_config = require(self::$path . '/include/log4php/phpConfig.php');
$log_file = self::$path . '/data/autolog4/' . $this->php_logger_config['appenders']['route_file_appender']['params']['file'];
$this->php_logger_config['appenders']['route_file_appender']['params']['file'] = $log_file;
LoggerMDC::clear();
LoggerMDC::put('UNIQID',md5(uniqid()));
LoggerMDC::put('IP',$_SERVER['REMOTE_ADDR']);
LoggerMDC::put('REQUEST_URL',$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_ADMIN'].'/');
LoggerMDC::put('USERID',$UID_NAME);
LoggerMDC::put('REQUEST_PARAM', $REQUEST_PARAM);
LoggerMDC::put('OPERATION', $OPERATION);
LoggerMDC::put('OBJECT', $OBJECT);
LoggerMDC::put('OLD_VALUE' ,$OLD_VALUE);
LoggerMDC::put('NEW_VALUE' ,$NEW_VALUE);
LoggerMDC::put('DESCRIPTION' ,$DESCRIPTION);
LoggerMDC::put('RESULT',$RESULT);
$is_initialized = Logger::getInitializedValue();
$is_initialized !== true && Logger::configure($this->php_logger_config);
$mdebug = $m.' 这是一个debug的elk!';
$minfo = $m.' 这是一个info的elk!';
$mwarn = $m.' 这是一个warn的elk!';
$merror = $m.' 这是一个的error的elk!';
Logger::getLogger('Route')->debug($mdebug);
Logger::getLogger('Route')->info($minfo);
Logger::getLogger('Route')->warn($mwarn);
Logger::getLogger('Route')->error($merror);
}
}
?>
其中因为class类是私有的,用了单例设计模式,并在原有的logger.php多写了一个可以调用的共有的方法来调用其中的初始化,即:
public static function getInitializedValue(){
return self::isInitialized();
}
然后,在一个.php文件中引用他们;
<?php
// elk 日志对象
require_once(ST_ROOT_PATH.'core/logfour.php');
$elkInfo = AutoLog4::getInstance();
$UID_NAME = $_SESSION['admin_name'];
$OBJECT = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_ADMIN'].$_SERVER['REQUEST_URI'];
// elk-common
$OPERATION = 'create';
$OLD_VALUE = null;
//elk-start
$NEW_VALUE = $REQUEST_PARAM = json_encode(array('sync_stu'=>$syncsqlarr));
$DESCRIPTION = '添加学生--向sync_stu插入数据--'.$return_msg;
$RESULT = 'false';
$elkInfo->putlog($UID_NAME,$REQUEST_PARAM,$OPERATION,$OBJECT,$OLD_VALUE,$NEW_VALUE,$DESCRIPTION,$RESULT);
//elk-end
?>