Interface de registro mais limpo para desenvolvimento Android.

Admite.

De jeito nenhum você escreveu aplicativos Android e não ficou frustrado com o Log.x () espalhado em seu código-fonte.

Digamos que você tenha sete (7) classes auxiliares sendo usadas para se conectar com diferentes endpoints da API. Quase certo que cada uma das classes tem uma linha que vai

Log.d(TAG_NAME, "Some message");

Agora, digamos que você queira ir para a produção e achar que é incômodo começar a estudar, digamos, 50 classes com pelo menos 3 linhas disso, o que fazer?

Recentemente, descobri um método simples, mas bastante eficaz.

Primeiro, escreva uma classe, chamei minha Logger.java.

Aqui está um vislumbre do conteúdo:

public class Logger {

private static boolean canLog = false;

public Logger(boolean canLog){
this.canLog = canLog;
}

public static void logString(Object s, String logdata){
String TAG = s.getClass().getSimpleName();
if(canLog) {
Log.e(TAG, logdata);
}
}
}

Observe que você pode adicionar mais métodos com mais níveis de Log (d, w, e ..) e o resto.

Agora, dentro do meu arquivo Application.java,

Eu faço isso no método onCreate.

@Override
public void onCreate() {
super.onCreate();
new Logger(true); //notice the true flag
}

Em qualquer lugar do código, preciso registrar dados:

Logger.logString(FirstActivityFragment.this, "string message");

Agora, digamos que eu queira desativar o registro do aplicativo:

@Override
public void onCreate() {
super.onCreate();
new Logger(false); //notice the false flag toggles off logging.
}

Ai está. Sinta-se à vontade para escrever soluções mais complicadas. Avise-me quando você vasculhar coisas.
Sinta-se à vontade para deixar comentários e votar positivamente. 😉
: D

Atualizar

Seguindo a seção de comentários.
Aqui está uma atualização para a classe Logger.java. Cortesia de uma conversa com @segunfamisa :

public class Logger {

private static String TAG = "APP_NAME";
private static boolean DEBUG_ON = false;

public enum LogState{
D
, I, W, E;
}

public static void log(LogState ls, String tag, String msg){
if(DEBUG_ON){
switch (ls){
case D:
Log.d(tag, msg);
break;
case I:
Log.i(tag, msg);
break;
case W:
Log.w(tag, msg);
break;
case E:
Log.e(tag, msg);
break;
default:
break;
}
}
}

public static void log(Class<?> cls, LogState ls, String tag, String msg){
if(DEBUG_ON){
switch (ls){
case D:
Log.d(tag, cls.getName() + " "+ msg);
break;
case I:
Log.i(tag, cls.getName() + " "+ msg);
break;
case W:
Log.w(tag, cls.getName() + " "+ msg);
break;
case E:
Log.e(tag, cls.getName() + " "+ msg);
break;
default:
break;
}
}
}

public static void log(Class<?> cls, LogState ls, String msg){
if(DEBUG_ON){
switch (ls){
case D:
Log.d(TAG, cls.getName() + " "+ msg);
break;
case I:
Log.i(TAG, cls.getName() + " "+ msg);
break;
case W:
Log.w(TAG, cls.getName() + " "+ msg);
break;
case E:
Log.e(TAG, cls.getName() + " "+ msg);
break;
default:
break;
}
}
}
}