Stackable Logger – „vylepšení“ Loggeru z addons
- finwe
- Člen | 58
Mezi knihovnami, které používáme v práci jsem objevil trochu upravený
Logger, ale i tak mi
nevyhovoval a navíc, co jsem pochopil, už se na něm dlouho nic
neudělalo – dokonce není ani kompatibilní s poslední stable (0.9.6)
verzí Nette (ta nemá metodu Framework::fixNamespace()
).
Vzal jsem tedy původní Logger a trochu ho posunul – zejména jsem
přidal funkcionalitu stackování loggerů – zpráva se pak zaloguje do
všech loggerů ve stacku. Momentálně je k dispozici původní logger do
souboru a taky logger na výstup (a NullLogger
, který message
zahazuje, ale ten ve stacku nemá vedle ostatních smysl, snad jen pro prázdný
stack, protože ten bez instance loggeru vyhodí výjimku).
Z interface zmizela metoda setMinimumLogLevel – nebylo úplně jasné,
jak by se měla chovat ve Stack
u; Momentálně může mít každý
zaregistrovaný logger vlastní level a logovat jen to svoje (do budoucna třeba
EmailLogger
může pak logovat jen ILogger::ALERT
a
výš, zatímco FileLogger
bude logovat ILogger::INFO
a OutputLogger
všechno). Zároveň jsem ale chtěl, aby byly
loggery použitelné i samostatně, takže implementují ILogger
interface stejně jako Stack
U původních tříd jsem nechal i původní autory. Taky jsem odstranil namespace Nette, přišlo mi to patřičné v ohledu k https://phpfashion.com/…-tloustnette
https://github.com/finwe/Logger
K dispozici je jen NS verze, testováno je to lehce na masteru Nette z gitu.
Co bude potřeba vyřešit, je továrna na StackLogger
,
momentálně nevím, jak bez předání Context
u v konstruktoru
vytvořit loggery ze jména service – a nechce se mi to řešit, snad až
s dokumentací Nette :)
Idea je mít config tohoto formátu:
LoggerStack:
factory: Logger\StackFactory::factory
option:
loggers: [OutputLogger, FileLogger]
OutputLogger:
factory: Logger\OutputLoggerFactory::factory
option:
minimumLogLevel: ALERT
FileLogger:
factory: Logger\FileLoggerFactory::factory
option:
fileNameMask: log-%%Y-%%m-%%d-%%H.log # dvojitá procenta kvůli nahrazování env. var.
logDir: %appDir%
minimumLogLevel: 6
Taky mám v plánu konfigurovatelný formát message, a refaktorování logMessage ve FileLoggeru a AbstractLoggeru, kde je kus kódu duplicitní.
Má vůbec původní Logger něco jako licenci?
- Jan Tvrdík
- Nette guru | 2595
Vypadá to pěkně, ohledně licence bude nejlepší, když napíšeš původním autorům.