Portál AbcLinuxu, 30. dubna 2025 15:09
Zájemci si mohou přečíst o nové funkci vzdělávací hry LeliMath na blogu, zde zkusím sdílet kousky zdrojových kódů. S Androidem začínám a tak nevím, zda jsou to základy, které jsou každému jasné, ale doufám, že někomu pomohou.
Jako každý Android vývojář jsem začínal s logcatem. Log.d() byl můj kamarád. Jako problém se ale ukázalo, jak uchovávat starší logy, abych mohl analyzovat selhání. A to nejen u sebe, ale hlavně u uživatelů. Bez logů jste slepí a chyby se hledají mizerně. Po delším hledání jsem zvolil logback pro Android. Jedná se o minimalistický port známé knihovny, se kterou sdílí API i konfiguraci. Mě hlavně přitáhla možnost souběžného směrování logů jak do souboru, tak do logcatu, takže logy vidím v reálném čase v Android Studiu.
Integraci do projektu začněte v graddle skriptu vaší aplikace:
compile('com.github.tony19:logback-android-classic:1.1.1-4') { exclude module: 'android' } compile('com.github.tony19:logback-android-core:1.1.1-4') { exclude module: 'android' } compile 'org.slf4j:slf4j-api:1.7.7'
Musel jsem v manifestu přidat právo šahat na souborový systém.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Docela dlouho jsem se trápil s tím, kam se mají logy ukládat. Nechtěl jsem aplikaci nakonfigurovat na míru svého mobilu a riskovat, že začne padat u klientů. Proto jsem nakonec zavrhnul XML konfiguraci a napsal ji v kódu.
private void configureLogbackDirectly() { // reset the default context (which may already have been initialized) since we want to reconfigure it LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory(); lc.reset(); // setup FileAppender PatternLayoutEncoder encoder1 = new PatternLayoutEncoder(); encoder1.setContext(lc); encoder1.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); encoder1.start(); FileAppender<ILoggingEvent> fileAppender = new FileAppender<>(); fileAppender.setContext(lc); fileAppender.setFile(new File(getExternalFilesDir(null), "app.log").getAbsolutePath()); fileAppender.setEncoder(encoder1); fileAppender.start(); // setup LogcatAppender PatternLayoutEncoder encoder2 = new PatternLayoutEncoder(); encoder2.setContext(lc); encoder2.setPattern("%msg%n"); encoder2.start(); LogcatAppender logcatAppender = new LogcatAppender(); logcatAppender.setContext(lc); logcatAppender.setEncoder(encoder2); logcatAppender.start(); ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); root.addAppender(fileAppender); root.addAppender(logcatAppender); }
Použití v javě je klasické:
private static final Logger log = LoggerFactory.getLogger(CalcActivity.class); log.debug("onCreate()");
Má smysl psát podobné příspěvky?
Hledám bug tracking software - jaké máte zkušenosti s Redmine?
Tiskni
Sdílej:
U nás vo firme používané redmine. Dá sa pomerne ľahko nainštalovať, údržba je jednoduchá, poskytuje funkcie, ktoré od Bug trackeru potrebujeme.
Na tlačidlo resolve existuje plugin. Komentáre cez tlačidlo upraviť hore a pole poznámky dole.
Keď už všetky služby nízkej kvality na jednom mieste prečo nie gitlab? Dá sa objednať ako komerčná služba rovnako ako github a v prípade potreby je možné hostovať si ho aj sám (nastavenie je úplná pohoda).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.