Gibt es ein Standardprotokollierungspaket für R? [geschlossen]

73

Ich suche nach dem Standardprotokollierungspaket (falls vorhanden) für R und einer Beispielverwendung.

Ich sehe auch keine unter den aufgelisteten Paketen: http://cran.r-project.org/web/packages/

Mariotomo
quelle

Antworten:

52

Ich habe gerade ein loggingPaket bei CRAN eingereicht . Es basiert auf einigen Teilen einer älteren Version des "vergeblichen" Pakets (von Brian Lee Yung Rowe).

Sie finden das loggingPaket:

Es ahmt das Standard-Python- loggingPaket nach, aber bitte seien Sie vorsichtig, wenn Sie es verwenden möchten. Ich habe auch versucht, dies anhand eines Beispiels zu dokumentieren. Die Pakethomepage auf R-Forge verweist auf einige mögliche Verwendungssitzungen .

Jedes Feedback wird mit Interesse gelesen!

Mariotomo
quelle
Übrigens habe ich kürzlich einen Handler hinzugefügt, mit dem Datensätze an einen Wachserver gesendet werden können.
Mariotomo
6
Dieses Paket ist nicht mehr auf CRAN.
Spacedman
@Spacedman, ja, irgendwie wurde es entfernt. Ein Benutzer bemerkte dies und fragte die CRAN-Betreuer und stellte mich in den CC. Ich bin der Ausgabe noch nicht nachgegangen.
Mariotomo
Ich hatte vergessen, meine E-Mail-Adresse zu aktualisieren. Sie ist wieder online.
Mariotomo
4
Dies scheint nicht mehr aktiv aufrechterhalten zu werden (letztes Commit vor 2 Jahren). Das futile.logger-Paket (siehe Spacedmans Antwort) lautet jedoch. Das ist also der Weg, dem man folgen muss?
Jhin
29

Derzeit gibt es noch keine native Bibliothek für die Protokollierung. Auf CRAN sind jedoch vier davon verfügbar:

1) Die Protokollierung
- einfach und log4j-ähnlich
- ähnelt der Standard-Python-Bibliothek (verwendet diese Dokumentation als Richtlinie)
- der Autor hat sie 2010 gestartet, bis 2012 "ausgereift"
- von WLOGSolutions übernommen
- aktiv gepflegt

2) futile.logger (empfohlen! Ich verwende es auch)
- aktiv warten
- unterstützt die JSON-Fehlerprotokollierung
- eine ähnliche Semantik wie die Python-Protokollierung sowie eine log4j-ähnliche
- kann kompliziert sein

3) log4r
- einfach und log4j-ähnlich
- wird seit 2014 nicht mehr gewartet

4) luzlogr
- supersimple - (Datei öffnen, schreiben, schließen)

Torina
quelle
13
Ich bin der Autor und aktuelle Betreuer von "Logging". es sieht in der Tat nicht gewartet aus, weil ich es nicht aktualisiere. Aber ich reagiere auf Fehlerberichte und bin mehr als verfügbar, um qualitativ hochwertige Beiträge zu akzeptieren. mehr als "nicht gepflegt" würde ich es "reif" nennen;)
Mariotomo
Es gibt noch einen weiteren log4j-Port hier: github.com/mfrasca/r-logging, obwohl es keine aktuellen Aktivitäten gibt
shadowtalker
Und schließlich github.com/mjkallen/rlogging Masken stop/ warning/ message, um die Protokollierungsfunktionen direkt zu integrieren
shadowtalker
2
Ich habe dieses Tutorial zur Verwendung gefunden futile.logger.
David Leal
2
Einfach, aber schnell anzuwenden ist auch github.com/smbache/loggr
user2030503
15

Ich schlage das futile.loggerPaket vor, es implementiert mehrere hierarchische Logger mit formatierten Ausgabezeichenfolgen und Sie können die Ausgabe auf verschiedene Arten senden. Es implementiert natürlich auch Protokollierer pro Paket.

Spacedman
quelle
Wie ist es ab sofort mit dem loggingPaket von Mariotomo zu vergleichen ?
krlmlr
1
sinnlos bevorzugt den Namensstil aus C / C ++, als ich ihn ausprobierte, vermisste ich einen eindeutigen Logger / Handler, in der Zwischenzeit wurde er sicherlich besser, aber ich habe ihn nicht erneut getestet. Ich bot Kooperation (und teilte meine Arbeit) für die Erstellung eines Pakets an, die Antwort kam zu spät für meine arbeitsbezogenen Bedürfnisse und ich empfand es als "Ich arbeite daran, wenn ich fertig bin, werde ich das Ergebnis mit teilen." Sie". Dies ist möglicherweise der Hauptunterschied: Sinnlos ist CRAN, Anmeldung bei Github, R-Forge, CRAN.
Mariotomo
2
@mariotomo: futile.loggerist jetzt auch auf GitHub: github.com/muxspace/futile.logger , und es scheint aktiv gepflegt zu werden. In der Tat wäre es besser, ein Protokollierungspaket zu haben .
krlmlr
Unterstützt dies die Anmeldung in parallelen Anwendungen, z. B. mithilfe des parallelen Pakets?
Jhin
2
@jhin sollten Sie in der Lage sein, logR zu verwenden . Welche Protokolle zu DB + Parallelität schreiben.
Jangorecki
9

Die eingebauten (Paketbasis-) Funktionen sind "Warnung", "Nachricht", "Stopp". Diese Funktionen unterstützen mehrere Sprachen. Wenn Sie sich in einer Datei anmelden möchten, können Sie diese Funktionen möglicherweise zusammen mit "sink" verwenden.

Durch die Suche mit RSeek wurde das Paket mit einer Logger-Funktionalität vergeblich.

Karsten W.
quelle
zwecklos sieht interessant aus. Wenn ich es richtig verstanden habe, implementiert es (noch) nicht den gesamten Strukturlogger / Handler wie in Python und Java.
Mariotomo
Ich habe Kontakt mit dem Autor der vergeblichen Bibliothek aufgenommen. Möglicherweise haben wir eine Protokollierungsfunktion für Kandidaten herausgebracht, entweder als Teil eines sinnlosen oder als neues Paket.
Mariotomo
3

Eine einfachere Alternative im Vergleich zu loggingund futile.logger:

log4r( Cran , Github )

Das log4r-Paket soll einen sauberen, leichtgewichtigen objektorientierten Ansatz für die Anmeldung in R bieten, der grob auf der weit verbreiteten log4j-API basiert. Der folgende Beispielcode zeigt, wie der Logger in der Praxis zum Drucken der Ausgabe in eine einfache Klartext-Protokolldatei verwendet wird.

Talegari
quelle
3

Ich habe im Juni 2014 mit dem logR-Projekt begonnen. Ursprünglich war es ein R-Prozesslogger mit Ausnahmebehandlung, der in CSV- und DBI / RODBDC / RJDBC-Datenbanken protokollieren konnte.
Ab Version 2.1 habe ich gewechselt, um nur PostgreSQL als Backend für Protokolle zu unterstützen.
Wenn Sie in der Lage sind, eine einzelne Tabelle in der Postgres-Datenbank anzuordnen, können Sie logR problemlos verwenden.

Upstream Repo und Github Spiegel .

Einige der logR-Funktionen:

  • Transaktionsprotokollierung: Protokoll einfügen, Ausdruck auswerten, Protokoll aktualisieren
  • Protokoll in der Postgres-Datenbank
  • zeichnet Fehler, Warnungen, Meldungen und Interrupts auf
  • Protokollprozess-Metadaten: In / Out-Liste, flexible Liste benutzerdefinierter Metadaten
  • Hochpräzises Timing mit optionalem microbenchmarkCore
  • Unterstützung der Parallelverarbeitung
  • hierarchische Protokolle - Protokollierung der übergeordneten Protokoll-ID (neu in 2.1.5)

Es erfordert RPostgreSQLund data.tablePakete.

Verwendung:

# 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

Weitere Beispiele finden Sie in logR-Unit-Tests.

jangorecki
quelle
2

Mir sind keine bekannt, daher wollte ich in den nächsten Tagen einen Wrapper für log4j veröffentlichen (ich habe ihn jetzt schon eine Weile getestet). Ich werde Sie wissen lassen, wenn es verfügbar ist.

Shane
quelle
2
ein "Wrapper"? in dem Sinne, dass es mit dem .jar verknüpft ist? Ich bin gespannt auf die Möglichkeit!
Mariotomo
1
Korrekt. Es verwendet rJava: rforge.net/rJava
Shane
sah rJava, sieht gut aus! Zurück zum Wrapper: Wenn Sie vorhaben, die GPL zu erstellen, können Sie sie auch freigeben, solange sie noch nicht fertig ist, sodass wir gleichzeitig daran arbeiten können.
Mariotomo
Mariotomo: Entschuldigung für die Verzögerung. Ich werde es auf Google-Code veröffentlichen, damit Sie daraus bauen können. Es ist die Dokumentation, die mich immer umbringt, wenn ich versuche, auf CRAN zu posten.
Shane
sehr späte antwort: warum nicht auf r-forge? Ich könnte die Zeit finden, um zu helfen, R CMD-Überprüfungsfehler und Warnungen zu dokumentieren und zu vermeiden. Danach ist das Posten in CRAN nur noch 3 Klicks entfernt.
Mariotomo