当前位置: 首页 > news >正文

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

相关文章:

kotlin:LogKit

看到别人的一个代码&#xff0c;觉得有点意思&#xff0c;就复制过来。 package robatimport android.util.Log import java.util.*object LogKit {private val MIN_STACK_OFFSET 3var defaultTag "LogKit"private val lineSeparator System.getProperty("l…...

yolo_tracking中osnet不支持.pth格式,而model_zoo中仅有.pth

yolo_traking-7.0中REID模块用到了osnet&#xff0c;track.py中模型文件不支持.pth&#xff0c;而model_zoo中仅有.pth&#xff0c;改动代码太麻烦了&#xff0c;网上查到的.pth文件转化为.pt文件都需要读取网络架构&#xff0c;不太可能实现。 读取osnet_x0_25_msmt17.pth发现…...

Tailwind CSS浅析与实操

Tailwind CSS 一、Tailwind CSS简介 What is Tailwind CSS Tailwind CSS| TailwindCSS中文文档 | TailwindCSS中文网官方解释&#xff1a;只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站。本质上是一个工具集&#xff0c;包含了大量类似 fle…...

Activiti工作流引擎详解与应用

一、简介 Activiti是一个开源的工作流引擎&#xff0c;基于BPMN2.0标准进行流程定义。它可以将业务系统中复杂的业务流程抽取出来&#xff0c;使用专门的建模语言BPMN2.0进行定义&#xff0c;业务流程按照预先定义的流程进行执行&#xff0c;实现了系统的流程由Activiti进行管…...

New Journal of Physics:不同机器学习力场特征的准确性测试

文章信息 作者&#xff1a;Ting Han1, Jie Li1, Liping Liu2, Fengyu Li1, * and Lin-Wang Wang2, * 通信单位&#xff1a;内蒙古大学物理科学与技术学院、中国科学院半导体研究所 DOI&#xff1a;10.1088/1367-2630/acf2bb 研究背景 近年来&#xff0c;基于DFT数据的机器学…...

ubuntu22.04 x11窗口环境手势控制

ubuntu22.04 x11窗口环境手势控制 ubuntu x11窗口环境的手势控制并不优秀&#xff0c;我们可以使用touchegg去代替 这个配置过程非常简单&#xff0c;并且可以很容易在一定范围内达到你想到的效果&#xff0c;类比mac的手势控制 关于安装 首先添加源&#xff0c;并安装 sud…...

【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】

文章目录 1.1 ARM NIC-400(Network interconnect)1.1.1 NIC-400 系统框图1.1.2 NIC-400 Network Interconnect1.2 NIC-400 特点1.2.1 QoS-400 Advanced Quality of Service1.2.2 QVN-400 QoS Virtual Networks1.2.3 TLX-400 Thin Links1.3 NIC-400 Top1.4 NIC-400 Terminology1…...

【生成模型】解决生成模型面对长尾类型物体时的问题 RE-IMAGEN: RETRIEVAL-AUGMENTED TEXT-TO-IMAGE GENERATOR

介绍 尽管最先进的模型可以生成常见实体的高质量图像&#xff0c;但它们通常难以生成不常见实体的图像&#xff0c;例如“Chortai&#xff08;狗&#xff09;”或“Picarones&#xff08;食物&#xff09;”。为了解决这个问题&#xff0c;我们提出了检索增强文本到图像生成器…...

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

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

c++中操作符->与 . 的使用与区别

在C中&#xff0c;-> 和 . 是两个不同的成员访问操作符&#xff0c;用于访问类、结构体或联合体的成员。 “->” 操作符&#xff1a; 用于通过指针访问指针所指向对象的成员。当有一个指向对象的指针时&#xff0c;可以使用 -> 操作符来访问该指针所指向对象的成员。…...

golang 编译器 汉化

1、找到左上角file选项&#xff0c;点击选中settings进行单机 2、找到settings中找到plugins选中进行点击 3、再框中输入chinese进行搜索&#xff0c;出结果后找到如下图所示&#xff0c;点击进行安装 4、安装完成后进行重启ide&#xff0c;完美解决...

压缩包系列

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

互联网图片安全风控实战训练营开营!

内容安全风控&#xff0c;即针对互联网产生的海量内容的外部、内部风险做宏观到微观的引导和审核&#xff0c;从内容安全领域帮助企业化解监管风险和社会舆论风险&#xff0c;其核心是识别文本、图片、视频、音频中的有害内容。 由于互联网内容类型繁杂、多如牛毛&#xff0c;加…...

炫酷转换:Java实现Excel转换为图片的方法

摘要&#xff1a;本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在实际开发过程中&#xff0c;经常会有这样的需求&#xff1a;将Excel表格或特定区域转…...

vue elementui <el-date-picker>日期选择框限制只能选择90天内的日期(包括今天)

之前也写过其他限制日期的语句&#xff0c;感觉用dayjs()的subtract()和add()也挺方便易懂的&#xff0c;以此记录 安装dayjs npm install dayjs --save dayjs().add(value : Number, unit : String); dayjs().add(7, day); //在当前的基础上加7天dayjs().subtract(value : N…...

YOLOv5全新Neck改进:BiSPAN 结构独一无二,为目标检测打造全新融合网络,增强定位信号,对于小目标检测的定位具有重要意义

💡本篇内容:YOLOv5全新Neck改进:BiSPAN 结构升级版,为目标检测打造全新融合网络,增强定位信号,对于小目标检测的定位具有重要意义 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv…...

flutter开发实战-video_player插件播放抖音直播实现(仅限Android端)

flutter开发实战-video_player插件播放抖音直播实现&#xff08;仅限Android端&#xff09; 在之前的开发过程中&#xff0c;遇到video_player播放视频&#xff0c;通过查看video_player插件描述&#xff0c;可以看到video_player在Android端使用exoplayer&#xff0c;在iOS端…...

React组件

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

[动手学深度学习]注意力机制Transformer学习笔记

动手学深度学习&#xff08;视频&#xff09;&#xff1a;68 Transformer【动手学深度学习v2】_哔哩哔哩_bilibili 动手学深度学习&#xff08;pdf&#xff09;&#xff1a;10.7. Transformer — 动手学深度学习 2.0.0 documentation (d2l.ai) 李沐Transformer论文逐段精读&a…...

hadoop集群安装并配置

文章目录 1.安装JDK 环境2.系统配置2.1修改本地hosts文件2.2创建hadoop 用户2.2 设置ssh免密&#xff08;使用hadoop 用户生成&#xff09; 3.安装 hadoop 3.2.43.1 安装hadoop3.1.1 配置Hadoop 环境变量 3.2配置 HDFS3.2.1 配置 workers 文件3.2.2 配置hadoop-env.sh3.2.3 配置…...

Quarto 入门教程 (3):代码框、图形、数据框设置

简介 本文是《手把手教你使用 Quarto 构建文档》第三期&#xff0c;前两期分别介绍了&#xff1a; 第一期 介绍了Quarto 构建文档的原理&#xff1b;可创建的文档类型&#xff1b;对应的参考资源分享。 第二期 介绍了如何使用 Quarto&#xff0c;并编译出文档&#xff08;PDF…...

虚拟机Ubuntu18.04安装对应ROS版本详细教程!(含错误提示解决)

参考链接&#xff1a; Ubuntu18.04安装Ros(最新最详细亲测)_向日葵骑士Faraday的博客-CSDN博客 1.4 ROS的安装与配置_哔哩哔哩_bilibili ROS官网&#xff1a;http://wiki.ros.org/melodic/Installation/Ubuntu 一、检查cmake 安装ROS时会自动安装旧版的Cmake3.10.2。所以在…...

#力扣:14. 最长公共前缀@FDDLC

14. 最长公共前缀 一、Java class Solution {public String longestCommonPrefix(String[] strs) {for (int l 0; ; l) {for (int i 0; i < strs.length; i) {if (l > strs[i].length() || strs[i].charAt(l) ! strs[0].charAt(l)) return strs[0].substring(0, l);}…...

Android 13.0 解锁状态下禁止下拉状态栏功能实现

1.前言 在13.0的系统定制化开发中,在关于一些systemui下拉状态栏的定制化功能开发中,对于关于systemui的下拉状态栏 是否可以下拉做了定制,用系统属性来判断是否可以在解锁的情况下可以下拉状态栏布局,虽然11.0 12.0和13.0的关于 下拉状态栏相关分析有区别,可以通过分析相…...

chromium线程模型(1)-普通线程实现(ui和io线程)

通过chromium 官方文档&#xff0c;线程和任务一节我们可以知道 &#xff0c;chromium有两类线程&#xff0c;一类是普通线程&#xff0c;最典型的就是io线程和ui线程。 另一类是 线程池线程。 今天我们先分析普通线程的实现&#xff0c;下一篇文章分析线程池的实现。&#xff…...

uniapp uni.showToast 一闪而过的问题

问题&#xff1a;在页面跳转uni.navigateBack()等操作的前或后&#xff0c;执行uni.showToast&#xff0c;即使代码中设置2000ms的显示时间&#xff0c;也会一闪而过。 解决&#xff1a;用setTimeout延后navigateBack的执行。...

代理模式介绍及具体实现(设计模式 三)

代理模式是一种结构型设计模式&#xff0c;它允许通过创建一个代理对象来控制对另一个对象的访问 实例介绍和实现过程 假设我们正在开发一个电子商务网站&#xff0c;其中有一个商品库存管理系统。我们希望在每次查询商品库存之前&#xff0c;先进行权限验证&#xff0c;以确…...

【18】c++设计模式——>适配器模式

c的适配器模式是一种结构型设计模式&#xff0c;他允许将一个类的接口转换成另一个客户端所期望的接口。适配器模式常用于已存在的&#xff0c;但不符合新需求或者规范的类的适配。 在c中实现适配器模式时&#xff0c;通常需要一下几个组件&#xff1a; 1.目标接口&#xff08;…...

mariadb 错误日志中报错:Incorrect definition of table mysql.column_stats:

数据库错误日志出现此错误原因是因为系统表中字段类型或者数据结构有变动导致&#xff0c;一般是因为升级数据库版本后未同步升级系统表结构。 解决方法&#xff1a; 1.如果错误日志过大&#xff0c;直接删除。 2.执行 mysql_upgrade -u[用户名] -p[密码];&#xff0c;这一步…...

【SpringBoot】多环境配置和启动

环境分类&#xff0c;可以分为 本地环境、测试环境、生产环境等&#xff0c;通过对不同环境配置内容&#xff0c;来实现对不同环境做不同的事情。 SpringBoot 项目&#xff0c;通过 application-xxx.yml 添加不同的后缀来区分配置文件&#xff0c;启动时候通过后缀启动即可。 …...

在腾讯云怎样建设网站/荆州seo推广

本文地址&#xff1a;http://www.cnblogs.com/archimedes/p/c-opensource-project.html&#xff0c;转载请注明源地址。 本篇文章主要总结一些C开源项目&#xff0c;有些是很著名的&#xff0c;有些则比较生僻 1.Webbench Webbench是一个在linux下使用的非常简单的网站压测工具…...

怎么做付费的小说网站/如何找客户资源

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

河南郑州百度网站建设/seo网站优化方案书

简单的说&#xff0c;Python是一个“优雅”、“明确”、“简单”的编程语言。 学习曲线低&#xff0c;非专业人士也能上手开源系统&#xff0c;拥有强大的生态圈解释型语言&#xff0c;完美的平台可移植性支持面向对象和函数式编程能够通过调用C/C代码扩展功能代码规范程度高&a…...

济南比较好的网站建设公司/网络优化工程师工资

大家好&#xff0c;我是陈旸&#xff0c;也是极客时间《数据分析实战 45 讲》专栏作者。很荣幸接到极客时间的邀请&#xff0c;来到极客Live和大家分享关于“数据分析”的话题。这次分享会共分为五部分&#xff0c;来为大家答疑解惑。 我们为什么要学数据分析&#xff1f; 学习…...

2b2网站开发/百度移动端优化

sery 的BLOG链接:http://sery.blog.ccidnet.com/blog/ccid/do_showone/tid_35445.html来自 “ ITPUB博客 ” &#xff0c;链接&#xff1a;http://blog.itpub.net/39335/viewspace-350917/&#xff0c;如需转载&#xff0c;请注明出处&#xff0c;否则将追究法律责任。 转载于…...

沧州住房和城乡建设部网站/百度推广优化师

下列表格中除了个别函数外&#xff0c;其余函数都是图像处理工具箱提供的关于图像处理的函数&#xff0c;现摘录到此以备查找。 表1 图像显示函数名功能说明函数名功能说明colorbar颜色条显示montage按矩形剪辑方式显示多帧图像getimage从坐标系中获取图像数据immovie从多帧索引…...