2014-09-11 14 views
12

Tôi vừa chuyển sang monolog và muốn đăng nhập thông báo của mình lên bảng điều khiển PHP thay vì tệp. Điều này có vẻ hiển nhiên đối với một số người, nhưng tôi mất một lúc để tìm ra cách để làm điều đó và tôi không thể tìm thấy câu hỏi/câu trả lời tương tự trên SO.PHP: Cách sử dụng monolog để đăng nhập vào bảng điều khiển (php: // out)?

Ví dụ trên Monolog's Github readme chỉ cho thấy làm thế nào để sử dụng một tập tin:

<?php 

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

// create a log channel 
$log = new Logger('name'); 
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // <<< uses a file 

// add records to the log 
$log->addWarning('Foo'); 
$log->addError('Bar'); 

Nhưng nó không nêu bất cứ nơi nào như thế nào thông điệp có thể đăng nhập vào giao diện điều khiển. Sau khi tìm kiếm trên Google, tôi đã truy cập trang trợ giúp cho Bản giao hưởng hoặc câu hỏi của những người đang tìm cách đăng nhập vào bảng điều khiển của trình duyệt.

Trả lời

37

Giải pháp khá đơn giản. Vì ví dụ cho thấy một StreamHandler, bạn có thể chuyển một luồng (thay vì đường dẫn đến tệp). Theo mặc định, tất cả những gì được echo'ed trong PHP được ghi vào php://stdout/php://output vì vậy chúng tôi có thể sử dụng đơn giản một trong những người như suối cho StreamHandler:

<?php 

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

// create a log channel 
$log = new Logger('name'); 
$log->pushHandler(new StreamHandler('php://stdout', Logger::WARNING)); // <<< uses a stream 

// add records to the log 
$log->addWarning('Foo'); 
$log->addError('Bar'); 

Hy vọng điều này giúp tiết kiệm ai đó một thời gian :)

+0

tuy nhiên, tôi muốn biết cách lưu trữ cả hai nghĩa là hiển thị đầu ra trong bảng điều khiển VÀ ghi vào tệp? – mahen3d

+0

@ mahen3d thêm một trình xử lý khác để làm điều đó cho bạn ('' '$ log-> pushHandler (new StreamHandler ('/ path/to/log/file', Logger :: NOTICE))' '') – georaldc

7

Một số phụ chi tiết nếu bạn muốn tinh chỉnh định dạng tin nhắn mặc định cùng một lúc:

use Monolog\Logger; 
use Monolog\Formatter\LineFormatter; 
use Monolog\Handler\StreamHandler; 

$output = "[%datetime%] %channel%.%level_name%: %message%\n"; 
$formatter = new LineFormatter($output); 

$streamHandler = new StreamHandler('php://stdout', Logger::DEBUG); 
$streamHandler->setFormatter($formatter); 

$logger = new Logger('LoggerName'); 
$logger->pushHandler($streamHandler); 
Các vấn đề liên quan