【发布时间】:2010-12-28 01:15:01
【问题描述】:
【问题讨论】:
【问题讨论】:
目前,仍然没有用于日志记录的本机库。但在 CRAN 上有四个可用:
1) 日志记录
- 简单且类似于 log4j
- 类似于标准 Python 库(使用该文档作为指南)
- 作者从 2010 年开始,到 2012 年“成熟”
- 被 WLOGSolutions 采用
- 积极维护
2) futile.logger(推荐!我也在用)
- 积极维护
- 支持 json 错误记录
- 与 Python 的日志记录以及类似 log4j 的语义相似
- 可能很复杂
3) log4r
- 简单且类似于 log4j
- 自 2014 年以来未维护
4) luzlogr
- 超级简单 - (打开、写入、关闭文件)
【讨论】:
stop/warning/message 直接合并日志功能
futile.logger。
我刚刚向 CRAN 提交了一个 logging 包。它基于旧版本的“无用”包的某些部分(由 Brian Lee Yung Rowe 编写)。
你找到logging 包:
它模仿标准的python logging 包,但如果你决定使用它,请小心。我还尝试通过示例记录它,R-Forge 上的软件包主页指向几个可能的usage sessions。
我们会感兴趣地阅读任何反馈!
【讨论】:
我在 2014 年 6 月开始了 logR 项目。最初它是一个具有异常处理能力的 R 进程记录器,能够记录到 csv 和 DBI/RODBDC/RJDBC 数据库。
从 2.1 版本开始,我已切换为仅支持 PostgreSQL 作为日志的后端。
如果您能够在 postgres 数据库中安排单个表,那么您可以轻松使用 logR。
上游repo 和github mirror。
logR 的一些特性:
它需要RPostgreSQL 和data.table 包。
用法:
# 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
更多示例可以在 logR 单元测试中找到。
【讨论】:
我建议使用futile.logger 包,它实现了多个带有格式化输出字符串的分层记录器,您可以通过不同的方式发送输出。它还自然地实现了每个包的记录器。
【讨论】:
logging 包相比如何?
futile.logger 现在也在 GitHub 上:github.com/muxspace/futile.logger,而且似乎在积极维护。确实,最好有 one 日志记录包。
内置(包库)功能是“警告”、“消息”、“停止”。这些功能支持多种语言。如果你想登录到一个文件,也许你可以将这些功能与“sink”一起使用。
使用 RSeek 进行搜索,发现带有记录器功能的包是徒劳的。
【讨论】:
我不知道,所以我打算在接下来的几天内发布 log4j 的包装器(我已经测试了一段时间了)。有空我会通知你的。
【讨论】: