【问题标题】:Is there any standard logging package for R? [closed]R 是否有任何标准的日志记录包? [关闭]
【发布时间】:2010-12-28 01:15:01
【问题描述】:

我正在寻找 R 的标准(如果有的话)日志记录包,以及一些示例用法?

我也没有在列出的软件包中看到任何:http://cran.r-project.org/web/packages/

【问题讨论】:

    标签: logging r


    【解决方案1】:

    目前,仍然没有用于日志记录的本机库。但在 CRAN 上有四个可用:

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

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

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

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

    【讨论】:

    • 我是“日志”的作者和当前维护者。它看起来确实没有维护,因为我没有更新它。但我对错误报告做出反应,我非常愿意接受任何高质量的贡献。不仅仅是“未维护”,我会称之为“成熟”;)
    • 这里还有另一个 log4j 端口:github.com/mfrasca/r-logging 虽然最近没有活动
    • 最后github.com/mjkallen/rlogging 掩码stop/warning/message 直接合并日志功能
    • 我发现这个tutorial 使用futile.logger
    • 简单但快速申请也是github.com/smbache/loggr
    【解决方案2】:

    我刚刚向 CRAN 提交了一个 logging 包。它基于旧版本的“无用”包的某些部分(由 Brian Lee Yung Rowe 编写)。

    你找到logging 包:

    它模仿标准的python logging 包,但如果你决定使用它,请小心。我还尝试通过示例记录它,R-Forge 上的软件包主页指向几个可能的usage sessions

    我们会感兴趣地阅读任何反馈!

    【讨论】:

    • 顺便说一句,我最近添加了一个处理程序,允许将记录发送到sentry 服务器。
    • 这个包不再在 CRAN 上。
    • @Spacedman,是的,不知何故它被删除了。一位用户注意到这一点并询问了 CRAN 维护人员,将我放入了 cc。我还没有解决这个问题。
    • 我忘记更新我的电子邮件地址,它已重新上线。
    • 这似乎不再被积极维护(最后一次提交是在 2 年前)。但是,futile.logger 包(请参阅 Spacedman 的答案)是。那么这就是要走的路吗?
    【解决方案3】:

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

    上游repogithub mirror

    logR 的一些特性:

    • 事务日志:插入日志、评估表达式、更新日志
    • 登录到 postgres 数据库
    • 记录错误、警告、消息、中断
    • 记录流程元数据:in/out nrow,自定义元数据的灵活列表
    • 高精度计时,可选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 单元测试中找到。

    【讨论】:

      【解决方案4】:

      loggingfutile.logger 相比,更简单的替代方案:

      log4r (cran, github)

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 到目前为止,它与 marioomo 的 logging 包相比如何?
        • futile 更喜欢来自 C/C++ 的命名风格,当我尝试它时,我错过了一个明显的区别记录器/处理程序,同时它肯定变得更好,但我没有再次测试它。我提供了合作(并分享了我的工作)来制作一个包,由于我的工作相关需求,回复迟到了,我认为这是“我正在努力,当我完成后我会分享结果你”。这可能是主要区别:在 CRAN 上是徒劳的,在 github、r-forge、CRAN 上登录。
        • @mariotomo:futile.logger 现在也在 GitHub 上:github.com/muxspace/futile.logger,而且似乎在积极维护。确实,最好有 one 日志记录包。
        • 这是否支持并行应用程序中的日志记录,例如使用并行包?
        • @jhin 你应该可以使用logR。哪个日志到 db + 并发写入。
        【解决方案6】:

        内置(包库)功能是“警告”、“消息”、“停止”。这些功能支持多种语言。如果你想登录到一个文件,也许你可以将这些功能与“sink”一起使用。

        使用 RSeek 进行搜索,发现带有记录器功能的包是徒劳的。

        【讨论】:

        • futile 看起来很有趣。如果我理解正确,它(还)没有像 Python 和 Java 那样实现整个结构记录器/处理程序。
        • 我一直在联系无用库的作者。我们可能会提供一个候选的日志记录功能,要么作为无效的一部分,要么作为一个新的包。
        【解决方案7】:

        我不知道,所以我打算在接下来的几天内发布 log4j 的包装器(我已经测试了一段时间了)。有空我会通知你的。

        【讨论】:

        • 一个“包装”?从某种意义上说,它链接到.jar?我很好奇这种可能性!
        • 没错。它使用 rJava:rforge.net/rJava
        • 看到了 rJava,看起来不错!但回到包装器,如果您打算将其设为 GPL,您也可以在它尚未准备好时分享它,这样我们就可以同时处理它。
        • 马里奥托莫:抱歉耽搁了。我会将它发布在 Google 代码上,以便您可以从中构建。在尝试发布到 CRAN 时,总是让我丧命的是文档。
        • 很晚才回复:为什么不在 r-forge 上?我可能会花时间帮助记录和避免 R CMD 检查错误和警告。之后,只需点击 3 次即可发布到 CRAN。
        猜你喜欢
        • 1970-01-01
        • 2010-09-17
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 2010-11-25
        • 2012-03-02
        • 2012-08-30
        相关资源
        最近更新 更多