Android运行程序生成日志文件
因为软件是在机器上跑的,不是在手机上跑的,所以就需要生成日志文件来记录一些比较重要的操作或者状态。
首先用到的是两个相关的工具类:
LocalLog.java
import android.annotation.SuppressLint;import java.text.SimpleDateFormat;
import java.util.Date;/*** Created by zcf on 2020/9/18.*/
final class LocalLog {private Date mLogTime;private String mLogTag;private String mLogMessage;public LocalLog(String logTag, String logMessage) {mLogTag = logTag;mLogMessage = logMessage;mLogTime = new Date();}@SuppressLint("SimpleDateFormat")private SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Overridepublic String toString() {String date = format1.format(mLogTime);return "[" + date + "] [" + mLogTag + "] " + " " + mLogMessage;}
}
LogHandler.java
import android.text.TextUtils;
import android.util.Log;import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.IOException;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** Created by zcf on 2020/9/18.*/public class LogHandler {private static final Lock sLock = new ReentrantLock();private static ExecutorService mService = Executors.newFixedThreadPool(2);private static ConcurrentLinkedQueue<String> mQueue = new ConcurrentLinkedQueue<>();private static File mLogFile;private LogHandler() {}public static void initLogFile(File file) {//删除目录if (file.exists() && file.isDirectory()) {try {FileUtils.deleteDirectory(file);} catch (IOException e) {}}//创建文件if (!file.exists()) {try {file.getParentFile().mkdirs();file.createNewFile();Log.i("LOGHANDLER","创建日志文件成功");LogHandler.writeFile("LOGHANDLER","创建日志文件成功");} catch (IOException e) {LogHandler.writeFile("LOGHANDLER","创建日志文件失败" + e.getMessage());}}if (file.exists() && file.isFile()) mLogFile = file;else throw new RuntimeException("is not file :" + file);}public static void writeFile(String tag, String string) {mQueue.add(new LocalLog(tag, string).toString() + "\r\n");mService.execute(mRunnable);}private static Runnable mRunnable = new Runnable() {@Overridepublic void run() {sLock.lock();try {StringBuilder msg = new StringBuilder();while (!mQueue.isEmpty()) {msg.append(mQueue.poll());}if (!TextUtils.isEmpty(msg.toString())) {FileUtils.writeStringToFile(mLogFile, msg.toString(), true);msg.delete(0, msg.length());}} catch (IOException e) {e.printStackTrace();LogHandler.writeFile("LOGHANDLER","创建日志文件失败" + e.getMessage());} finally {sLock.unlock();}}};}
主要就是用到了这两个类。
然后要在你的应用的Application类中(没有的,自己写一个继承Application)。
public static final String LOG_FILE = Environment.getExternalStorageDirectory() + "/logs/goods/goods_" + DateUtils.getDate1() + ".log";
这个是生成的日志文件。
在这个类的onCreate()方法中:
加入
LogHandler.initLogFile(new File(LOG_FILE));
这里是初始化,生成日志文件。
然后就可以在需要的地方写入了:
这个是初始化,每次只调用一次。
这个是往日志文件里写,每次都要调用。
例:
就会在日志文件里看到这句话了。
我这里写的是,每次 重启软件,就是每次调用Application的onCreate()方法,才会去判断是否是新的一天,才会去判断是否要生成新的日志文件。
Android运行程序生成日志文件相关推荐
- 另一种办法直接在宿主机上的文件夹内查看Docker镜像运行的日志文件
我们可以用docker ps首先找到某个Docker容器的id,再使用关键字docker logs <容器id>打印出该容器产生的日志: 同样,在宿主机目录/var/lib/docker/ ...
- android查看报错日志,android运行错误日志帮看下 不懂啊
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 xmlns:tools="http://schemas.android.com/tools" android:id="@id ...
- android怎么看错误日志,android运行错误日志帮看下 不懂啊
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 xmlns:tools="http://schemas.android.com/tools" android:id="@id ...
- c++日志文件中文显示乱码的问题及解决办法
近段时间在做战斗系统,昨天观察日志时发现中文显示乱码,而且奇怪的是有些中文日志是正常的,有些中文日志乱码 就是下面这种表现 Debug - Thu Oct 24 20:42:35 2019 : sys ...
- linux启动jar包指定日志输出目录下,linux 启动jar包 指定yml配置文件和输入日志文件...
命令为: nohup java -jar project.jar --spring.config.location=/home/project-conf/application.yml > ...
- Android APP测试的日志文件抓取
1 log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有: ...
- Android 捕获异常,并打印日志文件到本地
开发过程中或多或少肯定会出现异常问题,有的可以百分百复现,可以很快的定位到问题,但有的只是偶尔出现一次,定位问题会困难很多,可以使用CrashHandlerManager(主要定位会造成崩溃的异常)和 ...
- Android捕捉崩溃日志并输出日志文件
Android捕捉崩溃日志并输出日志文件 当程序与运行时发生崩溃,可以捕捉到当前崩溃的日志信息并写入文件保存到指定的目录下.这里还做了最大文件数量限制,超过数量即删除旧日志文件. import jav ...
- Android中对Log日志文件的分析[转]
一,Bug出现了, 需要"干掉"它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只 ...
最新文章
- iframe 数据传递
- 三、【SAP-PM模块】PM模块主数据
- elementui表格-改变某一列的样式
- php 去掉实体,用PHP删除除5个预定义HTML实体之外的所有实体的最佳方法-用于XHTML5输出...
- vscode open in browser 默认浏览器
- Scihub永久链接
- cadence电阻在哪个库_cadence元件库介绍
- java根据位置信息切割图片
- android仿钉钉日程日历,Flutter仿钉钉考勤日历的示例代码
- line-height绝对值和相对值的区别
- 使用Dubbo实现简单的RPC调用(Spring配置文件版)
- SCOI2012 Blinker的仰慕者 BZOJ 2757
- 【Java 数据结构 算法】宁可累死自己, 也要卷死别人 18 贪心算法
- 6.3 收敛性与稳定性
- 手机主板ESD设计注意事项
- Win7 安装最新版本Process Monitor失败,“无法加载驱动”
- error: could not create 'xxxxxx': Permission denied
- 内置式永磁电机maxwell2d_基于ANSYSMaxwell2D分析异步起动永磁同步电机
- 分享两个百度网盘提速方法
- 【103期分享】4款小清新PPT模板免费下载