一个适用于Android和普通Java的记录器

3

我正在开发一个通用模块,使用的是常规Java(PC)语言编写,但我也想在Android模块中使用它。

如何在PC模块中记录一条消息并在Android日志中查看该消息?


3
@blackbelt:我会用slf4j替换log4j。 - Joachim Sauer
@JoachimSauer 从未听说过 slf4j。感谢提供信息。 - Blackbelt
logBack是log4J的后继者。而且,是的,SLF4J会是更好的选择。 - Pankaj Kumar
2个回答

3

您可以使用SLF4J API(这是日志框架的轻量级门面)。

我认为这是开发Java库的最佳方式。

您可以在这里阅读有关SLF4J和Log4j之间差异的更多信息。

例如,您可以在常用模块中使用以下代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Bar {

  private static final Logger logger = LoggerFactory.getLogger(Bar.class);

  public void foo(int value) {
    logger.info("entered Bar::foo value={}", value);
  }

}

之后,您可以使用此代码与SLF4J实现之一:

  • 对于非Android模块:
    • 您可以使用LOGBack
    • 或其中一个适配器:Log4jLoggerAdapter,JDK14LoggerAdapter,SimpleLogger等。
  • 对于Android模块:
    • 最简单的实现之一是Android Logger
    • 如果您需要一些复杂的日志记录,并且应用程序大小不受限制,则logback-android是您的选择。

1

使用 apache.log4j.Logger 库来进行日志记录,该库易于使用。

示例

import org.apache.log4j.Logger;
    public class LoggerUtils {

        private static Logger log = null;

        // Static initializer loads only once when the class loads into memory
        static {
            System.out.println("Inside LoggerUtils static block");
            log = Logger.getLogger(LoggerUtils.class);
            System.out.println("LoggerUtils Class Name == "
                    + LoggerUtils.log.getClass().getName());
        }// end of static block

        /**
         * Default no argument constructor
         */
        public LoggerUtils() {
        }

        /**
         * @param String, debug statement to log.
         */
        public static void debug(String logString) {
            log.debug(logString);
        }

        /**
         * @param String, info statement to log.
         */
        public static void info(String logString) {
            log.info(logString);
        }

        /**
         * @param String, error statement to log.
         */
        public static void error(String logString) {
            log.error(logString);
        }

        /**
         * @param String, warning statement to log.
         */
        public static void warn(String logString) {
            log.warn(logString);
        }



        /**
         * @param logString, error message to log.
         * @param e, error object.
         */
        public static void error(String logString, Exception e) {

            error(logString);

            if (e != null) {

                StackTraceElement[] elements = null;
                elements = e.getStackTrace();

                if (elements != null) {
                    StringBuffer strBuffer = new StringBuffer("");
                    for (int i = 0; i < elements.length; i++) {
                        strBuffer.append(elements[i]).append("\n");
                    }

                    error("Stack Trace :: \n" + strBuffer.toString());
                    strBuffer = null;
                }

                elements = null;

            }// end of if(e != null)

        }

        /**
         * @param logString, error message to log.
         * @param messages, messageObject to log.
         */
        public static void error(String logString, Object[] messages) {
            error(logString);

            if (messages != null) {

                StringBuffer strBuffer = new StringBuffer("");
                for (int i = 0; i < messages.length; i++) {
                    strBuffer.append(messages[i]).append("\n");
                }
                error(strBuffer.toString());
                strBuffer = null;

            }// end of if(messages != null)

        }

        /**
         * @param logString, fatal message to log.
         */
        public static void fatal(String logString) {
            log.fatal(logString);
        }

    }// end of class - LoggerUtils

如何在代码中使用
LoggerUtils.info(this.getClass().getName()+ ".name---> Entered");
LoggerUtils.error("Exception : "+ e);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接