在Android Studio logcat中显示java.util.logging.Logger日志

在Android Studio logcat中显示java.util.logging.Logger日志,java,android,logging,logcat,Java,Android,Logging,Logcat,我需要在Android Studio logcat中查看socket.io-client-java中的日志。例如: 为什么我看不到logger.fine(String.format(“忽略%s的套接字缓存”,source))的输出在logcat中 上例中的记录器设置为Fine,但在Android Studio logcat中没有Fine级别(仅Verbose,Debug,Info,Warn,Error,Assert)。如何将级别从java.util.logging.Logger转换为Androi

我需要在Android Studio logcat中查看socket.io-client-java中的日志。例如:

  • 为什么我看不到logger.fine(String.format(“忽略%s的套接字缓存”,source))的输出在logcat中

  • 上例中的记录器设置为
    Fine
    ,但在Android Studio logcat中没有
    Fine
    级别(仅
    Verbose
    Debug
    Info
    Warn
    Error
    Assert
    )。如何将级别从
    java.util.logging.Logger
    转换为Android Studio logcat


  • 好的,Logcat不会显示它,因为默认的记录器级别是info

    这是一个非常适合我的解决方案。我现在在主活动中调试socket.io

                    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);
                            }
    
    可能的util类

    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;
            }
        }
    }
    
    以下是原始答案:

    你找到解决办法了吗?没有,但如果你也感兴趣,你可以投票赞成这个问题