<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # PHP Monolog 教程 > 原文: [https://zetcode.com/php/monolog/](https://zetcode.com/php/monolog/) PHP Monolog 教程展示了如何使用 Monolog 在 PHP 中進行日志記錄。 ## 記錄 日志記錄是將信息寫入日志文件的過程。 日志文件包含有關在操作系統,軟件或通信中發生的各種事件的信息。 ## 記錄目的 完成記錄是出于以下目的: * 信息收集 * 故障排除 * 產生統計數據 * 審計 * 性能分析 記錄不僅限于識別軟件開發中的錯誤。 它還可用于檢測安全事件,監視策略違規,在出現問題時提供信息,查找應用瓶頸或生成使用情況數據。 ## 要記錄的事件 應記錄的事件包括輸入驗證失敗,認證和授權失敗,應用錯誤,配置更改以及應用啟動和關閉。 ## 不記錄的事件 不應記錄的事件包括應用源代碼,會話標識值,訪問令牌,敏感的個人數據,密碼,數據庫連接字符串,加密密鑰,銀行帳戶和持卡人數據。 ## 記錄最佳做法 以下是一些日志記錄最佳做法: * 日志記錄應該有意義。 * 日志應包含上下文。 * 日志應保持平衡; 它不應包含過多或過多的信息。 * 記錄消息應該是人類可以理解的,并且可以被機器解析。 * 日志記錄應在不同級別進行結構化和完成。 * 日志應適應開發和生產。 * 記錄更復雜的應用應產生幾個日志文件。 ## PHP Monolog Monolog 是流行的 PHP 日志記錄庫。 它允許將日志發送到文件,套接字,收件箱,數據庫和各種 Web 服務。 它實現了 PSR-3 接口。 ```php $ composer req monolog/monolog ``` 我們用 Composer 安裝 Monolog。 ## Monolog 結構 Monolog 記錄器實例具有通道(名稱)和處理器的棧。 處理器負責將消息保存到文件,數據庫或將其發送到郵件。 記錄的消息在處理器棧中傳播。 最后一個處理器首先執行。 消息的進一步傳播由`bubble`變量控制,該變量默認設置為`true`。 消息記錄是一條將要寫入日志的信息。 消息記錄包含以下部分: | 鍵 | 類型 | 描述 | | --- | --- | --- | | `info` | `string` | 日志消息。 | | `level` | `integer` | 日志消息的嚴重性。 | | `level_name` | `string` | 日志級別的字符串表示形式。 | | `context` | `array` | 隨消息的構造傳遞任意數據。 | | `channel` | `string` | 此消息被登錄到的頻道。 | | `datetime` | `Monolog`/`DateTimeImmutable` | 消息記錄的日期和時間。 | | `extra` | `array` | 處理器可在其中放置其他數據的占位符數組。 | 處理器是可用于處理日志消息的任何 PHP 可調用對象。 它可以向記錄中添加一些額外的數據。 `context`是數組數據,其中包含的附加信息不太適合主字符串。 上下文是日志記錄方法的參數(例如`info()`或`warn()`)。 格式化程序用于格式化消息記錄。 ## Monolog 日志級別 日志記錄級別用于按緊急程度對日志消息進行分類。 Monolog 具有以下日志級別: * `DEBUG` - 詳細的調試信息 * `INFO` - 有趣的事件 * `NOTICE` - 正常但重要的事件 * `WARNING` - 并非錯誤的特殊情況 * `ERROR` - 不需要立即采取措施的運行時錯誤 * `CRITICAL` - 關鍵條件 * `ALERT` - 必須立即采取措施的事件 * `EMERGENCY` - 緊急事件 日志級別較低的處理器將不處理不太嚴重的日志。 通過將日志級別設置為`ERROR`,我們將獲得`ERROR`級別及更高級別的消息。 每個處理器都指定了一個日志級別; 默認值為`DEBUG`。 為了產生具有特定日志級別的消息,我們有包括`info()`,`warn()`,`error()`和`critical()`的方法。 由于 Monolog 早于 PSR-3,因此它包含重復的方法(例如`addInfo()`或`addWarning()`)。 ## Monolog 簡單示例 在第一個示例中,我們使用`Streamhandler`將消息記錄到文件中。 `simple.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Handler\StreamHandler; use Monolog\Logger; $logger = new Logger('main'); $logger->pushHandler(new StreamHandler(__DIR__ . '/logs/app.log', Logger::DEBUG)); $logger->info('First message'); ``` 該示例將信息消息寫入`logs/app.log`文件。 ```php $logger = new Logger('main'); ``` 創建了一個名為`main`的新記錄器。 ```php $logger->pushHandler(new StreamHandler(__DIR__ . '/logs/app.log', Logger::DEBUG)); ``` 我們使用`pushHandler()`將`StreamHandler`添加到記錄器。 處理器以`DEBUG`嚴重性將消息寫入指定的文件。 ```php $logger->info('First message'); ``` 我們使用`info()`方法記錄一條信息消息。 ```php $ cat logs\app.log [2019-05-15 15:49:48] main.INFO: First message [] [] ``` 這是書面信息。 日志消息以當前日期時間開頭。 后面是日志通道名稱和級別。 然后是消息記錄。 兩對方括號是我們可以指定上下文和額外數據的位置。 我們可以使用 Monolog 格式化程序自定義此輸出。 ## Monolog 控制臺日志記錄 我們可以將日志消息寫入終端。 `console_log.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Logger; use Monolog\Handler\StreamHandler; $logger = new Logger('stderr'); $logger->pushHandler(new StreamHandler('php://stderr', Logger::WARNING)); $logger->warn('A warning message'); ``` 我們通過向`StreamHandler`指定`php://stderr`來寫入控制臺。 ## Monolog 上下文數組 Monolog 上下文數組允許在用戶級級別將信息添加到消息記錄中。 `context_array.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Handler\StreamHandler; use Monolog\Logger; $logger = new Logger('main'); $logger->pushHandler(new StreamHandler('php://stderr')); $logger->info('Information message', ['user' => get_current_user()]); ``` `info()`方法的第二個參數是上下文數組。 我們將當前用戶添加到消息中。 ```php $ php context_array.php [2019-05-15 15:37:56] main.INFO: Information message {"user":"Jano"} [] ``` 這是輸出。 ## Monolog 記錄器處理器棧 我們可以將多個處理器添加到棧中。 最后添加的處理器將首先執行。 `handler_stack.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Handler\StreamHandler; use Monolog\Logger; $main = new Logger('main'); $main->pushHandler(new StreamHandler(__DIR__ . '/logs/app.log')); $main->pushHandler(new StreamHandler('php://stdout', $level = Logger::DEBUG, $bubble = true)); $main->info('Information message'); ``` 在示例中,我們有兩個記錄器處理器:一個文件和一個控制臺處理器。 如果將`$bubble`更改為`false`,則消息將不會寫入`logs/app.log`文件。 ## Monolog 定制處理器 可以向`pushProcessor()`添加自定義處理器。 `custom_processor.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Handler\StreamHandler; use Monolog\Logger; $logger = new Logger('main'); $logger->pushHandler(new StreamHandler('php://stderr')); $logger->pushProcessor(function ($record) { $record['extra']['user'] = get_current_user(); return $record; }); $logger->info('Information message'); ``` 在示例中,我們向處理器中的消息記錄添加了一些額外的信息。 根據文檔,上下文和額外數據之間的區別在于上下文是在用戶區域中提供的,而額外數據僅是內部的,可以由處理器填充。 ```php $ php custom_processor.php [2019-05-15 17:24:48] main.INFO: Information message [] {"user":"Jano"} ``` 額外的信息將添加到輸出的末尾。 ## Monolog `JsonFormatter` `JsonFormatter`以 JSON 格式寫入記錄。 `json_formatter.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Formatter\JsonFormatter; use Monolog\Handler\StreamHandler; use Monolog\Logger; $logger = new Logger('main'); $formatter = new JsonFormatter(); $stream = new StreamHandler(__DIR__ . '/logs/app-json.log'); $stream->setFormatter($formatter); $logger->pushHandler($stream); $logger->info('Information message', ['user' => get_current_user()]); ``` 該示例使用`JsonFormatter`將信息消息以 JSON 格式寫入文件。 ```php $ cat logs\app-json.log {"message":"Information message","context":{"user":"Jano"},"level":200,"level_name":"INFO", "channel":"main","datetime":{"date":"2019-05-15 17:37:40.433222","timezone_type":3, "timezone":"Europe/Berlin"},"extra":[]} ``` 這是記錄的消息。 ## Monolog `LineFormatter` `LineFormatter`將日志記錄格式化為單行字符串。 `line_format.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Logger; use Monolog\Handler\StreamHandler; use Monolog\Formatter\LineFormatter; use Monolog\Processor\ProcessIdProcessor; $output = "[%datetime%] %channel%.%level_name%: %message% %context.user%\n"; $formatter = new LineFormatter($output); $streamHandler = new StreamHandler('php://stdout'); $streamHandler->setFormatter($formatter); $logger = new Logger('main'); $logger->pushHandler($streamHandler); $logger->info('Information message from', ['user' => get_current_user()]); ``` 在示例中,我們使用`LineFormatter`自定義消息記錄。 ```php $output = "[%datetime%] %channel%.%level_name%: %message% %context.user%\n"; $formatter = new LineFormatter($output); ``` 我們創建一個自定義記錄消息。 它包含日期時間,頻道名稱,級別名稱,消息和上下文數據。 ```php $streamHandler->setFormatter($formatter); ``` 我們使用`setFormatter()`將格式化程序添加到處理器中。 ```php $ php line_format.php [2019-05-15 17:43:36] main.INFO: Information message from Jano ``` 這是一個示例輸出。 ## Monolog 郵件日志消息 可以使用`SwiftMailerHandler`發送電子郵件 ```php $ composer req swiftmailer/swiftmailer ``` 對于此示例,我們需要安裝`swiftmailer/swiftmailer`包。 > **注意**:Gmail 不是理想的測試應用。 我們應該使用諸如 Mailtrap 或 Mailgun 之類的在線服務,或者使用由網絡托管公司提供的 SMTP 服務器。 在我們的示例中,我們使用 Mailtrap 服務。 `mail_log.php` ```php <?php require __DIR__ . '/vendor/autoload.php'; use Monolog\Handler\StreamHandler; use Monolog\Logger; use Monolog\Handler\SwiftMailerHandler; $transporter = new Swift_SmtpTransport('smtp.mailtrap.io', 2525, 'tls'); $transporter->setUsername('3178491df14b6d'); $transporter->setPassword('7c1d6fa59a5v08'); $mailer = new Swift_Mailer($transporter); $message = new Swift_Message('Critical message'); $message->setFrom(['approot@example.com' => 'App root']); $message->setTo(['support@example.com' => 'Support']); $logger = new Logger('main'); $logger->pushHandler(new SwiftMailerHandler($mailer, $message, Logger::CRITICAL)); $logger->critical('Could not connect to the database'); ``` 在示例中,我們使用`SwiftMailerHandler`將消息記錄發送到郵件收件箱。 ```php $transporter = new Swift_SmtpTransport('smtp.mailtrap.io', 2525, 'tls'); $transporter->setUsername('3178491df14b6d'); $transporter->setPassword('7c1d6fa59a5v08'); ``` 使用 Mailtrap 連接詳細信息,我們構建了傳輸器。 ```php $mailer = new Swift_Mailer($transporter); ``` 創建了`Swinf_Mailer`。 ```php $message = new Swift_Message('Critical message'); $message->setFrom(['approot@example.com' => 'App root']); $message->setTo(['support@example.com' => 'Support']); ``` 創建了`Swift_Message`。 它包含從到字段。 ```php $logger = new Logger('main'); $logger->pushHandler(new SwiftMailerHandler($mailer, $message, Logger::CRITICAL)); $logger->critical('Could not connect to the database'); ``` 我們將`SwiftMailerHandler`添加到記錄器,并使用`critical()`創建關鍵消息。 您可能也對以下相關教程感興趣: [PHP Rakit 驗證教程](/php/rakitvalidation/), [PHP PDO 教程](/php/pdo/), [PHP 教程](/lang/php/)或列出[所有 PHP 教程。](/all/#php) 在本教程中,我們使用 Monolog 在 PHP 中進行日志記錄。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看