web-dev-qa-db-fra.com

Kotlin Android imprimer sur console

Je dois imprimer des str sur console (Android Studio) avec Kotlin . J'ai essayé le:

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

méthodes. Mais cela semble ne fonctionner que sur Java . Que dois-je utiliser pour imprimer avec Kotlin?

18
Pavel Bredelev

Il y a deux façons.

Vous pouvez utiliser Log.d("TAG", "message"); par exemple, mais vous devez d'abord importer Log.

import Android.util.Log

{...}

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

{...}

Source: https://developer.Android.com/reference/Android/util/Log.html

Vous pouvez également utiliser les fonctions print et println de Kotlin.

Exemple:

{...}

print("message")

println("other message")

{...}

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

28
Ramalus

androidKotlin est obsolète et utilisez Anko à la place.

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
Ye Lin Aung

J'ai écrit certaines fonctions d'extension qui utilisent des paramètres de type réifiés afin d'éviter de traiter les déclarations de balises de journal dans toutes les classes du projet. L'idée de base est illustrée par l'extrait suivant:

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

Fondamentalement, vous pouvez enregistrer quelque chose dans logcat avec l'appel suivant (dépendances externes W/O):

logi("My log message")

Vous pouvez trouver un Gist ici . Les fonctions déclarées dans le Gist sont un peu plus élaborées dans la mesure où elles permettent:

  • Évaluation paresseuse de la chaîne à déconnecter (par exemple, si la chaîne doit être générée d'une manière ou d'une autre) 
  • Enregistrer uniquement en mode débogage par défaut 
  • Utilisez un nom de classe donné lorsque vous devez vous connecter depuis une classe anonyme sans nom.
3
Paolo

Vous pouvez utiliser Anko library pour le faire. Vous auriez un code comme ci-dessous:

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

ou vous pouvez aussi utiliser ce petit écrit dans la bibliothèque Kotlin appelé StaticLog alors votre code ressemblerait à ceci:

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")\

La deuxième solution pourrait être préférable si vous souhaitez définir un format de sortie pour la méthode de journalisation, tel que:

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

ou utilisez des filtres, par exemple:

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

Si vous avez déjà utilisé la bibliothèque de journalisation Timber de Jake Wharton, vérifiez ce projet: https://github.com/ajalt/timberkt .

Vérifiez également: Enregistrement dans Kotlin et Android: AnkoLogger vs kotlin-logging

J'espère que ça va aider

1
piotrek1543

à ce moment (studio Android 2.3.3 avec le plugin kotlin), Log.i (TAG, "Hello World") fonctionne. Il importera Android.util.Log 

1
Pedro Gonzalez