Stackable Logger – „vylepšení“ Loggeru z addons

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
finwe
Člen | 58
+
0
-

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 Stacku; 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í Contextu 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
+
0
-

Vypadá to pěkně, ohledně licence bude nejlepší, když napíšeš původním autorům.