所有 WordPress開(kāi)發(fā)者都會(huì)花費(fèi)大量時(shí)間用來(lái)調(diào)試代碼,有時(shí)候,代碼并不會(huì)報(bào)出明顯的錯(cuò)誤,我們查錯(cuò)只能靠猜。特別是 WordPress 接收 POST 請(qǐng)求的時(shí)候,程序沒(méi)有返回?cái)?shù)據(jù)到前端,當(dāng)程序出錯(cuò)時(shí),我們需要知道程序報(bào)出的錯(cuò)誤信息是什么或者返回了什么數(shù)據(jù)。以前,我們的做法是記錄程序的返回?cái)?shù)據(jù)到數(shù)據(jù)庫(kù)里面,這種做法查看數(shù)據(jù)很不方便,效率一直較低,直到我們發(fā)現(xiàn)了?Wonolog 庫(kù),Wonolog 集成了 PHP 世界中最流行的日志工具?Monolog 到 WordPress 的一個(gè)工具。
使用 Wonolog,我們可以捕獲網(wǎng)站上所有的 PHP 和數(shù)據(jù)庫(kù)錯(cuò)誤,警告和通知。通過(guò)使用 Monolog 的一些錯(cuò)誤處理程序,我們可以將錯(cuò)誤寫(xiě)入日志文件,或者通過(guò)電子郵件發(fā)送給管理員。有了這個(gè)工具,再進(jìn)行 WordPress開(kāi)發(fā)時(shí),我們就可以非常輕松的記錄和查看程序調(diào)試信息了。
怎么使用?Wonolog 記錄 WordPress 調(diào)試信息
如果我們使用 Composer 管理我們的依賴, 直接通過(guò) Composer 安裝 Wonolog 到我們的程序中:
composer require inpsyde/Wonolog
使用之前我們需要通過(guò)以下代碼啟動(dòng) Wonolog:
\Inpsyde\Wonolog\bootstrap()
記錄的信息內(nèi)容可以通過(guò) WP_DEBUG_LOG 常量控制,如果設(shè)置為 true,Wonolog 將會(huì)記錄所有警告、錯(cuò)誤、或其他調(diào)試信息,如果設(shè)置為 false,Wonolog 將會(huì)記錄錯(cuò)誤信息。
記錄調(diào)試日志到文件
如果我們?cè)?WordPress開(kāi)發(fā)的過(guò)程中需要手動(dòng)記錄一些信息到日志中,我們可以直接通過(guò) Wonolog 提供的 Action 把信息插入日志文件即可。
do_action( 'wonolog.log', [
'message' => 'Something happened.',
'channel' => 'DEBUG',
'level' => 100,
'context' => [],
] );
默認(rèn)的日志文件的保存路徑為:wp-content/wonolog/{Y/m/d}.log,我們可以直接打開(kāi)對(duì)應(yīng)的文件查看日志信息。
嚴(yán)重錯(cuò)誤時(shí)發(fā)送郵件通知
默認(rèn)情況下,Wonolog 通過(guò)一個(gè) Monolog Handler 將消息記錄到文件,程序發(fā)生嚴(yán)重錯(cuò)誤的時(shí)候,我們需要讓管理員及時(shí)得到通知,Monolog 擁有大量預(yù)設(shè)的的日志處理程序,我們可以將所有或部分錯(cuò)誤發(fā)送到另一個(gè)位置。首先,我們需要設(shè)置一個(gè)自定義處理程序,Monolog 有一個(gè)本地電子郵件處理程序,使用 PHP 的郵件功能發(fā)送電子郵件。
Wonolog 的引導(dǎo)函數(shù)返回 Wonolog\Controller 類的一個(gè)實(shí)例,我們可以添加額外的處理程序。我們可以使用該類的 use_handler(), 方法添加一個(gè)額外的處理程序,例如 NativeMailerHandler:
use Monolog\Logger;
use \Monolog\Handler\NativeMailerHandler;
$email_handler = new NativeMailerHandler(
'[email protected]',
'Error on ' . home_url(),
'[email protected]',
Logger::ERROR
);
\Inpsyde\Wonolog\bootstrap( )->use_handler( $email_handler );
Monolog 的 NativeMailerHandler 使用函數(shù) mail() 發(fā)送電子郵件。在WordPress中,我們通常使用 wp_mail(),它默認(rèn)使用 PHP Mailer,但是經(jīng)常被替換。為了更好的兼容性,我們可以擴(kuò)展 NativeMailerHandler 和覆蓋它的 send() 方法來(lái)替代使用 wp_mail()。
namespace Example;
use Monolog\Formatter\LineFormatter;
use \Monolog\Handler\NativeMailerHandler;
class WPMailHanlder extends NativeMailerHandler {
/**
* {@inheritdoc}
*/
protected function send(string $content, array $records)
{
$content = wordwrap($content, $this->maxColumnWidth);
$headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n");
$headers .= 'Content-type: ' . $this->getContentType() . '; charset=' . $this->getEncoding() . "\r\n";
if ($this->getContentType() == 'text/html' && false === strpos($headers, 'MIME-Version:')) {
$headers .= 'MIME-Version: 1.0' . "\r\n";
}
$subject = $this->subject;
if ($records) {
$subjectFormatter = new LineFormatter($this->subject);
$subject = $subjectFormatter->format($this->getHighestRecord($records));
}
foreach ($this->to as $to) {
wp_mail($to, $subject, $content, $headers);
}
}
}
然后,我們就可以通過(guò)下面的代碼, 直接使用 WordPress 默認(rèn)的 wp_mail 函數(shù)來(lái)發(fā)送錯(cuò)誤信息了。
use Monolog\Logger;
use \Monolog\Handler\NativeMailerHandler;
use Example;
$email_handler = new WPMailHanlder(
'[email protected]',
'Error on ' . home_url(),
'[email protected]',
Logger::ERROR
);
\Inpsyde\Wonolog\bootstrap( )->use_handler( $email_handler );
除了發(fā)送郵件,Monolog 內(nèi)置或第三方的日志處理程序我們都可以使用,比如,我們可以發(fā)送錯(cuò)誤信息到 Slack,Papertrail 等。
有了詳盡的日志記錄,在開(kāi)發(fā) WordPress 應(yīng)用程序的時(shí)候,我們就可以很方便的記錄查看應(yīng)用程序的每一步操作了,信息了解的越清楚,我們就越胸有成竹。除了記錄錯(cuò)誤信息,在對(duì)于電子商務(wù)類型等涉及到金錢(qián)教育的網(wǎng)站,我們還可以把交易信息記錄到日志里面,方便交易金額對(duì)不上的時(shí)候查詢每一步交易。



測(cè)試郵件評(píng)論。