IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 自定义Log类动态管理你的日志 -> 正文阅读

[移动开发]Android 自定义Log类动态管理你的日志

Android Logger

最近看了公司的Log工具类,觉得有点简单。决定自己实现一个,Logger, 一个可以控制Log输出不同场景的工具类

package com.android.chocolate.util

import android.util.Log
import java.lang.NullPointerException


/**
 * <p>
 * 需求一:可以开启关闭所有的Log打印
 * 需求二:指定指打印某一个类型的Log,设置则生效
 * 需求三:指定指打印某一个类型的Log以上的日志,设置则生效
 * </p>
 * <description>需求二、三 需要用户手动开启,默认是不开启的</description>
 * @author ricky  2022/2/25 13:57
 * @since 1.0
 */
object Logger {

    // default TAG
    private const val TAG = "Logger"

    // 设置为false,则不会打印出日志
    private const val isOpen = false

    // 只单独显示一个类型的日志,当你需要的时候 可以对它进行设置 默认显示全部
    private var onlyLogCategory: Int? = null

    // 是否显示包含它及以上的高等级日志,默认不开启
    private var isExpand = false

    /**
     * 设置只显示这个一个类型的日志
     */
    @Synchronized
    fun setOnlyLogCategory(style: Style) {
        onlyLogCategory = style.getMark()
    }

    @Synchronized
    fun getOnlyLogCategory() = onlyLogCategory

    /**
     * 需要配合setOnlyLogCategory一起使用,单开启无任何效果
     * @see Logger.setOnlyLogCategory
     *
     */
    @Synchronized
    fun setExpand(status: Boolean) {
        isExpand = status
    }

    @Synchronized
    fun getExpand() = isExpand

    /**
     * Info
     */
    fun i(tag: String, msg: String) {
        if (!isOpen) {
            return
        }
        if (onlyLogCategory != null) {
            if (Style.INFO.getMark() > onlyLogCategory!!) {
                //延伸未开启 取反
                if (!isExpand) {
                    return
                }
            } else if (Style.INFO.getMark() != onlyLogCategory) {
                return
            }
        }
        if (msg.isEmpty() || tag.isEmpty()) {
            throw NullPointerException("i(tag: String, msg: String) Received Illegal arguments")
        }
        Log.i(tag, msg)
    }

    /**
     * Info,default TAG is Logger
     */
    fun i(msg: String) {
        i(TAG, msg)
    }

    /**
     * Debug
     */
    fun d(tag: String, msg: String) {
        if (!isOpen) {
            return
        }
        if (onlyLogCategory != null) {
            if (Style.DEBUG.getMark() > onlyLogCategory!!) {
                //延伸未开启 取反
                if (!isExpand) {
                    return
                }
            } else if (Style.DEBUG.getMark() != onlyLogCategory) {
                return
            }
        }
        if (msg.isEmpty() || tag.isEmpty()) {
            throw NullPointerException("d(tag: String, msg: String) Received Illegal arguments")
        }
        Log.d(tag, msg)
    }

    /**
     * Debug ,default TAG is Logger
     */
    fun d(msg: String) {
        d(TAG, msg)
    }


    /**
     * ERROR
     */
    fun e(tag: String, msg: String) {
        if (!isOpen) {
            return
        }
        if (onlyLogCategory != null) {
            if (Style.ERROR.getMark() > onlyLogCategory!!) {
                //延伸未开启 取反
                if (!isExpand) {
                    return
                }
            } else if (Style.ERROR.getMark() != onlyLogCategory) {
                return
            }
        }
        if (msg.isEmpty() || tag.isEmpty()) {
            throw NullPointerException("e(tag: String, msg: String) Received Illegal arguments")
        }
        Log.e(tag, msg)
    }

    /**
     * ERROR ,default TAG is Logger
     */
    fun e(msg: String) {
        e(TAG, msg)
    }

    enum class Style(private val mark: Int) {
        VERBOSE(2),
        DEBUG(3),
        INFO(4),
        WARN(5),
        ERROR(6),
        ASSERT(7);

        fun getMark() = mark

    }


}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:41:20  更:2022-02-28 15:43:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:54:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码