From 9ea4da1db0f46e6275cedc753cfd4ea08da194b6 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Thu, 6 Dec 2018 11:45:50 -0500 Subject: [PATCH] [#13438] - Added "excludeAdapters" functionality for the logger --- phalcon/logger.zep | 41 +++++++++++++++++++++------------ phalcon/logger/adapter/file.zep | 5 ++-- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/phalcon/logger.zep b/phalcon/logger.zep index 5c9a9148742..5a690bd3eda 100644 --- a/phalcon/logger.zep +++ b/phalcon/logger.zep @@ -155,7 +155,7 @@ class Logger implements LoggerInterface */ public function excludeAdapters(array adapters = []) -> { - var adapter, registered, excluded; + var name, registered; let registered = this->getAdapters(); @@ -164,12 +164,10 @@ class Logger implements LoggerInterface * the registered adapters. If they match, add them to the * this->excluded array */ - for adapter in adapters { - if typeof adapter === "string" { - if fetch excluded, registered[adapter] { - let this->excluded[] = excluded; - } - } + for name, _ in adapters { + if isset(registered[name]) { + let this->excluded[] = name; + } } return this; @@ -272,15 +270,19 @@ class Logger implements LoggerInterface */ public function removeAdapter(string name) -> { - var adapter; + var adapters; + + let adapters = this->adapters; - if !fetch adapter, this->adapters[name] { + if true !== isset(adapters[name]) { throw new Exception("Adapter does not exist for this logger"); } - unset(this->adapters[name]); + unset adapters[name]; - return adapter; + let this->adapters = adapters; + + return this; } /** @@ -325,9 +327,12 @@ class Logger implements LoggerInterface */ protected function addMessage(int level, string message, array context = []) -> bool { - var adapter, item, levelName, levels; + var adapter, key, keys, excluded, levelName, levels, item, registered; + + let registered = this->adapters, + excluded = this->excluded; - if count(this->adapters) === 0 { + if count(registered) === 0 { throw new Exception("No adapters specified"); } @@ -339,9 +344,15 @@ class Logger implements LoggerInterface let item = new Item(message, levelName, level, time(), context); /** - * @todo Check if any adapters were excluded and log only to them + * Compare the actual adapters array with the excluded one. Whatever + * the difference is, that is the array of adapters that we will log + * this message to. By default `excluded` is empty so the message will + * be loggged to all registered adapters */ - for adapter in this->adapters { + let keys = array_diff(array_keys(registered), excluded); + + for key in keys { + let adapter = registered[key]; adapter->process(item); } diff --git a/phalcon/logger/adapter/file.zep b/phalcon/logger/adapter/file.zep index 7f9ff5a3789..a56e293bd1d 100644 --- a/phalcon/logger/adapter/file.zep +++ b/phalcon/logger/adapter/file.zep @@ -65,13 +65,12 @@ class File extends AbstractAdapter */ public function __construct(string! name, array options = []) { - string mode; + var mode; /** * Mode */ - if isset(options["mode"]) { - let mode = (string) options["mode"]; + if fetch mode, options["mode"] { if memstr(mode, "r") { throw new Exception("Adapter cannot be opened in read mode"); }