Android_运用log4j打印日志

日志的重要性

平时我们debug模式开发项目时,我们需要打印出debug级别的日志,这样在正式发布版本上运行的时候,这些debug日志是不会出现在日志文件中的,日志中记录的是比他更高级别的info,error日志。下面我们就使用log4j来为我们app增加日志打印功能,并保存到本地,供我们后期分析 。

1,需要2个jar包

1,log4j官方包
官方下载连接
2,安卓对log4j的支持包
请下载本篇项目代码

二,写日志类APPLogger

Log4j里面有个Logger类,使用这个类代替安卓中的Log类来打印日志,log4j会将日志同时写入配置好的文件中.
下面,重写一个包装类,来封装Logger,包括配置和打印方法。


import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import de.mindpipe.android.logging.log4j.LogConfigurator;

public class ViLogger {

    //典型的单例模式写法
    private static Logger instance;

    static {
        instance = Logger.getLogger(ViLogger.class);
    }

    private ViLogger() {
    }

    /** * 配置日志 * 日志文件目录等 * * @param compile_level * @param filename */
    public static void init(String compile_level, String filename) {
        LogConfigurator configurator = new LogConfigurator();
        configurator.setFileName(filename);
        //设置编译级别,可以根据当前模式来设置
        if (compile_level.equals("debug"))
            //debug及以上级别的消息会被打印
            configurator.setRootLevel(Level.DEBUG);
        else
            //info及以上级别的消息会被打印
            configurator.setRootLevel(Level.INFO);

        configurator.setLevel("org.apache", Level.ERROR);
        //%p 表示日志语句的优先级
        //%c 日志信息所在的类名
        //%m%n 表示日志信息的内容
        configurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n");
        configurator.setMaxFileSize(1024 * 1024 * 1);
        configurator.setMaxBackupSize(3);
        configurator.setImmediateFlush(true);
        //很重要的一步,配置configure
        configurator.configure();
    }

    public static void d(String msg) {
        instance.debug(msg);
    }

    public static void i(String msg) {
        instance.info(msg);
    }

    public static void e(String msg) {
        instance.error(msg);
    }
}

三,在application类中初始化日志类

package com.raise.wind.log4jdemo;

import android.app.Application;

import com.raise.wind.log4jdemo.logger.APPLogger;

/** * Created by yu on 2015/7/18. */
public class APP extends Application {
    @Override
    public void onCreate() {
    String logFilePath = ...;
// 参数可以配置在strings.xml中,这样就可以自动的区分debug版和release版
// APPLogger.init(getString(R.string.compile_level));
        ViLogger.init(getString(R.string.compile_level),
                    logFilePath);
    }
}

ok,最简单的日志功能成功配好了,在程序中使用:

ViLogger.i("测试日志debug");

记得加入权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

日志文件我没有写txt为后缀,用记事本打开即可。

2015-07-18 14:03:05,787 DEBUG [logger.APPLogger]-[18] 测试日志debug
2015-07-18 14:03:05,796 ERROR [logger.APPLogger]-[19] 测试日志error

如果使用代码混淆的话,请记得加入这两句:


-dontwarn org.apache.log4j.** -keep class org.apache.log4j.**

ps:日志打印出不出的bug,多半是文件没有创建成功。

点我下载源码

你可能感兴趣的:(android,日志)