一个对安卓日志输出功能的优化
2017-04-15 10:13
274 查看
日志在程序设计和调试中所起的作用不言而喻,因此一份保存完好的日志对于问题的发现和解决往往起着决定性的作用
在app中一般将日志输出到设备的data区保存为文本文档格式,方便后期导出查看
问题:当长时间不去清理这些日志文档时,文档会显得非常庞大臃肿,占用设备空间资源
思路:可以对输出的文本大小做一个限制,当输出到的文本大小超过设定限制,就将日志重新输出到新的文本中。
解决方法:始终保持向某一路径下的文本进行输入,当该路径下的文本大小超过限制,首先重命名该文本,然后重新生成默认的输出文本。
代码:
测试MainActivity.java
import android.content.Intent;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.ecity.android.log.LogUtil;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private static final String testString = "文章,1984年6月26日出生于陕西省西安市,中国内地男演员、导演。2006年毕业于中央戏剧学院表演系。2004年参演电视剧《与青春有关的日子》,开始在影视圈崭露头角。2005年拍摄古装剧《锦衣卫》。2007年主演赵宝刚导演的青春剧《奋斗》.";
public static final String LOG_NAME = "MyTestProject";
public static final String LOG_SUFFIX = ".log";
private static String SINGLE_FILE_MAX_SIZE = "2KB";
private String mLogPath;
private int index;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initLogger();
initListener();
}
@Override
protected void onResume() {
super.onResume();
initData();
}
private void initLogger() {
LogUtil.init(mLogPath, LOG_NAME, LOG_SUFFIX, LogUtil.LOG_LEVEL_INFO);
int i = 0;
while (i < 500) {
LogUtil.i(this, testString);
i++;
}
}
private void initView() {
mTextView = (TextView) findViewById(R.id.tv);
}
private void initData() {
mLogPath = Environment.getExternalStorageDirectory().getPath() + "//MyTestProject//TestLog_17//";
}
private void initListener() {
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, TestActivity.class);
startActivity(intent);
}
});
}
}
自定义的文件路径生成器MyFilePathGenerator.java
日志库文件见附件Loglib
在app中一般将日志输出到设备的data区保存为文本文档格式,方便后期导出查看
问题:当长时间不去清理这些日志文档时,文档会显得非常庞大臃肿,占用设备空间资源
思路:可以对输出的文本大小做一个限制,当输出到的文本大小超过设定限制,就将日志重新输出到新的文本中。
解决方法:始终保持向某一路径下的文本进行输入,当该路径下的文本大小超过限制,首先重命名该文本,然后重新生成默认的输出文本。
代码:
测试MainActivity.java
import android.content.Intent;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.ecity.android.log.LogUtil;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private static final String testString = "文章,1984年6月26日出生于陕西省西安市,中国内地男演员、导演。2006年毕业于中央戏剧学院表演系。2004年参演电视剧《与青春有关的日子》,开始在影视圈崭露头角。2005年拍摄古装剧《锦衣卫》。2007年主演赵宝刚导演的青春剧《奋斗》.";
public static final String LOG_NAME = "MyTestProject";
public static final String LOG_SUFFIX = ".log";
private static String SINGLE_FILE_MAX_SIZE = "2KB";
private String mLogPath;
private int index;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initLogger();
initListener();
}
@Override
protected void onResume() {
super.onResume();
initData();
}
private void initLogger() {
LogUtil.init(mLogPath, LOG_NAME, LOG_SUFFIX, LogUtil.LOG_LEVEL_INFO);
int i = 0;
while (i < 500) {
LogUtil.i(this, testString);
i++;
}
}
private void initView() {
mTextView = (TextView) findViewById(R.id.tv);
}
private void initData() {
mLogPath = Environment.getExternalStorageDirectory().getPath() + "//MyTestProject//TestLog_17//";
}
private void initListener() {
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, TestActivity.class);
startActivity(intent);
}
});
}
}
自定义的文件路径生成器MyFilePathGenerator.java
public static class MyFilePathGenerator extends FilePathGenerator { private long mMaxSize; public MyFilePathGenerator(String dir, String filename, String suffix, long maxSize) { super(dir, filename, suffix); this.mMaxSize = maxSize; this.dir = dir; } @Override public String generateFilePath() { String path = null; if (TextUtils.isEmpty(dir)) { return path; } File logDir = new File(dir); if (!logDir.exists()) { logDir.mkdirs(); } Date myDate = new Date(); SimpleDateFormat fdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); String myDateString = fdf.format(myDate); StringBuffer buffer = new StringBuffer(); buffer.append(filename); //buffer.append("-"); //buffer.append(myDateString); buffer.append(suffix); file = new File(logDir, buffer.toString()); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } return file.getAbsolutePath(); } @Override public boolean isGenerate() { if (file != null && file.length() >= mMaxSize) { generateFileWithTime(); file.renameTo(fileNew); } return (file == null) || !file.exists() || file.length() >= mMaxSize; } @Override public void onGenerate(String newPath, String oldPath) { } private String generateFileWithTime() { String path = null; if (TextUtils.isEmpty(dir)) { return path; } File logDir = new File(dir); if (!logDir.exists()) { logDir.mkdirs(); } Date myDate = new Date(); SimpleDateFormat fdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); String myDateString = fdf.format(myDate); StringBuffer buffer = new StringBuffer(); buffer.append(filename); buffer.append("-"); buffer.append(myDateString); buffer.append(suffix); fileNew = new File(logDir, buffer.toString()); if (!fileNew.exists()) { try { fileNew.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } return fileNew.getAbsolutePath(); } }
日志库文件见附件Loglib
相关文章推荐
- 打造一个基于OSGi的Web Application——增加日志输出功能
- 【Log】一个功能强大的Log封装库包括控制日志输出,保存Log到文件,过滤输出等级。。
- JDBMonitor日志输出探究(做executeBatch时发现一个BUG所引发的)
- spring 中配置log4j输出日志常见的一个小问题解决方法
- spring aop 面向切面编程 如何来做一个强大的日志记录功能
- Struts2+Ibatis+Spring.30(完整例子,含3.0事务配置,OSCache缓存配置,JreeChart配置,log4j日志输出Sql,对一个表实现完整的查询,批量删除,添加,更新)
- 写了一个将VxWorks的shell打印输出到指定内存中的接口,可广泛用于CLI下的调试函数显示以及故障自动捕获等功能,稍作修改可以适合其它嵌入式OS
- C#--第四周实验--任务3--定义一个人员类Cperson,在此基础上派生出学生类CStudent和教师类CTeacher,实现输入输出功能的成员函数。
- 程序日志中自动记录所在函数名、文件名、行号,并定向输出到一个日志文件
- 一个日志输出系统的设计
- 编写函数,其功能是:将一个数字字符串转换为一个整数(不得调用C语言中提供的将字符串转换成整数的函数。)要求在主函数中输入该字符串并输出转换后的整数的值。
- 优化判断日志是否需要输出的性能
- spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
- 将Control的日志输出到同一个文件
- .LOG4J的配置(输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能)
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- 题目:使用命令行参数编写一个程序,其功能是将任意一个正整数m变换为指定的n 进制数串输出。命令行的格式为:
- 解决了日志摘要的一个小bug,并增加了新功能
- 优化判断日志是否需要输出的性能
- log4j配置详解 输出到控制台,文件,回滚文件,发送日志邮件,输出到数据库日志表,自定义标签等全套功能