TLog 是一个轻量级 Android 日志库,支持 Logcat 输出和本地文件记录。它适合在开发、测试和线上问题排查场景中统一管理日志输出。
- 支持
VERBOSE、DEBUG、INFO、WARN、ERROR五种日志级别。 - 支持全局默认 Tag,也支持单条日志临时指定 Tag。
- 支持长日志自动分片输出,避免 Logcat 单条日志过长被截断。
- 支持文件日志,
TLog.file()下的v/d/i/w/e会同时输出到 Logcat 和日志文件。 - 文件写入使用单线程后台队列处理,避免主线程写磁盘导致 UI 卡顿。
- 支持日志文件大小限制和文件数量限制,自动创建新日志文件并清理过期文件。
- 通过
ContentProvider自动获取应用Context,通常不需要手动在Application中初始化 Context。 - 支持自定义控制台输出器和文件输出器。
在应用模块中添加依赖:
dependencies {
implementation("io.github.wangjintao:tlog:2.0.0")
}确保项目已经启用 mavenCentral():
repositories {
mavenCentral()
}不配置也可以直接使用,默认 Tag 为 TLog,文件日志默认保存在应用私有目录下的 files/log。
TLog.v(log)
TLog.d(log)
TLog.i(log)
TLog.w(log)
TLog.e(log)class MyApp : Application() {
override fun onCreate() {
super.onCreate()
TLog.init {
defaultTag = "AppLog"//全局tag,默认TLog
enableFileLogging = true//是否开启文件日志存储,默认true
maxFileSizeBytes = 2L * 1024L * 1024L//单个日志文件大小,默认2M
maxFileCount = 5//存储的最大日志文件个数,默认5
}
}
}普通日志只输出到 Logcat:
TLog.v("verbose message")
TLog.d("debug message")
TLog.i("info message")
TLog.w("warn message")
TLog.e("error message")打印异常堆栈:
try {
// business code
} catch (throwable: Throwable) {
TLog.e("request failed", throwable)
}临时指定单条日志的 Tag:
TLog.tag("Network").d("request start")
TLog.tag("Database").w("query slow")tag() 只对紧随其后的一次日志调用生效。
使用 file() 可以让日志同时输出到 Logcat 和本地文件:
TLog.file().v("verbose file log")
TLog.file().d("debug file log")
TLog.file().i("info file log")
TLog.file().w("warn file log")
TLog.file().e("error file log")异常也可以写入文件:
TLog.file().e("save user failed", throwable)文件日志同样支持临时 Tag:
TLog.tag("Payment").file().i("payment success")文件写入会被投递到 TLog-File 单线程后台队列中执行。调用 TLog.file().d(...) 时不会在当前线程直接写磁盘,因此可以在主线程中调用,降低 UI 卡顿风险。单线程队列会保持文件日志的写入顺序。
TLog.init {
defaultTag = "AppLog"
consolePrinter = ConsolePrinter()
filePrinter = null
logDir = File(filesDir, "my_logs")
enableFileLogging = true
maxFileSizeBytes = 2L * 1024L * 1024L
maxFileCount = 5
}| 配置项 | 默认值 | 说明 |
|---|---|---|
defaultTag |
"TLog" |
默认 Logcat Tag |
consolePrinter |
ConsolePrinter() |
Logcat 输出器,设为 null 可关闭 Logcat 输出 |
filePrinter |
null |
自定义文件输出器;不为空时优先使用它 |
logDir |
files/log |
日志文件目录 |
enableFileLogging |
true |
是否启用默认文件日志 |
maxFileSizeBytes |
2 * 1024 * 1024 |
单个日志文件最大大小 |
maxFileCount |
5 |
最多保留的日志文件数量 |
默认日志文件名格式:
log_yyyyMMdd_HHmmss_SSS.txt
当最新日志文件加上下一条日志后超过 maxFileSizeBytes 时,会创建新的日志文件。文件数量超过 maxFileCount 后,会按文件名排序删除最旧的日志文件。
如果你需要把日志接入自己的采集系统,可以实现 Printer:
class RemotePrinter : Printer {
override fun println(level: Int, tag: String, msg: String) {
// upload or persist log
}
}配置自定义输出器:
TLog.init {
consolePrinter = ConsolePrinter()
filePrinter = RemotePrinter()
}Printer.println(level, tag, msg) 中的 level 与 Android Log 级别一致:
| TLog | Android priority |
|---|---|
LogLevel.VERBOSE |
Log.VERBOSE |
LogLevel.DEBUG |
Log.DEBUG |
LogLevel.INFO |
Log.INFO |
LogLevel.WARN |
Log.WARN |
LogLevel.ERROR |
Log.ERROR |
当前库没有必须保留的反射 API。通常不需要额外混淆规则。
如果你的应用移除了 manifest merger 中的 TLogInitProvider,并且没有手动指定 logDir,默认文件日志将无法解析应用私有目录。建议保留库内 provider,或者在初始化时显式传入日志目录:
TLog.init {
logDir = File(filesDir, "log")
}minSdk: 16compileSdk: 34- Kotlin JVM target: 1.8
TLog.init { }
TLog.v("message")
TLog.d("message")
TLog.i("message")
TLog.w("message")
TLog.e("message")
TLog.e("message", throwable)
TLog.tag("CustomTag").d("message")
TLog.file().v("message")
TLog.file().d("message")
TLog.file().i("message")
TLog.file().w("message")
TLog.file().e("message")
TLog.file().e("message", throwable)作者:王金涛
邮箱:wangjintao1988@163.com
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
Copyright 2026 WangJintao
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.



