2010-05-26 88 views
13

我試圖將現有的SDK硬塞到Android設備上,並且所述SDK的依賴項之一是Apache log4j。我能夠將我的測試程序加載到android模擬器上,但是當調用log4j對象「PropertySetter」時,程序因驗證異常而失敗。有沒有辦法改善這個問題?Android中的log4j支持

+0

結帳這個簡單的包裝庫在android系統日誌[https://github.com/oronno/log4android](https://github.com/oronno/log4android ) – 2013-03-29 10:43:23

+0

看看這個項目http://nikedlab.com/android-log-rolling-library.html – NikedLab 2014-02-23 12:47:45

回答

3

我會建議您嘗試在SLF4J交換到位的log4j的。這不是一個無痛苦的轉變,但它可能比你擁有的更容易。 slf4j爲包括log4j在內的多種記錄器提供了一個通用的前端,並且有一個slf4j-android包。

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

13

實際使用SLF4J變成了一個非常痛苦的過程對我來說,這似乎是常見的情況,至少在使用簡單的log4j的功能庫。你並不真的需要換SLF4J在log4j的,只能從http://www.slf4j.org/download.html添加兩個SLF4J庫到您的項目:

- 在SLF4J庫爲Android(目前SLF4J-的Android 1.6.1-RC1.jar)
- slf4j上的log4j(http://www.slf4j.org/legacy.html#log4j-over-slf4j)橋。

後者定義了典型的實施方式中使用,並將其綁定到SLF4J的Android實施核心的log4j類。一旦添加了庫,代碼就可以工作。

+0

謝謝你對我來說......(測試) – Hurda 2011-03-31 15:49:05

+0

你能詳細解釋一下如何將slf4j整合到你的android項目?我正在嘗試在Android項目中使用slf4j,並且我很難通過log4j.properties或log4j.xml文件進行配置。我甚至不確定我應該嘗試使用log4j.properties文件配置slf4j-for-android。 slf4j-for-android基本上是一個常規Android日誌的封裝(因此,我應該使用Android日誌配置而不是log4j的東西) – seanoshea 2010-11-05 22:39:52

+0

slf4j-android沒有配置文件,您可以在啓動時配置日誌級別模擬器和當你通過logcat – kokosing 2010-11-18 15:09:21

5

我順利地拿到了log4j的上一個Socket追加程序和Log4j的電鋸Android平臺。所有代碼都位於此存儲庫中。 Slf4j建立並工作。請注意,您必須以編程方式進行配置。解析器不能在android上使用.properties或.xml文件。請享用。

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

+0

電鋸和插座Appender似乎是驚人的:)非常感謝! – 2013-07-12 18:53:01

2

的log4j的配置文件分析器是不是log4j的安卓safe.slf4j的Android兼容性的事情只是將覆蓋你會使用log4j的類和迫使他們使用Android的logcat式日誌記錄。你仍然沒有在android上獲得log4j的全部靈活性。我在我的項目https://sourceforge.net/projects/log4j-android/的android上移植了log4j,你所要做的就是將二進制目錄中的兩個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"); 
} 

這將開始發送消息到您指定的遠程主機。然後,您可以使用鏈鋸http://logging.apache.org/log4j/docs/webstart/chainsaw/chainsawWebStart.jnlp查看此消息。要使鏈鋸工作,點擊彈出的對話框中的第二個複選框,點擊確定,啓動你的應用程序,並出現一個新標籤。要知道你的防火牆可能會阻止它......

+0

只是好奇。什麼是「Android兼容性的東西」?看起來很容易,將您自己的屬性閱讀器放在200 LOC下。 – 2011-06-21 05:01:25

+1

我指的是slf4j的android兼容性。他們實際上並沒有增加對log4j的支持,他們只是用自己的jar包繞過了log4j類。然後他們將輸出到log4j的所有日誌輸出到logcat。這對我來說太可怕了,因爲我討厭logcat它是一個毫無價值的日誌系統。 log4j-android項目只是一個基本上剝離了解析器類的android版本。然後slf4j橋接到精簡的log4j。 – 2011-09-08 20:18:39

3

有一個新的項目,這使得在Android上的log4j。也可以通過slf4j使用log4j。它還爲LogCat提供了一個appender。見Logging in Android using Log4J

下面的示例演示如何配置和Android中使用log4j的。

配置log4j的系統中的Android

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(); 
    } 
} 

記錄在使用Android log4j的使用SLF4J API

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

測井Android中使用的log4j API

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"); 
    } 
} 
+2

你剛剛從網站上覆制這個......這是什麼課程? LogConfiguratorTest.class和通過在應用程序類路徑中放置ConfigureLog4J意味着什麼,我的代碼中沒有任何地方可以引用它?請顯示一個完整的示例,而不是網站上的垃圾。 – JPM 2012-04-27 14:30:31

+0

如何使用此配置自定義Appender? – 2013-07-12 18:14:45

+0

@JPM他可能是指ExampleLog4J.class而不是LogConfiguratorTest.class – 2014-12-06 19:18:04