R:让STFU获得繁琐的Java流程

时间:2010-12-17 18:19:03

标签: java r rjava

我正在使用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 个答案:

答案 0 :(得分:4)

Jeffrey Breen's回答指出了我正确的方向。我在log4j上做了一些挖掘并发现,thanks to the AWS forum,Java AWS API没有设置log4j,但它真的很容易添加。我所要做的就是将文件log4j-1.2.16.jar添加到我的类路径中。然后我使用the examples in the API docs创建了一个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文件位于第三方/目录中,您可以在类路径中看到它。

答案 1 :(得分: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文档......你自己在调用.jinit()吗?这是调用JVM的函数。如果是这样,它需要silent参数值得一试。或者,执行上述操作并将标记添加到parameters向量。

答案 2 :(得分:1)

这取决于如何生成聊天。我首先尝试:

suppressMessages({
  result <- uploadS3File(clusterObject$s3TempDir, streamFile)
  # other chatter-generating code
})

答案 3 :(得分:1)

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