2_crazy_bytes
Guest
Как правильно организовать логгирование?
Здравствуйте!
У меня возник вопрос, имеет ли следующий подход право на жизнь:
Для логгирования ошибок, сообщений, системных событий и т.д. используются различные наследники некоего класса Logger.
Чтобы получить экземпляр конкретного логгера надо вызвать метод класса LogManager, т.е. LogManager::getLogger('logger_name').
Для того, чтобы в классе можно было им (логгером) пользоваться, мне представляется сьедобным такой вариант:
Тогда в его потомках можно будет делать так:
Однако мне это не нравится по следующим причинам:
1) Всем остальным классам тоже придётся наследовать этот
2) вот это вот "$this->logger->error" выглядит как-то некрасиво
Заранее соглашусь, что доводы мои назвать серьёзными нельзя, но всё же вот ещё один вариант - сделать "функциональную прослойку":
Аналогично для системных событий, сообщений пользователю и т.д.
В таком случае внутри классов достаточно будет вызвать set_тип_логгера, но мне это уже тем более кажется велосипедом, хотя всё же и способным ездить.
Так вот меня очень интресует мнение общественности по этому поводу, стоит ли использовать такой вариант ? Или может есть куда болеее правильный способ?
Здравствуйте!
У меня возник вопрос, имеет ли следующий подход право на жизнь:
Для логгирования ошибок, сообщений, системных событий и т.д. используются различные наследники некоего класса Logger.
Чтобы получить экземпляр конкретного логгера надо вызвать метод класса LogManager, т.е. LogManager::getLogger('logger_name').
Для того, чтобы в классе можно было им (логгером) пользоваться, мне представляется сьедобным такой вариант:
PHP:
class Example {
var $logger;
function Example () {
$this->logger =& LogManager::getLogger('deflog');
}
}
PHP:
class ChildExample extends Example {
function doAnything() {
$this->logger->error('какая-то ошибка', /* и другие параметры */);
}
}
1) Всем остальным классам тоже придётся наследовать этот
2) вот это вот "$this->logger->error" выглядит как-то некрасиво
Заранее соглашусь, что доводы мои назвать серьёзными нельзя, но всё же вот ещё один вариант - сделать "функциональную прослойку":
PHP:
function set_error ($text, /* и другие параметры */) {
$logger =& LogManager::getLogger('deflog');
$logger->error($text, /* все те же другие параметры */);
}
В таком случае внутри классов достаточно будет вызвать set_тип_логгера, но мне это уже тем более кажется велосипедом, хотя всё же и способным ездить.
Так вот меня очень интресует мнение общественности по этому поводу, стоит ли использовать такой вариант ? Или может есть куда болеее правильный способ?