Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的log4j支持_Android_Android Emulator_Log4j - Fatal编程技术网

Android中的log4j支持

Android中的log4j支持,android,android-emulator,log4j,Android,Android Emulator,Log4j,我正试图将一个现有的SDK硬塞到android设备上,该SDK的一个依赖项是ApacheLog4J。我可以将测试程序加载到android emulator上,但当调用log4j对象“PropertySetter”时,程序会失败,出现验证异常。有没有办法改善这个问题?我建议尝试在slf4j中替换log4j。这不是一个无痛的开关,但它可能比你所拥有的更容易。slf4j为包括log4j在内的多个记录器提供了一个通用前端,并且有一个slf4j android软件包 不,Android的日志记录机制不太好

我正试图将一个现有的SDK硬塞到android设备上,该SDK的一个依赖项是ApacheLog4J。我可以将测试程序加载到android emulator上,但当调用log4j对象“PropertySetter”时,程序会失败,出现验证异常。有没有办法改善这个问题?

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


不,Android的日志记录机制不太好。与log4j所能为您做的相比,这是非常不够的。

实际上,使用slf4j对我来说是一个非常轻松的过程,而且这似乎是常见的情况,至少对于使用简单log4j功能的库来说是如此。您实际上不需要将slf4j替换为log4j,只需从以下位置向项目中添加两个slf4j库:

--Android的slf4j库(当前为slf4j-Android-1.6.1-RC1.jar)
--slf4j()桥上的log4j


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

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


log4j配置文件的解析器不是安卓安全的。slf4j与log4j的安卓兼容性只是覆盖了您将使用的log4j类,并强制它们使用安卓logcat样式的日志记录。你仍然无法在android上获得log4j的全部灵活性。在我的项目中,我在android上移植了log4j,您所要做的就是将binaries目录中的两个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");
}

这将开始向指定的远程主机发送消息。然后,您可以使用电锯查看此消息。若要使电锯工作,请单击弹出对话框上的第二个复选框,单击“确定”,启动应用程序并显示一个新选项卡。请注意,您的防火墙可能会阻止它…

有一个新项目,它在android上启用log4j。也可以在slf4j上使用log4j。它还为LogCat提供了一个appender。看

下面的示例演示如何在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");
    }
}
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");
    }
}
使用log4j API登录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");
    }
}
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");
    }
}

查看此项目以获得完整的实现:

您能否更详细地解释一下您是如何将slf4j集成到android项目中的?我试图在Android项目中使用slf4j,但我很难通过log4j.properties或log4j.xml文件对其进行配置。我甚至不确定是否应该使用log4j.properties文件为android配置slf4j。slf4j for android基本上是常规android日志记录的包装器吗(因此,我应该使用android日志记录配置而不是log4j之类的东西)slf4j android没有配置文件,您可以在启动模拟器时配置日志记录级别,当您通过Logcathanks wors为我浏览日志时。。。(已测试)我需要先删除Log4J和SL4J JAR,然后再添加bridge和SLF4J Android JAR,这样才能工作。只是好奇而已。什么是“安卓兼容性”?把你自己的属性阅读器放到200 LOC以下似乎很容易。我指的是slf4j的android兼容性。它们实际上并没有添加对log4j的支持,只是在jar中使用自己的类绕过log4j类。然后,它们将所有将进入log4j的日志输出到logcat。这对我来说很可怕,因为我讨厌logcat它是一个毫无价值的日志系统。log4jandroid项目只是android的一个版本,基本上去掉了解析器类。然后slf4j桥接到精简的log4j。您刚刚从站点复制了这个。。。这是什么课?LogConfiguratorTest.class以及将ConfiguratorLog4j放在应用程序类路径中的意思是什么,我的代码中的某个地方没有引用这一点吗?请给出一个完整的示例,而不是网站上的垃圾示例。如何使用此@JPM配置自定义appender他可能指的是ExampleLog4J.class而不是LogConfiguratorTest.classHow或configuralerog4j在哪里被调用?签出此简单的包装器库以登录android签出此项目,即使它是一个好项目回答,你是第三个回答同一个项目的人。电锯和插座附件似乎很神奇:)非常感谢!