您的位置:首页 > 移动开发 > Android开发

一个对安卓日志输出功能的优化

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android Log 日志
相关文章推荐