Wie erstellt ihr Logdateien?

  • Antworten:7
Sebastian Schneider
  • Forum-Beiträge: 2

18.09.2010, 16:55:18 via Website

Hallo zusammen,

ich möchte in meinen Programmen verschiedene Aktionen mitloggen. Ich suche jetzt nach einer Möglichkeit, wie ich ein Logging effektiv nutzen kann, welches man später (wenn die finale Version aktiv ist) einfach ausschalten kann. Es gibt ja entsprechend die Logging Klasse von Android, die bietet ja praktisch alles was das Herz begehrt.

Nun interessieren mich vor allem eure Meinungen, es gibt ja verschiedene Ansätze ein Logging während der Entwicklung zu aktivieren und später dann in der finalen Version auszuschalten. Was sind da eure Erfahrungen und Best Practices?

Für Antworten im Voraus vielen Dank!

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

18.09.2010, 19:53:23 via Website

Ich las den Compiler das wegoptimieren in der Finalen version mittels eines final static fields:

1/**
2 * Simple Class which allows easy Logging on/off. Do not use this for Logging
3 * Errors or warnings. just for debugging testing purposes.
4 *
5 * @author mac
6 * @version $Id$
7 */
8public final class Logging
9{
10
11 /**
12 *<code>true</code> if logging is turned on.
13 *
14 * @return
15 */
16
17 public final static boolean isEnabled = true;
18
19 private Logging()
20 {
21 }
22
23}


Im Code musst du lediglich prüfen ob es enabled ist:

1if (Logging.isEnabled)
2 {
3 Log.d(LOG_TAG, "Recieved resultcode RESULT_OK");
4 }

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Sebastian Schneider

Antworten
Sebastian Schneider
  • Forum-Beiträge: 2

18.09.2010, 21:42:25 via Website

schönes Beispiel. So ähnlich war auch meine Überlegung, denke mal ich werde das so auch übernehmen! Danke schon mal!

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

19.09.2010, 12:45:00 via Website

Ist wohl der einfachste Weg so.

Antworten
Marco S.
  • Forum-Beiträge: 105

20.09.2010, 23:41:52 via Website

leider hat man so aber auch 100 if abfragen, wenn man 100x loggen möchte.

ich selber hat n wrapper geschrieben, der das if( enabled) then Log.d(TAG,str); umschliesst.

macht den src insgesammt etwas kürzer, und man kann genau so zentral das enabled auf false setzen und alles log fliegt raus...

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

21.09.2010, 00:15:52 via Website

Du hast praktisch die Log methode in eine Log Klasse geschoben ?

Das erzeugt weiterhin viele Objecte die dann nicht benutzt werden wenn das Logging ausgeschaltet worden ist, mein ansatz wird überflüssigen Code im Class file und später im .dex entsprechend erst garnicht entstehen lassen.

1public static doLog(final String _message)
2{
3 if(isEnabled)
4 {
5 Log.d(LOGTAG,_message);
6 }
7}

Daher halte Ich die paar IFs für tolerierbar.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Marco S.
  • Forum-Beiträge: 105

21.09.2010, 10:33:31 via Website

ich habs genau wie du gemacht. statische methode in einer helper klasse :)

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

21.09.2010, 13:14:44 via Website

So ist mein der letzte Post nicht zu verstehen, vielmehr dachte Ich es wäre so bei dir gelöst :
1/**
2 * Simple Class which allows easy Logging on/off. Do not use this for Logging
3 * Errors or warnings. just for debugging testing purposes.
4 *
5 * @author mac
6 * @version $Id$
7 */
8public final class Logging
9{
10
11 /**
12 *<code>true</code> if logging is turned on.
13 *
14 * @return
15 */
16
17 public final static boolean isEnabled = true;
18
19 private Logging()
20 {
21 }
22
23
24
25public static doLog(final String _message)
26{
27 if(isEnabled)
28 {
29 Log.d(LOGTAG,_message);
30 }
31}
32
33}



So hast du das ganze in etwa ?

Rufst du jetzt die doLog(String _message) Methode auf erzeugst du immer einen String, auch wenn das isEnabled false ist, das ist in der ersten Variante nicht möglich. Soweit Ich weiß optimiert die JVM dies nicht weg, daher rate Ich davon ab.

hth,
Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten