La journalisation en Scala
Ce qui est une bonne façon de faire de l'ouverture d'un Scala application? Quelque chose qui est compatible avec le langage de la philosophie, de ne pas encombrer le code, et il est peu d'entretien et discrète. Voici une exigence de base de la liste:
- simple
- ne pas encombrer le code. Scala est idéal pour sa brièveté. Je ne veux pas la moitié de mon code pour se connecter états
- format de journal peuvent être modifiés pour s'adapter au reste de mon entreprise journaux et les logiciels de surveillance
- prend en charge les niveaux de journalisation (c'est à dire de débogage, de trace, d'erreur)
- pouvez ouvrir une session sur le disque ainsi que d'autres destinations (par exemple douille, console, etc...)
- configuration minimale, le cas échéant
- œuvres dans des contenants (c'est à dire, serveur web)
- (facultatif, mais bien d'avoir) vient soit dans le cadre de la langue ou comme un artefact maven, donc je n'ai pas de pirater mes construit à l'utiliser
Je sais que je peux utiliser la journalisation Java des solutions, mais ils ne parviennent pas à au moins deux de ce qui précède, à savoir l'encombrement et de la configuration.
Merci pour vos réponses.
Vous devez vous connecter pour publier un commentaire.
slf4j wrappers
Plus de la Scala de journalisation de bibliothèques ont été certains des wrappers autour d'une journalisation Java framework (slf4j, log4j, etc), mais à partir de Mars 2015, les survivants du journal des bibliothèques sont tous slf4j. Ces journal des bibliothèques de fournir une sorte de
log
objet auquel vous pouvez appelerinfo(...)
,debug(...)
, etc. Je ne suis pas un grand fan de slf4j, mais il semble maintenant être le prédominant de journalisation. Voici la description de SLF4J:La capacité de changer de sous-jacents journal de la bibliothèque au moment du déploiement apporte caractéristique unique à l'ensemble de slf4j de la famille de bûcherons, qui vous avez besoin d'être conscient de:
Dans un grand projet, il pourrait être pratique pour être en mesure de contrôler le comportement d'enregistrement de dépendances transitives si tout le monde s'slf4j.
Scala De Journalisation
Scala De Journalisation est écrit par Heiko Seeberger comme un successeur à son slf4s. Il utilise une macro pour élargir les appels si l'expression à éviter potentiellement coûteux journal d'appel.
Historique enregistreurs de
Avec Scala 2.10+ Envisager ScalaLogging par Typesafe. Utilise des macros pour offrir une très propre API
https://github.com/typesafehub/scala-logging
Citant leur wiki:
Après la macro a été appliqué, le code aura été transformé en le ci-dessus décrite idiome.
En outre ScalaLogging offre le trait
Logging
qui offre idéalement uneLogger
instance initialisée avec le nom de la classe mixte en:class MyClass with Logging
."com.typesafe" %% "scalalogging-slf4j" % "1.1.0"
.com.typesafe.scalalogging.LazyLogging
.À l'aide de slf4j et un wrapper est agréable, mais l'utilisation de il est construit dans l'interpolation des pauses vers le bas lorsque vous avez plus de deux valeurs à interpoler, car alors vous avez besoin pour créer un Tableau de valeurs à interpoler.
Plus Scala comme solution consiste à utiliser un thunk de clusters ou de retarder la concaténation du message d'erreur. Un bon exemple de ceci est l'Ascenseur de l'enregistreur de
Journal.scala
Slf4jLog.scala
Qui ressemble à ceci:
Remarque que le msg est un appel par nom et ne sera pas évaluée à moins que isTraceEnabled est vrai, alors il n'y a pas de coût de production d'une belle chaîne de message. Cela fonctionne autour de la slf4j de l'interpolation mécanisme qui nécessite l'analyse de la message d'erreur. Avec ce modèle, vous pouvez interpoler un nombre quelconque de valeurs dans le message d'erreur.
Si vous avez un trait de caractère qui mélange ce Log4JLogger dans votre classe, vous pouvez faire
au lieu de
Ne pas utiliser Logula
En fait, j'ai suivi la recommandation de Eugene et il a essayé et a découvert qu'il est maladroit de configuration et est soumis à des bugs, qui ne se fixe (tels que cette une). Il n'a pas l'air d'être bien entretenu et il ne prend pas en charge Scala 2.10.
Utilisation slf4s + slf4j-simple
Avantages clés:
-Dorg.slf4j.simplelogger.defaultlog=trace
à l'exécution de la commande ou de coder en dur dans le script:System.setProperty("org.slf4j.simplelogger.defaultlog", "trace")
. Pas besoin de gérer trash fichiers de config!Run/Debug Configurations
et ajouter-Dorg.slf4j.simplelogger.defaultlog=trace
àVM options
.Voici ce que vous devez être en cours d'exécution avec Maven:
C'est la manière dont j'ai Scala De Journalisation de travail pour moi:
Mettre ceci dans votre
build.sbt
:Puis, après avoir fait une
sbt update
, ce imprime un sympathique message de journal:Si vous utilisez Jouer, vous pouvez bien sûr simplement
import play.api.Logger
pour l'écriture des messages de journal:Logger.debug("Hi")
.Voir le docs pour plus d'info.
log4j.properties
à l'intérieur du projet dossier de ressources.J'ai tiré un peu de travail forme la
Logging
trait descalax
, et créé un trait de caractère qui a également intégré unMessageFormat-based
bibliothèque.Puis des trucs genre de ressemble à ceci:
Nous aimons l'approche jusqu'à présent.
Mise en œuvre:
- Je utiliser SLF4J + Logback classique et de l'appliquer comme ceci:
Alors vous pouvez l'utiliser selon ce qui convient à votre style mieux:
mais cette approche des cours utilise un enregistreur instance par instance de classe.
Writer
,Monoid
et unMonad
mise en œuvre.Vous devriez jeter un oeil à la scalax de la bibliothèque :
http://scalax.scalaforge.org/
Dans cette bibliothèque, il y a un enregistrement de trait, à l'aide de sl4j comme backend.
En utilisant cette caractéristique, vous pouvez vous connecter très facilement (il suffit d'utiliser l'enregistreur de terrain
dans la classe héritant de la caractéristique).
N'avez pas encore essayé, mais Configgy semble prometteur à la fois la configuration et l'exploitation forestière:
http://github.com/robey/configgy/tree/master
Après l'utilisation de slf4s et logula pendant un certain temps, j'ai écrit
loglady
, une journalisation simple trait d'emballage slf4j.Il propose une API similaire à celle de Python de journalisation de la bibliothèque, ce qui rend la plupart des cas (chaîne de base, une simple mise en forme) trivial et évite de mise en forme standard.
http://github.com/dln/loglady/
Je trouve très pratique à l'aide d'une sorte de java enregistreur, sl4j par exemple, avec un simple scala wrapper, qui m'apporte une telle syntaxe
À mon avis très utile mixin de java prouvé la journalisation des cadres et de la scala, à la fantaisie de la syntaxe.
#! "info message"
ne compile pas...Rapide et facile des documents.
Scala 2.10 et plus:
Et de construire.sbt:
Scala 2.11+ et plus récent:
Et de construire.sbt: