BG Development


  Reply to this topicStart new topicStart Poll

> Logger клас и Exception handling
emagi
Публикувано на: 26-08-2021, 11:31
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 549
Регистриран на: 12.03.07



Здравейте,

попаднах на един казус, който ме кара попитам за вашето мнение.
Написах Logger клас, в който при инициализация се подават параметри и съответно ползвам Exception при грешка.
Та там идва и питането ми icon_smile.gif
CODE
$this->log($message)
, ако параметъра му не е стринг, то следва Exception. Тоест навсякъде където ползвам метода $logger->log се получава така, че трябва реално да опаковам този CALL в try-catch.
Получава едно такова въртене в кръг. Съвестта не ми дава мира, че не CATCH-нал всички изключения вмоя код.

Какъв съвет бихте дали в този случай?
PMEmail Poster
Top
escapeboy
Публикувано на: 26-08-2021, 11:41
Quote Post



Име: Никола Кацаров
Група: Потребител
Ранг: Редовен член

Мнения: 435
Регистриран на: 04.12.04



$this->log((string) $message)

Exception-a има __toString(), така ще ти го конвертира и няма да хвърля.

Вече ако си ги напляскал на много места може да промениш параметрите да не е задължително да е string и вече вътре в самия метод да проверяваш дали е Exception


--------------------
PMEmail PosterUsers Website
Top
emagi
Публикувано на: 26-08-2021, 12:43
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 549
Регистриран на: 12.03.07



QUOTE (escapeboy @ 26-08-2021, 11:41)
$this->log((string) $message)

Exception-a има __toString(), така ще ти го конвертира и няма да хвърля.

Вече ако си ги напляскал на много места може да промениш параметрите да не е задължително да е string и вече вътре в самия метод да проверяваш дали е Exception

Здравей,

примера, който дадой беше само образец. Говорех по принцип какво се прави, ако в самия logger имаш изключения.

Друг вид пример е:
CODE

if(!$this->fileHandle = fopen($logFile, 'a+')){
           throw new LoggerException('Could not open file handle.');
       }

В крайна сметка става следното:
CODE

try {
...
} catch (FileNotFoundException $exc) {
  $this->logger->log(.....); // тук трябва също try->catch
}
PMEmail Poster
Top
SuN
Публикувано на: 26-08-2021, 13:44
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 11874
Регистриран на: 27.01.05



QUOTE
Съвестта не ми дава мира, че не CATCH-нал всички изключения вмоя код.

Смени източника на информация с такъв, който е по-малко откачен.

QUOTE
Говорех по принцип какво се прави, ако в самия logger имаш изключения.

А какво се прави, ако ти свърши свободната памет? Пращаш имейл, ли? Въпроса е риторичен. В изключителна ситуация не може да направиш нищо повече от това да изведеш грешка и да спреш програмата или да я приведеш в авариен режийм. Програмата очаква да работи само в идеални условия за да изпълни мисията си и трябва да отказва да почва или да продължи когато условията се променят докато човек не отстрани проблема. Понякога отказа идва като гръм и трясък за потребителя, ако програмата не е важна.

А по твоя въпрос ще питам дали е важна тази функционалност? Ако програмата може да си продължи нормално с и без нея, значи грешно ползваш изключенията.


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
thrawn
Публикувано на: 26-08-2021, 15:20
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3141
Регистриран на: 17.01.17



Логиката е съвсем правилна. За съжаление на ОП, избрал си е език при които се налага да гадаеш къде какво изключение може да се хвърли...

А какво се прави в конкретната ситуация? Ами просто се обработва изключението в тялото на самата функция, без то да се хвърля на горе по веригата.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0