0
点赞
收藏
分享

微信扫一扫

Android 自定义Log类,动态管理你的日志

一世独秀 2022-02-25 阅读 64

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

    }


}
举报

相关推荐

0 条评论