原本我是一个不怎么喜欢写日志,也不怎么喜欢看日志的人。App中我只看网络请求的日志,网络请求的日志一般网络请求的框架中都会有日志打印。崩溃的日志也不需要自己去写。最近的项目中,要用手机连接U盘。手机USB接口被U盘占用了,看不到日志,很烦,崩溃了不知道问题出在哪里。看不到日志怎么办呢?首先我想到的是adb命令,使用网络连接手机,查看日志。这个方法理论上应该是可以的。然而总是连接不到手机。
于是我只能选择自己写日志文件了。
class HyLog private constructor(block: HyLog.() ->
Unit) {
/** * 是否开启日志 */
var showLog:
Boolean =
false
/** * 日志标签 */
var tag =
"hyjiao"
/** * 是否保存到文件 */
var saveFile =
false
/** * 日志文件保存的位置 */
var logPath =
init { block() }
companion
object {
private
lateinit
var hyLog: HyLog
fun initLog(block: HyLog.() -> Unit) { hyLog = HyLog(block) }
fun v(log: String, tag: String = hyLog.tag) {
if (hyLog.showLog) {
if (hyLog.saveFile) { writeLogFile(log,
"v", tag) } Log.i(tag, log) } }
fun i(log: String, tag: String = hyLog.tag) {
if (hyLog.showLog) {
if (hyLog.saveFile) { writeLogFile(log,
"i", tag) } Log.i(tag, log) } }
fun d(log: String, tag: String = hyLog.tag) {
if (hyLog.showLog) {
if (hyLog.saveFile) { writeLogFile(log,
"d", tag) } Log.i(tag, log) } }
fun w(log: String, tag: String = hyLog.tag) {
if (hyLog.showLog) {
if (hyLog.saveFile) { writeLogFile(log,
"w", tag) } Log.i(tag, log) } }
fun e(log: String, tag: String = hyLog.tag) {
if (hyLog.showLog) {
if (hyLog.saveFile) { writeLogFile(log,
"e", tag) } Log.i(tag, log) } }
/** * 将日志写到文件中 */
private
fun writeLogFile(log: String, type: String, tag: String) {
val dateTime = HyUtil.formatDataTime(System.currentTimeMillis(),
"yyyy-MM-dd HH:mm:ss.SSS")
val myLog =
"$dateTime/$type/$tag:$log "
val file = File(hyLog.logPath)
if (!file.exists()) { file.createNewFile() } file.appendText(myLog, Charsets.UTF_8) } }}
日志工具的使用:
首先在Application的onCreate()中进行初始化设置
//设置是否日志工具HyLog.initLog { showLog = BuildConfig.DEBUG saveFile = BuildConfig.DEBUG logPath = externalCacheDir!!.absolutePath + File.pathSeparatorChar +
"mylog.log"}
然后就可以在需要打印日志的地方添加日志了
HyLog .i(" MyApp :onCreate()") HyLog.i( log = "MainActivity:onCreate()", tag = "MainActivity")