【问题标题】:log4j support in AndroidAndroid 中的 log4j 支持
【发布时间】:2011-02-24 07:14:33
【问题描述】:

我正在尝试将现有的 SDK 硬塞到 android 设备上,并且所述 SDK 的依赖项之一是 Apache log4j。我能够将我的测试程序加载到 android 模拟器上,但是当调用 log4j 对象“PropertySetter”时,程序失败并出现验证异常。有没有办法改善这个问题?

【问题讨论】:

标签: android android-emulator log4j


【解决方案1】:

查看此项目以获得完整的实施:http://code.google.com/p/log4j-android/

【讨论】:

  • 虽然是一个很好的答案,但你是第三个回答同一个项目的人。
【解决方案2】:

有一个新项目,可以在 android 上启用 log4j。也可以在 slf4j 上使用 log4j。它还为 LogCat 提供了一个附加程序。见Logging in Android using Log4J

以下示例展示了如何在 Android 中配置和使用 log4j。

在Android中配置log4j系统

import org.apache.log4j.Level;
import android.os.Environment;
import de.mindpipe.android.logging.log4j.LogConfigurator;
/**
 * Simply place a class like this in your Android applications classpath.
 */
public class ConfigureLog4J {
    static {
        final LogConfigurator logConfigurator = new LogConfigurator();

        logConfigurator.setFileName(Environment.getExternalStorageDirectory() + "myapp.log");
        logConfigurator.setRootLevel(Level.DEBUG);
        // Set log level of a specific logger
        logConfigurator.setLevel("org.apache", Level.ERROR);
        logConfigurator.configure();
    }
}

使用 slf4j API 使用 log4j 登录 Android

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

public class ExampleLog4JOverSLF4J {
    private final Logger log = LoggerFactory.getLogger(ExampleLog4JOverSLF4J.class);

    public void myMethod() {
        log.info("This message should be seen in log file and logcat");
    }
}

使用 log4j API 登录 Android

import org.apache.log4j.Logger;

public class ExampleLog4J {
    private final Logger log = Logger.getLogger(LogConfiguratorTest.class);

    public void myMethod() {
        log.info("This message should be seen in log file and logcat");
    }
}

【讨论】:

  • 你刚刚从网站上复制了这个......这个类是什么? LogConfiguratorTest.class 以及将 ConfigureLog4J 放在应用程序类路径中是什么意思,我的代码中的某处没有引用这个吗?请展示一个完整的示例,而不是网站上的垃圾示例。
  • 如何用这个配置自定义 Appender??
  • @JPM 他可能指的是 ExampleLog4J.class 而不是 LogConfiguratorTest.class
  • 如何或在哪里调用 ConfigureLog4J?
【解决方案3】:

log4j 配置文件的解析器不是 android safe.slf4j 与 log4j 的 android 兼容性只是覆盖了您将使用的 log4j 类并强制它们使用 android logcat 样式日志记录。您仍然无法在 android 上获得 log4j 的全部灵活性。我在我的项目https://sourceforge.net/projects/log4j-android/ 中将log4j 移植到android 上,您所要做的就是将二进制目录中的两个jar 添加到您的类路径中。那么

static {
    org.apache.log4j.Logger root = org.apache.log4j.Logger.getRootLogger();

    final SocketAppender appender = new SocketAppender("192.168.1.4", 4445);


    root.addAppender(appender);
}

private static final org.slf4j.Logger logger = LoggerFactory.getLogger(MyClass.class);

static {
    logger.info("Hello logger");
}

这将开始向您指定的远程主机发送消息。然后,您可以使用 Chainsaw http://logging.apache.org/log4j/docs/webstart/chainsaw/chainsawWebStart.jnlp 查看此消息。要使电锯工作,请单击弹出的对话框中的第二个复选框,点击确定,启动您的应用程序,应该会出现一个新选项卡。请注意您的防火墙可能会阻止它...

【讨论】:

  • 只是好奇。什么是“android兼容性”?在 200 LOC 内滚动您自己的属性阅读器似乎很容易。
  • 我指的是 slf4j 的 android 兼容性。他们实际上并没有添加对 log4j 的支持,他们只是在 jar 中绕过 log4j 类。然后他们将所有将进入 log4j 的日志输出到 logcat。这对我来说太可怕了,因为我讨厌 logcat 它是一个毫无价值的日志系统。 log4j-android 项目只是一个基本上去掉了解析器类的 android 版本。然后 slf4j 桥接到精简的 log4j。
【解决方案4】:

我使用 Socket Appender 和 Log4j Chainsaw 成功地让 log4j 在 android 上工作。所有代码都位于此存储库中。 Slf4j 设置和工作了。请注意,您必须以编程方式对其进行配置。您不能使用解析器无法在 android 上运行的 .properties 或 .xml 文件。享受吧。

https://sourceforge.net/projects/log4j-android/

【讨论】:

  • Chainsaw 和 Socket Appender 似乎很棒 :) 非常感谢!
【解决方案5】:

实际上,使用 slf4j 对我来说是一个非常轻松的过程,而且这似乎很常见,至少对于使用简单 log4j 功能的库来说是这样。你真的不需要将 slf4j 换成 log4j,只需要从 http://www.slf4j.org/download.html 向你的项目添加两个 slf4j 库:

-- Android 的 slf4j 库(目前为 slf4j-android-1.6.1-RC1.jar)
-- slf4j (http://www.slf4j.org/legacy.html#log4j-over-slf4j) 桥上的 log4j。

后者定义了典型实现使用的核心 log4j 类,并将它们绑定到 slf4j Android 实现。添加库后,代码就可以工作了。

【讨论】:

  • 您能更详细地解释一下您是如何将 slf4j 集成到您的 android 项目中的吗?我正在尝试在 Android 项目中使用 slf4j,但我很难通过 log4j.properties 或 log4j.xml 文件对其进行配置。我什至不确定我是否应该尝试使用 log4j.properties 文件配置 slf4j-for-android。 slf4j-for-android 基本上是常规 Android 日志的包装器(因此,我应该使用 Android 日志配置而不是 log4j 的东西)
  • slf4j-android没有配置文件,可以在启动模拟器和通过logcat浏览日志时配置日志级别
  • 感谢我...(已测试)
  • 我需要先删除 Log4J 和 SL4J JAR,然后再添加桥接器和 SLF4J-Android JAR 才能正常工作。
【解决方案6】:

我建议尝试用 slf4j 代替 log4j。这不是一个无痛的开关,但它可能比你拥有的更容易。 slf4j 为包括 log4j 在内的多个记录器提供了一个通用前端,并且有一个 slf4j-android 包。

不,Android 的日志记录机制不是很好。与 log4j 可以为你做的相比,这是非常不足的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2010-10-30
    • 2016-02-20
    • 2013-08-07
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多