2013-07-11 48 views
1

我想在我的代码中添加日志语句。用log4j登录stackoverflow错误

使用LogConfigurator,我写了下面的代码在我的MainActivity -

public class MainActivity extends Activity { 


    Logger log = Logger.getLogger(MainActivity.class); 




@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    LogConfigurator logConfigurator = new LogConfigurator(); 
    logConfigurator.setFileName(Environment.getExternalStorageDirectory() 
      + File.separator + "MyApp" + File.separator + "logs" 
      + File.separator + "log4j.txt"); 
    logConfigurator.setRootLevel(Level.DEBUG); 
    logConfigurator.setLevel("org.apache", Level.ERROR); 
    logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n"); 
    logConfigurator.setMaxFileSize(1024 * 1024 * 5 * 1024); 
    logConfigurator.setImmediateFlush(true); 
    logConfigurator.configure(); 
    log.info("Execution of method onCreate started"); 


    MyTask mTask = new MyTask(); 
    mTask.execute(); 
    log.info("Execution of method onCreate ended"); 



} 

一切正常。但是,当我在一个名为JsonConversion另一个类添加

 Logger log = Logger.getLogger(JsonConversion.class); 

和一些更多的类,我得到以下错误在我的logcat

07-11 04:32:27.693: E/AndroidRuntime(3963): FATAL EXCEPTION: main 
    07-11 04:32:27.693: E/AndroidRuntime(3963): java.lang.StackOverflowError 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at org.apache.log4j.CategoryKey.equals(CategoryKey.java:47) 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at java.util.Hashtable.get(Hashtable.java:271) 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:273) 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:247) 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at org.apache.log4j.LogManager.getLogger(LogManager.java:228) 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at org.apache.log4j.Logger.getLogger(Logger.java:117) 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at com.example.news_android_mobile_application_cd.JsonConversion.<init>(JsonConversion.java:25) 
    07-11 04:32:27.693: E/AndroidRuntime(3963):  at com.example.news_android_mobile_application_cd.MainActivity.<init>(MainActivity.java:25) 

我加入的log4j-1.2.17.jar和Android的日志记录-log4j-1.0.3.jar。 有人可以帮我吗?

+0

你真的可以在Android手机上有5GB文件吗?而且,1024 * 1024 * 5 * 1024'不是您认为的,因为计算超过了'Integer.MAX_VALUE'。 –

+0

@EricJablow耶!那是我的错误。我现在创建了5 KB(5 * 1024)的大小,但仍然是错误! – viedee

回答

0

好吧,我不知道确切的答案,但以下可能是原因之一 -

  1. 有我的程序静态方法,所以使用日志的方法我让他们不静在不同的类中创建不同的对象,这导致了stackoverflow。
  2. 我使日志变量为静态,并且做了我的工作!

还有一件事,应该牢记文件的大小。如果要写入的数据大小超过文件大小,则会创建多个文件。