-
- namespace Ice\Log\Driver;
-
- use Ice\Log\Driver;
- use Ice\Exception;
-
- /**
- * File driver for the Logger.
- *
- * @package Ice/Log
- * @category Library
- * @author Ice Team
- * @copyright (c) 2014-2025 Ice Team
- * @license http://iceframework.org/license
- */
- class File extends Driver
- {
- protected file;
-
- /**
- * Logger file constructor.
- *
- * @param string file Filename to log messages to (complete path)
- * @throws Exception When logfile cannot be created or is not writeable
- */
- public function __construct(string file)
- {
- if !file_exists(file) {
- if !touch(file) {
- throw new Exception("Log file " . file . " cannot be created");
- }
- }
- if !is_writable(file) {
- throw new Exception("Log file " . file . " is not writeable");
- }
-
- let this->file = file;
- }
-
- /**
- * Logs with an arbitrary level.
- *
- * @param mixed level
- * @param string message
- * @param array context
- * @return void
- */
- public function log(var level, string message, array context = []) -> void
- {
- var line;
-
- let line = "[" . date("Y-m-d H:i:s") . "] " . strtoupper(level) . ": " . this->interpolate(message, context) . PHP_EOL;
-
- file_put_contents(this->file, line, FILE_APPEND);
- }
-
- /**
- * Interpolates context values into the message placeholders.
- *
- * @param string message
- * @param array context
- * @return string
- */
- protected function interpolate(string message, array context = []) -> string
- {
- var replace, key, value;
-
- // Build a replacement array with braces around the context keys
- let replace = [];
-
- for key, value in context {
- let replace["{" . key . "}"] = value;
- }
-
- // Interpolate replacement values into the message and return
- return strtr(message, replace);
- }
- }