4

我正在使用 rJava 从 R 内部与 Amazon Web Services Java API 对话。经过一些最初的痛苦之后,我让它工作了。但是 API 非常健谈,并且向 R 反馈了大量非常适合调试的信息,但是现在我的代码可以正常工作,我想让这些信息喋喋不休。我将如何摆脱这种喋喋不休?我什至不知道在哪里看。API?rJava?R中的开关?

在哪里寻找任何帮助将不胜感激。以下是信息聊天的示例:

R> result <- uploadS3File(clusterObject$s3TempDir, streamFile)
Dec 17, 2010 12:12:52 PM com.amazonaws.http.HttpClient execute
INFO: Sending Request: PUT https://rtmphgdfkoughcboh8kl.s3.amazonaws.com /stream.txt Headers: (Authorization: AWS AKIAIC2FRTLFVNIOTMAQ:E++Z54SQsgoAntZ7JAd6aWJ2ZVs=, Date: Fri, 17 Dec 2010 18:12:52 GMT, Content-Length: 255579, Content-MD5: pMFNOWPJswXpAEULjfOclw==, Content-Type: text/plain, ) 
Dec 17, 2010 12:12:53 PM com.amazonaws.http.HttpClient handleResponse
INFO: Received successful response: 200, AWS Request ID: FC4113F003FCF631
R> 
4

4 回答 4

4

Jeffrey Breen 的回答为我指明了正确的方向。我在 log4j 上进行了一些挖掘,并发现,感谢 AWS 论坛,Java AWS API 没有附带 log4j 设置,但它真的很容易添加。我所要做的就是将文件添加log4j-1.2.16.jar到我的类路径中。然后我使用API 文档中的示例创建了一个 log4J.properties 文件。然后,我将我的 log4j.properties 文件所在的目录添加到了我的类路径中,它工作了!

所以我的 .onLoad() 函数的第一部分看起来像这样:

.onLoad <- function(lib, pkg) {
    pathToSdk <- paste(system.file(package = "segue") , "/aws-java-sdk/", sep="")

    jarPaths <- c(paste(pathToSdk, "lib/aws-java-sdk-1.1.0.jar", sep=""),
                  paste(pathToSdk, "third-party/commons-logging-1.1.1/commons-logging-1.1.1.jar", sep=""),
                  paste(pathToSdk, "third-party/commons-httpclient-3.0.1/commons-httpclient-3.0.1.jar", sep=""),
                  paste(pathToSdk, "third-party/commons-codec-1.3/commons-codec-1.3.jar", sep=""),
                  paste(pathToSdk, "third-party/log4j-1.2.16.jar", sep=""),
                  paste(pathToSdk, "third-party/", sep="")
                  )
    .jpackage(pkg, morePaths=jarPaths)

  ## other stuff edited out

 }

我的 log4j.properties 文件中有这个:

log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c -  %m%n

我的 log4j.properties 文件位于您可以看到的类路径中的第三方/目录中。

于 2010-12-17T22:57:58.327 回答
2

我同意 Romain 的观点:它们对我来说就像标准的 log4j 消息。

记录器可能被分配级别。http://logging.apache.org/log4j/1.2/manual.html列出了可能的日志记录级别:TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL。

看起来您至少在​​ INFO 上运行,并且您可能想要 ERROR 或 FATAL。

我的第一个猜测是四处寻找“log4j.properties”文件,它可能是 rJava 的一部分,因为这就是调用 Java 代码的原因,对吧?如果它卡在 JAR 文件中,您可能需要提取、修改和指向 rJava 的 java 调用上的标志,例如“-Dlog4j.configuration=/path/to/log4j.properties”

添加:

现在查看 rJava 文档...您自己调用 .jiit() 吗?这就是调用 JVM 的函数。如果是这样,它需要一个silent值得一试的参数。或者,执行上述操作并将标志添加到parameters向量中。

于 2010-12-17T19:11:35.277 回答
1

这取决于聊天是如何产生的。我会先尝试:

suppressMessages({
  result <- uploadS3File(clusterObject$s3TempDir, streamFile)
  # other chatter-generating code
})
于 2010-12-17T18:24:48.633 回答
1

这看起来像典型的 java 日志记录。我猜想 java 做了所有的谈话,所以你可能应该在 java api 中寻找一个解决方案。或者也许你可以沉入 /dev/null

于 2010-12-17T18:29:42.690 回答