81 votes

Existe-t-il un paquet standard de journalisation pour R ?

Je cherche le paquet standard (s'il y en a un) de journalisation pour R, et quelques exemples d'utilisation ?

Je n'en vois pas non plus parmi les paquets énumérés : http://cran.r-project.org/web/packages/

54voto

mariotomo Points 2076

Je viens de soumettre un logging Il est basé sur certaines parties d'une ancienne version du paquet 'futile' (par Brian Lee Yung Rowe).

Vous trouvez le logging paquet :

Il imite la méthode standard de python logging mais soyez prudent si vous décidez de l'utiliser. J'ai également essayé de le documenter par l'exemple, la page d'accueil du paquet sur R-Forge pointe vers quelques exemples possibles d'utilisation du paquet. sessions d'utilisation .

Tout commentaire sera lu avec intérêt !

0 votes

À propos, j'ai récemment ajouté un gestionnaire qui permet d'envoyer des enregistrements à un sentinelle serveur.

6 votes

Ce paquet n'est plus sur CRAN.

0 votes

@Spacedman, oui, d'une manière ou d'une autre, il a été supprimé. Un utilisateur l'a noté et a demandé aux mainteneurs du CRAN, me mettant dans le cc. Je ne me suis pas encore occupé de ce problème.

35voto

torina Points 1343

Pour l'instant, il y a encore pas de bibliothèque native pour la journalisation. Mais il y en a quatre disponibles sur CRAN :

1) journalisation
- simple & log4j-like
- ressemble à la bibliothèque standard de Python (utilise cette documentation comme ligne directrice)
- L'auteur a commencé en 2010, il est arrivé à maturité en 2012.
- adopté par WLOGSolutions
- activement maintenu

2) futile.logger (recommandé ! Je l'utilise également)
- maintenir activement
- supporte l'enregistrement des erreurs en json
- sémantique similaire à celle de l'enregistrement de Python, ainsi que de l'enregistrement de type log4j.
- peut être compliqué

3) log4r
- facile et semblable à log4j
- non entretenu depuis 2014

4) luzlogr
- supersimple - (ouvrir, écrire, fermer un fichier)

16voto

Spacedman Points 33792

Je suggère que le futile.logger il met en œuvre plusieurs enregistreurs hiérarchiques avec des chaînes de sortie formatées et vous pouvez envoyer la sortie de différentes manières. Il implémente aussi naturellement les loggers par paquet.

0 votes

Pour l'instant, comment se compare-t-il à celui de Mariotomo ? logging paquet ?

1 votes

Futile préfère le style de nommage venant de C/C++, quand j'ai essayé, j'ai manqué une distinction claire logger/handler, entre-temps ça s'est sûrement amélioré, mais je ne l'ai pas testé à nouveau. J'ai proposé ma coopération (et partagé mon travail) pour la production d'un paquet, la réponse est arrivée tardivement pour mes besoins professionnels, et je l'ai perçue comme un "je travaille dessus, quand j'aurai fini je partagerai le résultat avec vous". C'est peut-être la principale différence : futile est sur CRAN, logging sur github, r-forge, CRAN.

2 votes

@mariotomo : futile.logger est également sur GitHub maintenant : github.com/muxspace/futile.logger et il semble être entretenu activement. En effet, il serait préférable d'avoir un paquet de logging.

10voto

Karsten W. Points 5450

Les fonctions intégrées (base du paquet) sont "warning", "message", "stop". Ces fonctions supportent plusieurs langues. Si vous voulez enregistrer dans un fichier, vous pouvez utiliser ces fonctions avec "sink".

La recherche avec RSeek a fait apparaître le paquet futile avec une fonctionnalité de logger.

0 votes

futile semble intéressant. Si j'ai bien compris, il ne met pas (encore) en œuvre l'ensemble de la structure logger/handler comme dans Python et Java.

0 votes

J'ai été en contact avec l'auteur de la bibliothèque futile. Nous pourrions proposer une fonctionnalité de journalisation, soit dans le cadre de futile, soit dans un nouveau paquet.

4voto

Jan Gorecki Points 316

J'ai commencé le projet LogR en juin 2014. Initialement, il s'agissait d'un logger de processus R avec gestion des exceptions capable de loguer vers des bases de données csv et DBI/RODBDC/RJDBC.
A partir de la version 2.1, je ne supporte plus que PostgreSQL comme backend pour les logs.
Si vous êtes capable d'organiser une seule table dans une base de données postgres, vous pouvez facilement utiliser logR.

En amont repo y miroir github .

Certaines des caractéristiques de LogR :

  • journalisation transactionnelle : journal d'insertion, expression d'évaluation, journal de mise à jour
  • journal vers la base de données postgres
  • enregistre les erreurs, les avertissements, les messages, les interruptions
  • métadonnées du processus de journalisation : nrow in/out, liste flexible de métadonnées personnalisées
  • chronométrage de haute précision avec option microbenchmarkCore
  • prendre en charge le traitement parallèle
  • journaux hiérarchiques - enregistrement de l'id du journal parent (nouveau dans 2.1.5)

Il faut RPostgreSQL y data.table paquets.

Utilisation :

# install logR
install.packages("logR", repos = c("https://jangorecki.github.io/logR", "https://cran.rstudio.com"))

# attach logR
library(logR)

# setup connection, default to env vars: `POSTGRES_DB`, etc.
# if you have docker then: docker run --rm -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD=postgres --name pg-logr postgres:9.5
logR_connect()
# [1] TRUE

# create logr table
logR_schema()

# make some logging and calls

logR(1+2) # OK
#[1] 3
logR(log(-1)) # warning
#[1] NaN
f = function() stop("an error")
logR(r <- f()) # stop
#NULL
g = function(n) data.frame(a=sample(letters, n, TRUE))
logR(df <- g(4)) # out rows
#  a
#1 u
#2 c
#3 w
#4 p

# try CTRL+C / 'stop' button to interrupt
logR(Sys.sleep(15))

# wrapper to: dbReadTable(conn = getOption("logR.conn"), name = "logr")
logR_dump()
#   logr_id              logr_start          expr    status alert                logr_end      timing in_rows out_rows  mail message cond_call  cond_message
#1:       1 2016-02-08 16:35:00.148         1 + 2   success FALSE 2016-02-08 16:35:00.157 0.000049163      NA       NA FALSE      NA        NA            NA
#2:       2 2016-02-08 16:35:00.164       log(-1)   warning  TRUE 2016-02-08 16:35:00.171 0.000170801      NA       NA FALSE      NA   log(-1) NaNs produced
#3:       3 2016-02-08 16:35:00.180      r <- f()     error  TRUE 2016-02-08 16:35:00.187 0.000136896      NA       NA FALSE      NA       f()      an error
#4:       4 2016-02-08 16:35:00.197    df <- g(4)   success FALSE 2016-02-08 16:35:00.213 0.000696145      NA        4 FALSE      NA        NA            NA
#5:       5 2016-02-08 16:35:00.223 Sys.sleep(15) interrupt  TRUE 2016-02-08 16:35:05.434 5.202319000      NA       NA FALSE      NA        NA            NA

Plus d'exemples peuvent être trouvés dans les tests unitaires de logR.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X