R是否有任何标准的日志记录软件包?[关闭]


Answers:


52

我刚刚向loggingCRAN提交了包裹。它基于“无用的”软件包(由Brian Lee Yung Rowe设计)的较旧版本的某些部分。

您找到该logging包:

它模仿标准的pythonlogging包,但是如果决定使用它,请小心。我还尝试通过示例的方式对其进行记录,R-Forge上的软件包主页指向几个可能的使用会话

任何反馈都会引起您的兴趣!


顺便说一下,我最近添加了一个处理程序,该处理程序允许将记录发送到哨兵服务器。
mariotomo 2012年

6
该软件包不再在CRAN上。
Spacedman

@Spacedman,是的,以某种方式将其删除。一位用户注意到了这一点,并问了CRAN维护者,让我进入了抄送。我还没有解决这个问题。
mariotomo

我忘了更新电子邮件地址,该地址已恢复在线。
mariotomo

4
这似乎不再得到积极维护(2年前的最后一次提交)。但是,futile.logger程序包(请参阅Spacedman的答案)是。这就是要遵循的道路吗?
jhin

29

此刻,仍然 没有用于记录的本机库。但是在CRAN上有四个可用的:

1)日志记录
-简单且
类似于 log4j-与标准Python库类似(使用该文档作为指南)
-作者于2010年开始编写,2012
年“成熟” -被WLOGSolutions采用
-积极维护

2)futile.logger(推荐!我也在使用它)
-积极维护
-支持json错误日志记录
-与Python日志记录相似的语义以及类似log4j的语义
-可能很复杂

3)log4r-
简单且类似于log4j-
自2014年以来不再维护

4)luzlogr-超简单
-(打开,写入,关闭文件)


13
我是“日志记录”的作者和当前维护者。它看起来确实没有维护,因为我没有更新它。但是我对错误报告做出了反应,而且我乐于接受任何高质量的贡献。超过“未维护”,我将其称为“成熟”;)
mariotomo

这里还有另一个log4j端口:github.com/mfrasca/r-logging,尽管它没有近期活动
shadowtalker

最后github.com/mjkallen/rlogging口罩stop/ warning/message纳入直接登录的功能
shadowtalker

2
我发现这个教程中使用futile.logger
David Leal

2
简单但快速地应用也是github.com/smbache/loggr
user2030503 '17

15

我建议使用该futile.logger程序包,它使用格式化的输出字符串实现多个分层记录器,并且您可以采用不同的方式发送输出。它还自然地实现了每包记录器。


截至目前,它与mariotomo的logging包装相比如何?
krlmlr

1
futile偏爱C / C ++的命名方式,当我尝试使用它时,我错过了一个明显的区别记录器/处理程序,尽管它肯定会更好,但是我没有对其进行再次测试。我提供了合作(并分享了我的工作)来制作一个包装,但由于我的工作相关需求而回覆很晚,我认为这是“我正在努力,待完成后,我将与您”。这可能是主要区别:徒劳在CRAN上,登录github,r-forge,CRAN。
mariotomo

2
@mariotomo:futile.logger现在也在GitHub上:github.com/muxspace/futile.logger,并且似乎正在积极维护。确实,最好有一个日志记录程序包。
krlmlr

这是否支持在并行应用程序中记录日志,例如使用并行包?
jhin

2
@jhin您应该能够使用logR。哪个日志以db +并发方式写入。
jangorecki 2015年

9

内置(基于程序包的)功能是“警告”,“消息”,“停止”。这些功能支持多种语言。如果要登录到文件,也许可以将这些功能与“接收器”一起使用。

使用RSeek进行搜索使带有记录器功能的软件包徒劳无功。


徒劳的看起来很有趣。如果我理解正确,它还没有像Python和Java那样实现整个结构logger / handler。
mariotomo 2010年

我一直与那个徒劳的图书馆的作者联系。我们可能会提供一种候选的日志记录功能,既可以作为徒劳的一部分,也可以作为新软件包的一部分。
mariotomo 2010年

3

logging和相比,更简单的选择futile.logger

log4rcrangithub

log4r软件包旨在提供一种基于广泛仿真的log4j API的干净,轻量级的面向对象的方法来登录R。下面的示例代码显示了在实践中如何使用记录器将输出打印到简单的纯文本日志文件中。


3

我从2014年6月开始执行logR项目。最初,它是一个R进程记录器,具有异常处理功能,能够记录到csv和DBI / RODBDC / RJDBC数据库。
从2.1版本开始,我已切换为仅支持PostgreSQL作为日志的后端。
如果您能够在postgres数据库中安排单个表,则可以轻松使用logR。

上游仓库github镜像

一些logR功能:

  • 事务性日志记录:插入日志,评估表达式,更新日志
  • 登录到postgres数据库
  • 记录错误,警告,消息,中断
  • 记录流程元数据:输入/输出行,自定义元数据的灵活列表
  • 带有可选的microbenchmarkCore的高精度计时
  • 支持并行处理
  • 分层日志-记录父日志ID(2.1.5中的新功能)

它需要RPostgreSQLdata.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单元测试中可以找到更多示例。


2

我什么都不知道,因此我将在接下来的几天内发布log4j的包装器(我已经测试了一段时间)。可用时,我会通知您。


2
一个“包装”?从某种意义上说,它链接到.jar?我很好奇这种可能性!
mariotomo

1
那就对了。它使用rJava:rforge.net/rJava
Shane

看到rJava,看起来不错!但是回到包装器,如果您打算制作GPL,也可以在尚未准备好GPL时将其共享,因此我们可以同时进行处理。
mariotomo 2010年

Mariotomo:抱歉,延迟了。我会将其发布在Google代码上,以便您可以从中进行构建。在试图发布到CRAN时,文档总是使我丧命。
Shane 2010年

很晚才回复:为什么不上r-forge?我可能会花时间帮助记录和避免R CMD检查错误和警告。之后,只需单击三下鼠标,即可发布到CRAN。
mariotomo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.