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