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



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

    在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();
        }
    }
  • 相关阅读:
    Openwrt_树莓派B+_Wifi中继
    python多线程编程: 如何暴力但不失优雅地关闭线程
    react路由基础理解
    球迷 如何在Linux纯命令行玩转谷歌浏览器,边看欧洲杯,边看足球宝贝
    人工智能生成内容AIGC:AIGC for Various Data Modalities: A Survey
    【学相伴】狂神说 RabbitMQ快速入门笔记(简单使用RabbitMQ)SpringBoot整和RabbitMQ
    “蔚来杯“2022牛客暑期多校训练营6 C题: Forest
    Mac修改Mysql8.0密码
    Android开发笔记——快速入门(从入门ACT到Fragment放肆)
    Linux(CentOS7)下载并安装Python 3教程及创建虚拟环境
  • 原文地址:https://blog.csdn.net/m0_72345017/article/details/127100002