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


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

在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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值