kotlin:LogKit

看到别人的一个代码,觉得有点意思,就复制过来。

package robatimport android.util.Log
import java.util.*object LogKit {private val MIN_STACK_OFFSET = 3var defaultTag = "LogKit"private val lineSeparator = System.getProperty("line.separator", "/n")val V = Log.VERBOSEval D = Log.DEBUGval I = Log.INFOval W = Log.WARNval E = Log.ERRORval A = Log.ASSERTprivate val TOP_BORDER = "╔═══════════════════════════════════════════════════════════════════════════════════════════════════"private val LEFT_BORDER = "║ "private val BOTTOM_BORDER = "╚═══════════════════════════════════════════════════════════════════════════════════════════════════"private val MAX_LEN = 1000var open = trueprivate fun processTagAndHead(): String {val elements = Thread.currentThread().stackTraceval offset = getStackOffset(elements)val targetElement = elements[offset]val head = Formatter().format("%s [%s(%s:%d)]","In Thread: " + Thread.currentThread().name,targetElement.methodName,targetElement.fileName,targetElement.lineNumber)return head.toString()}private fun processMsgBody(msg: String, flag: Int, tag: String = defaultTag) {printTop(flag, tag)// 首先打印调用信息printLog(flag, tag)val lineCount = msg.length / MAX_LENif (lineCount == 0) {printLog(flag, tag, msg)} else {var index = 0var i = 0while (true) {printLog(flag, tag, msg.substring(index, index + MAX_LEN))index += MAX_LENif ((++i) >= lineCount)break}}printBottom(flag, tag)}fun getStackOffset(trace: Array<StackTraceElement>): Int {var i = MIN_STACK_OFFSETwhile (i < trace.size) {val e = trace[i]val name = e.classNameif (name != LogKit::class.java.name) {return i}i++}return 2}/* 虽然 kotlin 有默认值这种操作,但是 Log.i(tag,msg) 这种比较符合平时的操作,所以还是提供类似的重载,* 而非 LogUtil.i(msg: String,tag: String = defaultTAG) 这种带默认值参数的方法 */fun v(msg: String) {v(defaultTag, msg)}fun i(msg: String) {i(defaultTag, msg)}fun d(msg: String) {d(defaultTag, msg)}fun w(msg: String) {w(defaultTag, msg)}fun e(msg: String) {e(defaultTag, msg)}fun v(tag: String, msg: String) {if (!open) {return}processMsgBody(msg, V, tag)}fun i(tag: String, msg: String) {if (!open) {return}processMsgBody(msg, I, tag)}fun d(tag: String, msg: String) {if (!open) {return}processMsgBody(msg, D, tag)}fun w(tag: String, msg: String) {if (!open) {return}processMsgBody(msg, W, tag)}fun e(tag: String, msg: String) {if (!open) {return}processMsgBody(msg, E, tag)}fun printLog(flag: Int, tag: String, msg: String = processTagAndHead()) {Log.println(flag, tag, LEFT_BORDER + msg)}fun printBottom(flag: Int, tag: String) {Log.println(flag, tag, BOTTOM_BORDER)}fun printTop(flag: Int, tag: String) {Log.println(flag, tag, TOP_BORDER)}fun closeLog() {this.open = false}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南美巴西市场最全分析开发攻略,收藏一篇就够了

巴西位于南美洲东部&#xff0c;是南美洲资源最丰富&#xff0c;经济活力和经济实力最强的国家。巴西作为拉丁美洲的出口大国&#xff0c;一直是一个比较有潜力的市场&#xff0c;亦是我国外贸公司和独立外贸人集群的地方。中国长期是巴西主要的合作伙伴&#xff0c;2022年占巴…

React组件

一、React组件 函数组件 // 函数组件 // 组件的名称必须首字母大写 // 函数组件必须有返回值 如果不需要渲染任何内容&#xff0c;则返回 null function HelloFn () {return <div>这是我的第一个函数组件!</div> }// 定义类组件 function App () {return (<di…

解决方案:AI赋能工业生产3.0,从工业“制造”到“智造”

视频监控技术是一种既成熟又广泛应用于工业制造领域的先进技术。它可以通过安装各种摄像头和传感器来监测整个生产流程&#xff0c;包括原材料的采购、加工、装配和物流等环节&#xff0c;从而实现对生产过程的实时监控和管理&#xff0c;以及对异常事件的及时预警和响应。 在…

压缩包系列

1、zip伪加密 一个zip文件由三部分组成&#xff1a;压缩源文件数据区压缩源文件目录区压缩源文件目录结束标志。 伪加密原理&#xff1a;zip伪加密是在文件头中加密标志位做修改&#xff0c;然后在打开时误被识别成加密压缩包。 压缩源文件数据区&#xff1a; 50 4B 03 04&a…

安全防御—密码学

1. 什么是APT&#xff1f; APT&#xff08;Advanced Persistent Threat&#xff09;是指高级持续性威胁&#xff0c;本质是针对性攻击。 利用先进的攻击手段对特定目标进行长期持续性网络攻击的攻击形式&#xff0c;APT攻击的原理相对于其他攻击形式更为高级和先进&#xff0c;…

matlab数学建模方法与实践 笔记汇总

matlab数学建模方法与实践 笔记汇总 写在最前面笔记1&#xff1a;快速入门1.导入数据2.数据探索3.多项式拟合4.发布功能5.数据类型6、全部代码 笔记2&#xff1a;数据的准备1.数据的读取与写入excel、txt读图读视频 2.数据预处理缺失值噪声过滤数据归约数据变换 3.数据统计4.数…

除静电离子风蛇的工作原理及应用

静电离子风蛇是一种通过产生大量负离子来中和空气中的静电荷的设备。它们通常用于防止静电对电子设备、印刷机、加工机等工业设备造成损害。 静电离子风蛇的工作原理是通过电离器将空气中的氧气分子转化为氧离子&#xff0c;然后将这些氧离子释放到空气中。这些氧离子会与空气…

Android Camera2 SessionConfiguration介绍和使用

一、介绍 最近在相机开发中发现 createCaptureSession(List, CameraCaptureSession.StateCallback, Handler) 已经被标记为过时&#xff08;Deprecated&#xff09;的函数了&#xff0c;取而代之的是 createCaptureSession(SessionConfiguration) 函数。 缘由 随着 Camera 功…

适老产品反“坑老”,美的智能化家电是否能坐稳银发经济顺风车?

随着我国老龄化程度不断加深&#xff0c;银发经济崛起早已成为不争的共识。早在2013年&#xff0c;《中国老年人家电需求研究报告》就曾预测&#xff0c;仅在城镇空巢老年人家庭&#xff0c;每年产生的老年家电需求规模就超过600亿元&#xff0c;加上非空巢老人的需求&#xff…

再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的闪回功能

看腻文章了就来听听视频演示吧&#xff1a;https://www.bilibili.com/video/BV19m4y1V7jA/ 传统处理&#xff1a;全量备份增量binlog备份 模拟Oracle闪回&#xff1a;前提是binlog_formatROW drop table t_student; create table t_student(id int,name varchar(18),class in…

Array简介

概念&#xff1a; 数组&#xff08;Array&#xff09;是Java中最简单的数据结构之一&#xff0c;它用于存储固定大小的相同类型元素序列。数组是一个连续分配的内存块&#xff0c;可以通过索引访问其中的元素。元素在数组中按照顺序排列&#xff0c;并使用整数索引来唯一标识每…

Spring注册Bean系列--方法5:@Import+ImportBeanDefinitionRegistrar

原文网址&#xff1a;Spring注册Bean系列--方法5&#xff1a;ImportImportBeanDefinitionRegistrar_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;ImportImportBeanDefinitionRegistrar。 注册Bean的方法我写了一个系列&#xff0c;见&#xff…

MySQL基础-事务

目录 1.事务简介 2.事务的操作 2.1 实验需要用到的数据 2.2 完成转账操作 修改事务执行方式 手动开启事务的方式 3.事务的四大特性 4.并发事务问题 5.事务隔离级别 5.1 事务隔离级别分类 5.2 查看事务隔离级别 5.3 设置事务隔离级别 1.事务简介 事务是一组操作的集合…

Android---GC回收机制与分代回收策略

目录 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾回收算法 JVM 分代回收策略 1. 新生代 2. 老年代 GC Log 分析 引用 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾就是内存中已经没有用的对象&#xff0c;JVM 中的垃圾回收器(Garbage Collector)会自…

[CISCN2019 华北赛区 Day1 Web5]CyberPunk 二次报错注入

buu上 做点 首先就是打开环境 开始信息收集 发现源代码中存在?file 提示我们多半是包含 我原本去试了试 ../../etc/passwd 失败了 直接伪协议上吧 php://filter/readconvert.base64-encode/resourceindex.phpconfirm.phpsearch.phpchange.phpdelete.php 我们通过伪协议全…

入侵防御系统(IPS)网络安全设备介绍

入侵防御系统&#xff08;IPS&#xff09;网络安全设备介绍 1. IPS设备基础 IPS定义 IPS&#xff08;Intrusion Prevention System&#xff09;是一种网络安全设备或系统&#xff0c;用于监视、检测和阻止网络上的入侵尝试和恶意活动。它是网络安全架构中的重要组成部分&…

部署在阿里云ECS服务器上的微服务项目中获取到的时间和windows的时间不一样的问题

继上一篇文章《阿里云ECS服务器无法发送邮件问题解决方案》之后&#xff0c;又发现登录的时候发送邮件中的时间和自己windows上的时间不一样&#xff0c;大概找了一下原因&#xff0c;是LocaDateTime使用的时区不一样导致的远程服务器和本机时间不一致。 只需要在LocaDateTime…

Aria2 for Mac (免HomeBrew)

Aria2 for Mac (免HomeBrew)-CSDN博客 之前搜索Aria2的安装方法&#xff0c;推荐的方法是使用HomeBrew安装。是&#xff0c;这个插件很省事&#xff0c;但启用条件是你安装了HomeBrew且运行起来需要再下十来个G的Xcode…… 这对急用的我非常不友好&#xff0c;当然&#xff0c…

设计模式 - 创建型模式考点篇:工厂模式、建造者模式

目录 一、创建型模式 1.1、工厂模式 1.1.1、简单工厂模式&#xff08;非 23 种经典设计模式&#xff09; 概述 案例 1.1.2、静态工厂&#xff08;扩展&#xff09; 1.1.3、工厂方法模式 概念 案例 1.2、建造者模式 1.2.1、概念 1.2.2、案例 1.2.3、建造者模式扩展&…

Pandas数据结构

文章目录 1. Series数据结构1.1 Series数据类型创建1.2 Series的常用属性valuesindex/keys()shapeTloc/iloc 1.3 Series的常用方法mean()max()/min()var()/std()value_counts()describe() 1.4 Series运算加/减法乘法 2. DataFrame数据结构2.1 DataFrame数据类型创建2.2 布尔索引…