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

来源:互联网 发布:mac照片图库照片路径 编辑:程序博客网 时间:2024/06/18 15:12

日志在程序设计和调试中所起的作用不言而喻,因此一份保存完好的日志对于问题的发现和解决往往起着决定性的作用

在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

0 0