tp5 프레임 워 크 는 coposer 를 사용 하여 로그 기록 기능 예제 를 실현 합 니 다.
12483 단어 tp5 프레임 워 크composer로그 기록
tp5 로그 기록 실현
1.psr/log 설치
composer require psr/log
그것 의 역할 은 인 터 페 이 스 를 제공 하여 정상 적 인 로그 기능 을 실현 하 는 것 이다!
LoggerInterface.php 를 자세히 분석 해 볼 수 있 습 니 다.
<?php
namespace Psr\Log;
/**
* Describes a logger instance.
*
* The message MUST be a string or object implementing __toString().
*
* The message MAY contain placeholders in the form: {foo} where foo
* will be replaced by the context data in key "foo".
*
* The context array can contain arbitrary data. The only assumption that
* can be made by implementors is that if an Exception instance is given
* to produce a stack trace, it MUST be in a key named "exception".
*
* See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
* for the full interface specification.
*/
interface LoggerInterface
{
/**
* System is unusable.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function emergency($message, array $context = array());
/**
* Action must be taken immediately.
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function alert($message, array $context = array());
/**
* Critical conditions.
*
* Example: Application component unavailable, unexpected exception.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function critical($message, array $context = array());
/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function error($message, array $context = array());
/**
* Exceptional occurrences that are not errors.
*
* Example: Use of deprecated APIs, poor use of an API, undesirable things
* that are not necessarily wrong.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function warning($message, array $context = array());
/**
* Normal but significant events.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function notice($message, array $context = array());
/**
* Interesting events.
*
* Example: User logs in, SQL logs.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function info($message, array $context = array());
/**
* Detailed debug information.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function debug($message, array $context = array());
/**
* Logs with an arbitrary level.
*
* @param mixed $level
* @param string $message
* @param array $context
*
* @return void
*/
public function log($level, $message, array $context = array());
}
이것 은 로그 의 정상 적 인 인터페이스 로 등급 이 있 고 소식 이 있 으 며 구체 적 인 내용 이 있다.LogLevel.php
<?php
namespace Psr\Log;
/**
* Describes log levels.
*/
class LogLevel
{
const EMERGENCY = 'emergency';
const ALERT = 'alert';
const CRITICAL = 'critical';
const ERROR = 'error';
const WARNING = 'warning';
const NOTICE = 'notice';
const INFO = 'info';
const DEBUG = 'debug';
}
오류 상수 정의.AbstractLogger.php 인터페이스 구현
<?php
namespace Psr\Log;
/**
* This is a simple Logger implementation that other Loggers can inherit from.
*
* It simply delegates all log-level-specific methods to the `log` method to
* reduce boilerplate code that a simple Logger that does the same thing with
* messages regardless of the error level has to implement.
*/
abstract class AbstractLogger implements LoggerInterface
{
/**
* System is unusable.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function emergency($message, array $context = array())
{
$this->log(LogLevel::EMERGENCY, $message, $context);
}
/**
* Action must be taken immediately.
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function alert($message, array $context = array())
{
$this->log(LogLevel::ALERT, $message, $context);
}
/**
* Critical conditions.
*
* Example: Application component unavailable, unexpected exception.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function critical($message, array $context = array())
{
$this->log(LogLevel::CRITICAL, $message, $context);
}
/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function error($message, array $context = array())
{
$this->log(LogLevel::ERROR, $message, $context);
}
/**
* Exceptional occurrences that are not errors.
*
* Example: Use of deprecated APIs, poor use of an API, undesirable things
* that are not necessarily wrong.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function warning($message, array $context = array())
{
$this->log(LogLevel::WARNING, $message, $context);
}
/**
* Normal but significant events.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function notice($message, array $context = array())
{
$this->log(LogLevel::NOTICE, $message, $context);
}
/**
* Interesting events.
*
* Example: User logs in, SQL logs.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function info($message, array $context = array())
{
$this->log(LogLevel::INFO, $message, $context);
}
/**
* Detailed debug information.
*
* @param string $message
* @param array $context
*
* @return void
*/
public function debug($message, array $context = array())
{
$this->log(LogLevel::DEBUG, $message, $context);
}
}
Logger.php 계승 AbstractLogger.php
<?php
namespace Psr\Log;
use app\index\model\LogModel;
/**
* This Logger can be used to avoid conditional log calls.
*
* Logging should always be optional, and if no logger is provided to your
* library creating a NullLogger instance to have something to throw logs at
* is a good way to avoid littering your code with `if ($this->logger) { }`
* blocks.
*/
class Logger extends AbstractLogger
{
/**
* Logs with an arbitrary level.
*
* @param mixed $level
* @param string $message
* @param array $context
*
* @return void
*/
public function log($level, $message, array $context = array())
{
// noop
$logModel = new LogModel();
$logModel->add($level,$message,json_encode($context));
echo $logModel->id;
}
}
이 안에 있 는 로그 방법 은 내 가 직접 쓴 거 야!!!데이터베이스 에 로 그 를 저장 해 야 합 니 다!!
여기 서 나 는 id,level,message,context,ip,url,create 를 포함 한 로그 표를 설계 했다.잠깐 만.
LogModel.php 를 만 들 었 습 니 다.
<?php
/**
* @author: jim
* @date: 2017/11/16
*/
namespace app\index\model;
use think\Model;
/**
* Class LogModel
* @package app\index\model
*
* Model ,
*
*/
class LogModel extends Model
{
protected $pk = 'id'; //
protected $table = 'log'; // log_model
public function add($level = "error",$message = " ",$context = "") {
$this->data([
'level' => $level,
'message' => $message,
'context' => $context,
'ip' => getIp(),
'url' => getUrl(),
'create_on' => date('Y-m-d H:i:s',time())
]);
$this->save();
return $this->id;
}
}
모든 것 이 준비 되 었 으 니 컨트롤 러 에서 사용 할 수 있 습 니 다!
<?php
namespace app\index\controller;
use think\Controller;
use Psr\Log\Logger;
class Index extends Controller
{
public function index()
{
$logger = new Logger();
$context = array();
$context['err'] = " id";
$logger->info(" ");
}
public function _empty() {
return "empty";
}
}
소결:
작곡 가 좋아,강해!
여 기 는 인터페이스 인터페이스 의 전형 적 인 사례 로 인 터 페 이 스 를 정의 하고 추상 류 를 정의 하 며 구체 적 인 유형 을 정의 한다.
네 임 스페이스 가 생 겨 서 다른 폴 더 의 라 이브 러 리 를 잘 참조 할 수 있 습 니 다!
서로 사용 하면 내부 집적 을 방지 할 수 있 습 니 다!결합 하 더 라 도 상대 적 으로 독립 적 입 니 다!
이 로그 도구 가 있 으 면 평소에 인터페이스 에 있 는 오류 메 시 지 를 잘 포착 할 수 있 습 니 다!
...만 하면
use Psr\Log\Logger;
그리고
$logger = new Logger();
$logger->info("info ");
사용 이 아주 편리 합 니 다!!!ip 를 가 져 오고 url 을 가 져 오 는 방법 을 첨부 합 니 다.
// IP
function getIp() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else
if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else
if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else
if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return ($ip);
}
// url
function getUrl() {
return 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}
thinkpHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 고 는 ThinkPHP 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
tp5 프레임 워 크 의 추가 삭제 및 검사 작업 예제본 논문 의 사례 는 tp5 프레임 워 크 의 첨삭 과 수정 작업 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다. controller 컨트롤 러 가 기록 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.