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
}
}