Android|Android 中的日志服务(log4j)

  • log4j对于开发过服务端同学来说应该很熟悉,log4j也可以使用在Android项目中来。
首先这是log4j的下载地址 http://logging.apache.org/log4j/1.2/download.html
还有Android的封装http://logging.apache.org/log4j/1.2/download.html
分别下载完后加入lib并bulid
【Android|Android 中的日志服务(log4j)】第二步,添加权限
第三部,完成log4j的配置工作
  • 生成LogConfigurator对象然后配置文件位置
final LogConfigurator logConfigurator = new LogConfigurator(); //日志文件路径地址:SD卡下dingdonglog文件夹yyyy-MM-dd-IMEI.txt文件 String name = ft.format(nowtime); StringBuilder fileName = new StringBuilder(); fileName.append(Environment.getExternalStorageDirectory().getAbsolutePath()); fileName.append("/ImdroidDeviceLog"); fileName.append("/"); fileName.append(name); fileName.append("-"); fileName.append(String.valueOf(imei)); fileName.append("-device"); fileName.append(".txt"); String fileAllname = fileName.toString();

  • 接下来进行一些常规配置
//设置root日志输出级别 默认为DEBUG logConfigurator.setRootLevel(Level.DEBUG); // 设置日志输出级别 logConfigurator.setLevel("org.apache", Level.DEBUG); //设置 输出到日志文件的文字格式 默认 %d %-5p [%c{2}]-[%L] %m%n logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n"); //设置输出到控制台的文字格式 默认%m%n logConfigurator.setLogCatPattern("%m%n"); //设置总文件大小 (1M) logConfigurator.setMaxFileSize(1024 * 1024); //设置最大产生的文件个数 logConfigurator.setMaxBackupSize(2); //设置所有消息是否被立刻输出 默认为true,false 不输出 logConfigurator.setImmediateFlush(true); //是否本地控制台打印输出 默认为true ,false不输出 logConfigurator.setUseLogCatAppender(true); //设置是否启用文件附加,默认为true。false为覆盖文件 logConfigurator.setUseFileAppender(true); //设置是否重置配置文件,默认为true logConfigurator.setResetConfiguration(true); //是否显示内部初始化日志,默认为false logConfigurator.setInternalDebugging(false);

更多配置请参考https://blog.csdn.net/zjclugger/article/details/51576156这里面有更详细的关于log4j的配置,尤其是第一次看logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n"); 的时候有点懵。
  • 最后config
logConfigurator.configure();

  • 接下来就是使用了
    这是一个封装好的类
public class MyLogger { private final static boolean logFlag = true; /** * 日志文件 */ private static Logger logger = Logger.getLogger("jrhb"); //public final static String tag = "[" + Constance.APP_NAME + "]"; private static String userName = "dd"; public MyLogger(String userName) { this.userName = userName; }/** * 获取方法名 * @return */ private static String getFunctionName() { StackTraceElement[] sts = Thread.currentThread().getStackTrace(); if (sts == null) { return null; } for (StackTraceElement st : sts) { if (st.isNativeMethod()) { continue; } if (st.getClassName().equals(Thread.class.getName())) { continue; } if (st.getClassName().equals(MyLogger.class.getName())) { continue; } return "[ " + Thread.currentThread().getName() + ": " + st.getFileName().replace(".java","") + ":" + st.getLineNumber() + " ]"; } return null; }public static void info(String str) { if (logFlag) { String name = getFunctionName(); if (name != null) { logger.info(name + " - " + str); } else { logger.info(str.toString()); } } }public static void debug(String str) { if (logFlag) { String name = getFunctionName(); if (name != null) { logger.debug(name + " - " + str); } else { logger.debug(str.toString()); } } }public static void trace(String str) { if (logFlag) { String name = getFunctionName(); if (name != null) { logger.trace(name + " - " + str); } else { logger.trace(str.toString()); } } }public static void error(String str) { if (logFlag) { String name = getFunctionName(); if (name != null) { logger.error(name + " - " + str); } else { logger.error(str.toString()); } } }}

log4j 这几个方法是不是看起来有点熟悉,log4j和Android的log一样分为 info debug trace error 等几个级别。其中有一个getFunctionName方法,它主要的功能是通过获取当前的线程的堆栈,从这个方法出发找到调用Mylogger方法所在的方法名。那么我们想要打印日志的时候只需要调用 MyLogger.info("stop trans file failed."); 方法就可以了,
最后日志效果

Android|Android 中的日志服务(log4j)
文章图片
image.png

    推荐阅读