【问题标题】:Kotlin Android print to consoleKotlin Android 打印到控制台
【发布时间】:2016-11-26 07:06:03
【问题描述】:

我需要使用 Kotlin 将一些 str 打印到控制台(Android Studio)。 我试过了:

Log.v() 
Log.d() 
Log.i() 
Log.w() 
Log.e() 

方法。但它似乎只适用于 Java。 我应该用什么来使用 Kotlin 进行打印? 谢谢

【问题讨论】:

  • 任何 Java 方法也适用于 Kotlin。 “它似乎有效”到底是什么意思?
  • 顺便说一句:您可以使用日志模板在 Java 中生成代码,并通过将其复制并粘贴到 Kotlin 文件中来自动将其转换为 Kotlin。或者,您可以通过直接从 this Github repo 导入 Kotlin 端口来使日志模板在 Kotlin 中可用。只需通过“文件 > 导入设置...”导入 .jar。

标签: android printing kotlin


【解决方案1】:

有几种方法。

你可以使用Log.d("TAG", "message");,但首先你需要导入Log

import android.util.Log

{...}

Log.d("TAG", "message")

{...}

来源:https://developer.android.com/reference/android/util/Log.html

也可以使用kotlin的printprintln函数。

例子:

{...}

print("message")

println("other message")

{...}

来源:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/

【讨论】:

  • Kotlin 的 print 和 println 函数不会打印到 Android 日志。
  • 没错,它们打印到标准输出,如我设置为源的文档中所述。但问题实际上是关于打印到控制台,不一定是 android 日志。我想它仍然适合 =)
  • @Ramalus 最初的问题有一个Android 标签,但我想最好同时包含这两个标签。
  • 使用Log.d(TAG, message) 有点烦人。 github.com/JakeWharton/timber 让它更容易。
【解决方案2】:

我已经编写了一些扩展函数,这些函数利用了具体类型参数,以避免在所有项目的类中声明日志标记。基本思想如下sn-p所示:

inline fun <reified T> T.logi(message: String) = Log.i(T::class.java.simpleName, message)

基本上,您可以使用以下调用将某些内容记录到 logcat(W/O 外部依赖项):

logi("My log message")

你可以找到一个要点here。鉴于它们允许,gist 中声明的函数更加详细:

  • 延迟评估要注销的字符串(例如,如果需要以某种方式生成字符串)
  • 默认情况下仅在调试模式下记录
  • 当您需要从没有名称的匿名类中登录时,请使用给定的类名

【讨论】:

  • 有趣的解决方案。我不知道你可以这样定义动态类方法。
【解决方案3】:

androidKotlin 已弃用,请改用Anko

https://github.com/Kotlin/anko/wiki/Anko-Commons-%E2%80%93-Logging

class SomeActivity : Activity(), AnkoLogger {
    private fun someMethod() {
        info("London is the capital of Great Britain")
        debug(5) // .toString() method will be executed
        warn(null) // "null" will be printed
    }
}

【讨论】:

【解决方案4】:

此时(android studio 2.3.3 with Kotlin plugin),

Log.i(TAG, "Hello World")

只是工作。它将导入android.util.Log

【讨论】:

    【解决方案5】:

    您可以使用Anko 库来执行此操作。您将拥有如下代码:

    class MyActivity : Activity(), AnkoLogger {
        private fun someMethod() {
            info("This is my first app and it's awesome")
            debug(1234) 
            warn("Warning")
        }
    }
    

    或者您也可以使用这个用 Kotlin 编写的名为 StaticLog 的小型库,那么您的代码将如下所示:

    Log.info("This is an info message")
    Log.debug("This is a debug message")
    Log.warn("This is a warning message","WithACustomTag")
    Log.error("This is an error message with an additional Exception for output", "AndACustomTag", exception )
    
    Log.logLevel = LogLevel.WARN
    Log.info("This message will not be shown")\
    

    如果您想为日志记录方法定义输出格式,则第二种解决方案可能会更好:

    Log.newFormat {
        line(date("yyyy-MM-dd HH:mm:ss"), space, level, text("/"), tag, space(2), message, space(2), occurrence)
    }
    

    或使用过滤器,例如:

    Log.filterTag = "filterTag"
    Log.info("This log will be filtered out", "otherTag")
    Log.info("This log has the right tag", "filterTag")
    

    如果您已经使用过 Jake Wharton 的 Timber 日志库,请查看此项目:https://github.com/ajalt/timberkt

    另请查看:Logging in Kotlin & Android: AnkoLogger vs kotlin-logging

    希望对你有帮助

    【讨论】:

      【解决方案6】:

      例如:

      Log.i("info message")
      Log.d("debug message")
      Log.w("warning message","warningOutPut")
      Log.e("error message","AndACustomTag",exception)
      

      你也可以用 kotlin 编写它们。

      【讨论】:

        猜你喜欢
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-05-22
        • 2012-02-07
        • 2015-05-04
        • 2016-11-19
        • 2018-07-14
        • 2013-03-29
        相关资源
        最近更新 更多