【问题标题】:Log4j Implementation in AndroidAndroid 中的 Log4j 实现
【发布时间】:2012-08-03 06:58:55
【问题描述】:

我是 android 开发的新手。我想将日志写入 SD 卡中的一个文件。我如何使用 Log4j 来做到这一点。实现 Log4j 的所有步骤是什么。我阅读了很多 atricles。但没有一个描述如何配置和实现它。谁能用简单的话解释一下如何在android中做到这一点。

【问题讨论】:

    标签: android logging log4j android-logcat


    【解决方案1】:

    你应该看看logback(下一代log4j)。使用FileAppenderRollingFileAppender

    说明:

    1. slf4j-api-1.6.6.jarlogback-android-1.0.6-2.jar 添加到您的类路径。

    2. 在您的项目中创建文件assets/logback.xml(或使用AndroidManifest.xml...参见example),包含以下配置:

    <configuration>
      <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>/sdcard/testFile.log</file>
        <append>true</append>
        <encoder>
          <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
      </appender>
            
      <root level="DEBUG">
        <appender-ref ref="FILE" />
      </root>
    </configuration>
    

    注意:由于指定路径在 SD 上,请务必使用WRITE_EXTERNAL_STORAGE 权限。您可以改为指定您已经拥有写入权限的其他路径。

    包含 SLF4J 日志记录调用的 Java 代码现在将 DEBUG 级别或以上的所有事件记录到 /sdcard/testFile.log

    Java 示例:

    package com.example;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import com.example.R;
    import android.app.Activity;
    import android.os.Bundle;
    
    public class HelloAndroidActivity extends Activity {
        static private final Logger LOG =
                           LoggerFactory.getLogger(HelloAndroidActivity.class);
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
           
           //
           // Based on the configuration above, these log statements
           // are written to /sdcard/testFile.log
           //
           LOG.info("Hello Android!");
           LOG.debug("reply: {}", Example.hello());
        }
    }
    
    class Example {
        static private final Logger LOG =
                         LoggerFactory.getLogger(Example.class);
    
        static public String hello() {
            LOG.trace("entered hello()");
            return "Hi there!";
        }
    }
    

    【讨论】:

    • @user46874...谢谢..它正在工作..我还有一个疑问..是否可以指定日志文件的大小?所以在超过这个大小后它将创建一个新日志具有不同名称的文件...如果可能的话我需要在哪里配置它??
    • 是的,您需要使用RollingFileAppenderSizeBasedTriggeringPolicy。类似问题请参阅answer
    • 我知道这是旧的,但是.. 是否可以有多个输出日志?您将如何设置?
    • 是的。创建多个 &lt;appender&gt; 元素并将它们包含在带有 &lt;appender-ref&gt;root 记录器中(请参阅 example)。
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 2023-04-09
    • 2020-12-07
    • 1970-01-01
    • 2011-02-24
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多