diff --git a/src/base/LogTrait.php b/src/base/LogTrait.php new file mode 100644 index 00000000000..ecc8fb502fb --- /dev/null +++ b/src/base/LogTrait.php @@ -0,0 +1,90 @@ + + * @since 3.2 + */ +trait LogTrait +{ + /** + * @var bool Whether the user IP should be included in the default log prefix. + * @since 3.0.25 + * @see prefix + */ + public $includeUserIp = false; + + + public function init() + { + parent::init(); + + $generalConfig = Craft::$app->getConfig()->getGeneral(); + $this->includeUserIp = $generalConfig->storeUserIps; + } + + /** + * @inheritdoc + */ + public function getMessagePrefix($message) + { + if ($this->prefix !== null) { + return call_user_func($this->prefix, $message); + } + + if (Craft::$app === null) { + return ''; + } + + if ($this->includeUserIp) { + $request = Craft::$app->getRequest(); + $ip = $request instanceof Request ? $request->getUserIP() : '-'; + } else { + $ip = '-'; + } + + /* @var $user \yii\web\User */ + $user = Craft::$app->has('user', true) ? Craft::$app->get('user') : null; + if ($user && ($identity = $user->getIdentity(false))) { + $userID = $identity->getId(); + } else { + $userID = '-'; + } + + /* @var $session \yii\web\Session */ + $session = Craft::$app->has('session', true) ? Craft::$app->get('session') : null; + $sessionID = $session && $session->getIsActive() ? $session->getId() : '-'; + + return "[$ip][$userID][$sessionID]"; + } + + /** + * @inheritdoc + */ + protected function getContextMessage() + { + $context = ArrayHelper::filter($GLOBALS, $this->logVars); + $result = []; + $security = Craft::$app->getSecurity(); + + foreach ($context as $key => $value) { + $value = $security->redactIfSensitive($key, $value); + $result[] = "\${$key} = " . VarDumper::dumpAsString($value); + } + + return implode("\n\n", $result); + } +} diff --git a/src/helpers/App.php b/src/helpers/App.php index da990f9d5b9..9ca8f745d90 100644 --- a/src/helpers/App.php +++ b/src/helpers/App.php @@ -489,24 +489,13 @@ public static function logConfig() return null; } - $generalConfig = Craft::$app->getConfig()->getGeneral(); - $target = [ 'class' => FileTarget::class, - 'fileMode' => $generalConfig->defaultFileMode, - 'dirMode' => $generalConfig->defaultDirMode, - 'includeUserIp' => $generalConfig->storeUserIps, ]; - if ($isConsoleRequest) { - $target['logFile'] = '@storage/logs/console.log'; - } else { - $target['logFile'] = '@storage/logs/web.log'; - - // Only log errors and warnings, unless Craft is running in Dev Mode or it's being installed/updated - if (!YII_DEBUG && Craft::$app->getIsInstalled() && !Craft::$app->getUpdates()->getIsCraftDbMigrationNeeded()) { - $target['levels'] = Logger::LEVEL_ERROR | Logger::LEVEL_WARNING; - } + // Only log errors and warnings, unless Craft is running in Dev Mode or it's being installed/updated + if (!$isConsoleRequest && !YII_DEBUG && Craft::$app->getIsInstalled() && !Craft::$app->getUpdates()->getIsCraftDbMigrationNeeded()) { + $target['levels'] = Logger::LEVEL_ERROR | Logger::LEVEL_WARNING; } return [ diff --git a/src/log/FileTarget.php b/src/log/FileTarget.php index 461d648a922..64bb05520e3 100644 --- a/src/log/FileTarget.php +++ b/src/log/FileTarget.php @@ -8,9 +8,7 @@ namespace craft\log; use Craft; -use craft\helpers\ArrayHelper; -use yii\helpers\VarDumper; -use yii\web\Request; +use craft\base\LogTrait; /** * Class FileTarget @@ -20,62 +18,24 @@ */ class FileTarget extends \yii\log\FileTarget { - /** - * @var bool Whether the user IP should be included in the default log prefix. - * @since 3.0.25 - * @see prefix - */ - public $includeUserIp = false; + use LogTrait; /** * @inheritdoc */ - public function getMessagePrefix($message) + public function init() { - if ($this->prefix !== null) { - return call_user_func($this->prefix, $message); - } + parent::init(); - if (Craft::$app === null) { - return ''; - } + $generalConfig = Craft::$app->getConfig()->getGeneral(); + $isConsoleRequest = Craft::$app->getRequest()->getIsConsoleRequest(); + $this->fileMode = $generalConfig->defaultFileMode; + $this->dirMode = $generalConfig->defaultDirMode; - if ($this->includeUserIp) { - $request = Craft::$app->getRequest(); - $ip = $request instanceof Request ? $request->getUserIP() : '-'; + if ($isConsoleRequest) { + $this->logFile = '@storage/logs/console.log'; } else { - $ip = '-'; - } - - /* @var $user \yii\web\User */ - $user = Craft::$app->has('user', true) ? Craft::$app->get('user') : null; - if ($user && ($identity = $user->getIdentity(false))) { - $userID = $identity->getId(); - } else { - $userID = '-'; - } - - /* @var $session \yii\web\Session */ - $session = Craft::$app->has('session', true) ? Craft::$app->get('session') : null; - $sessionID = $session && $session->getIsActive() ? $session->getId() : '-'; - - return "[$ip][$userID][$sessionID]"; - } - - /** - * @inheritdoc - */ - protected function getContextMessage() - { - $context = ArrayHelper::filter($GLOBALS, $this->logVars); - $result = []; - $security = Craft::$app->getSecurity(); - - foreach ($context as $key => $value) { - $value = $security->redactIfSensitive($key, $value); - $result[] = "\${$key} = " . VarDumper::dumpAsString($value); + $this->logFile = '@storage/logs/web.log'; } - - return implode("\n\n", $result); } }