在实际开发中,经常会遇到需要打印日志并保存到文件中,便于后面取日志分析代码运行情况,当然如果只是打印日志不需要记录文件,使用android自带的log工具就完全够了,
Log打印日志会记录到系统日志中,可以取出系统日志然后通过tag过滤得到自己的log,不过系统日志比较大,一般只能保存一段时间的日志,所以我们需要把日志单独记录到自己的文件中,这样就不会被系统日志冲掉了。
1、使用到的开源日志框架有以下两个,可以网上自己下载, 也可以通过以下链接下载https://download.csdn.net/download/x995630736/87719297
android-logging-log4j-1.0.3.jar apache-logging-log4j.jar
2、创建android 工程,jatr包放到libs目录下,并build.gradle中增加下面两行,重新编译
implementation files('libs/android-logging-log4j-1.0.3.jar') implementation files('libs/apache-logging-log4j.jar')
3、创建自己的日志文件路径和文件名,我的日志路径如下,会在sdcard目录下生产LOG目录,
public static String LOG_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/LOG/;
public static String appFile = "";
File file = new File(FileConfig.LOG_PATH ); if (!file.exists()) { file.mkdirs(); }
if (appFile == null || appFile.isEmpty()) { appFile = "app-" + getDateToStringStyle("yyyy-MM-dd-HH-mm", new Date()) + ".txt"; }
getDateToStringStyle是根本一定格式获取当前时间,方便看日志是什么时候生成的
4、配置日志参数, 可以放在MyApplication中初始化,这样在整个app中都可以调用
private static Logger logger = null;
LogConfigurator logConfigurator = new LogConfigurator(); logConfigurator.setFileName(FileConfig.LOG_PATH + appFile); logConfigurator.setRootLevel(Level.WARN); logConfigurator.setLevel("TEST", Level.WARN); logConfigurator.setFilePattern("%m%n"); logConfigurator.setMaxFileSize(1024 * 1024 * 10); logConfigurator.setImmediateFlush(true); logConfigurator.configure(); logger = Logger.getLogger("TEST");
5、写日志到文件中
public static void logInfo(final Object msg) { if (msg == null || msg.toString().isEmpty()) { return; } String appMsg = getDateToStringStyle("MM-dd HH:mm:ss,SSS", new Date()) + ":" + msg.toString(); if (logger == null) { logger = Logger.getLogger("TEST"); } logger.warn(appMsg); }