簡體   English   中英

Android中的log4j支持

[英]log4j support in Android

我試圖將現有的SDK軟件掛在Android設備上,並且所述SDK的一個依賴項是Apache log4j。 我能夠將我的測試程序加載到android模擬器上但是當調用log4j對象“PropertySetter”時,程序失敗並出現驗證異常。 有沒有辦法改善這個問題?

實際上使用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實現。 一旦添加了庫,代碼就可以運行。

我成功地使用Socket Appender和Log4j Chainsaw在android上運行log4j。 所有代碼都位於此存儲庫中。 Slf4j也開始工作了。 請注意,您必須以編程方式配置它。 你不能使用.properties或.xml文件解析器不能在android上工作。 請享用。

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

有一個新項目,它在android上啟用了log4j。 也可以在slf4j上使用log4j。 它還為LogCat提供了一個擴展器。 請參閱使用Log4J登錄Android

以下示例顯示如何在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();
    }
}

使用log4j使用slf4j 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");
    }
}

使用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");
    }
}

查看此項目以獲得完整的實施: http//code.google.com/p/log4j-android/

我建議嘗試交換slf4j代替log4j。 它不是一個無痛的開關,但它可能比你擁有的更容易。 slf4j為幾個記錄器提供了一個通用的前端,包括log4j,還有一個slf4j-android包。

不,Android的日志記錄機制並不合適。 與log4j可以為您做的相比,這是非常不足的。

log4j配置文件的解析器不是android safe.slf4j與log4j的android兼容性東西只是覆蓋你將使用的log4j類並強制它們使用android logcat樣式的日志記錄。 你仍然沒有在android上獲得log4j的完全靈活性。 我在我的項目https://sourceforge.net/projects/log4j-android/中將log4j移植到android上你所要做的就是將二進制目錄中的兩個jar添加到classpath中。 然后

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查看此消息。 要進行電鋸工作,請單擊彈出的對話框上的第二個復選框,然后啟動您的應用並顯示新選項卡。 請注意您的防火牆可能阻止它...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM