2015-12-08 14 views
6

Android studio logcat'te watch socket.io-client-java günlüklerine ihtiyacım var. Örneğin: https://github.com/socketio/socket.io-client-java/blob/master/src/main/java/io/socket/client/IO.java#L70java.util.logging.Logger giriş yap Android Studio logcat

  1. Neden LogCat içinde logger.fine(String.format("ignoring socket cache for %s", source)); çıktı görmez?

  2. mesaja ayarlı seviyenin Fine yukarıdaki örnekte logger, ancak Android Studio hayır bu günlük düzeyi (sadece Verbose, Debug, Info, Warn, Error, Assert) bulunmaktadır LogCat. Bu uyumsuzluğu yanlış anladım. Lütfen açıkla.

+0

herhangi bir çözüm buldunuz mu? – jaffa

+0

Hayır, ama sizin için de ilginçse, bu soruya oy verebilirsiniz –

cevap

7

Tamam, Logcat bunu göstermiyor çünkü varsayılan günlükçük seviyesi bilgi.

İşte benim için çok iyi çalışan bir çözüm. Sınıfın util ana aktivitede şimdi

   import io.socket.client.Manager; 
       import io.socket.client.Socket; 
       @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         AndroidLoggingHandler.reset(new AndroidLoggingHandler());   
         java.util.logging.Logger.getLogger(Socket.class.getName()).setLevel(Level.FINEST); 
         java.util.logging.Logger.getLogger(io.socket.engineio.client.Socket.class.getName()).setLevel(Level.FINEST); 
         java.util.logging.Logger.getLogger(Manager.class.getName()).setLevel(Level.FINEST); 
         } 

Olası socket.io hata ayıklama burada

import android.util.Log; 
import java.util.logging.*; 
public class AndroidLoggingHandler extends Handler { 

    public static void reset(Handler rootHandler) { 
     Logger rootLogger = LogManager.getLogManager().getLogger(""); 
     Handler[] handlers = rootLogger.getHandlers(); 
     for (Handler handler : handlers) { 
      rootLogger.removeHandler(handler); 
     } 
     LogManager.getLogManager().getLogger("").addHandler(rootHandler); 
    } 

    @Override 
    public void close() { 
    } 

    @Override 
    public void flush() { 
    } 

    @Override 
    public void publish(LogRecord record) { 
     if (!super.isLoggable(record)) 
      return; 

     String name = record.getLoggerName(); 
     int maxLength = 30; 
     String tag = name.length() > maxLength ? name.substring(name.length() - maxLength) : name; 

     try { 
      int level = getAndroidLevel(record.getLevel()); 
      Log.println(level, tag, record.getMessage()); 
      if (record.getThrown() != null) { 
       Log.println(level, tag, Log.getStackTraceString(record.getThrown())); 
      } 
     } catch (RuntimeException e) { 
      Log.e("AndroidLoggingHandler", "Error logging message.", e); 
     } 
    } 

    static int getAndroidLevel(Level level) { 
     int value = level.intValue(); 
     if (value >= 1000) { 
      return Log.ERROR; 
     } else if (value >= 900) { 
      return Log.WARN; 
     } else if (value >= 800) { 
      return Log.INFO; 
     } else { 
      return Log.DEBUG; 
     } 
    } 
} 

orijinal yanıt: https://stackoverflow.com/a/9047282/5127756

İlgili konular