代码

import android.util.Log

/**
 * Android通用Logger工具,在此处可以对log进行控制。如开启/关闭
 */
// TODO: internal 是kt的安全限制符号,类似public 等等 
internal class Logger {
    companion object {
        private const val SDK_TAG = "wb_demo"

        // 可以加个开关控制。根据编译版本来修改该值
        private const val ENABLE_LOG = true

        fun d(tag: String?, msg: String) {
            // 1、通过Android系统api Log输出到控制台
            Log.d(wrapTag(tag), msg)
            // 2、通过ZegoDocsSDK,写入文件
        }

        fun i(tag: String?, msg: String) {
            Log.i(wrapTag(tag), msg)
        }

        fun w(tag: String?, msg: String) {
            Log.w(wrapTag(tag), msg)
        }

        fun e(tag: String?, msg: String) {
            Log.e(wrapTag(tag), msg)
        }

        /**
         * 所有log加上统一的前缀
         */
        private fun wrapTag(tag: String?): String {
            return SDK_TAG + tag
        }

        /**
         * 往sdk写的logMsg,tag 和 msg 直接拼接在一起
         */
        private fun wrapSdkLogMsg(tag: String, msg: String): String {
            return tag + msg
        }
    }
}

其中internal是一个可见修饰符。区别如下:

如果你不指定任何可见性修饰符,默认为 public,这意味着你的声明将随处可见;
如果你声明为 private,它只会在声明它的文件内可见;
如果你声明为 internal,它会在相同模块内随处可见;
protected 不适用于顶层声明。

其中特别强调一下模块

可见性修饰符 internal 意味着该成员只在相同模块内可见。更具体地说, 一个模块是编译在一起的一套 Kotlin 文件:
如下:
一个 IntelliJ IDEA 模块;
一个 Maven 项目;
一个 Gradle 源集(例外是 test 源集可以访问 main 的 internal 声明);
一次 Ant 任务执行所编译的一套文件。

可见性修饰符-kotlin中文