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

ジェフリー・ブリーンの答えは、私を正しい方向に向けました。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が必要です。

私の最初の推測は、おそらくrJavaの一部である「log4j.properties」ファイルを探すことです。それがJavaコードを呼び出すものですよね?JAR ファイルにスタックしている場合は、「-Dlog4j.configuration=/path/to/log4j.properties」のように、rJava の Java 呼び出しでフラグを使用して抽出、変更、およびポイントすることができます。

追加した:

今rJavaのドキュメントを見て... .jinit() を自分で呼んでいますか?これは、JVM を呼び出す関数です。もしそうなら、silent試してみる価値のあるパラメータを取ります。または、上記を実行してフラグをparametersベクターに追加します。

于 2010-12-17T19:11:35.277 に答える
1

これは、典型的な Java ロギングのように見えます。Javaがすべての話をしていると思いますので、おそらくJava APIの解決策を調べる必要があります。または、 /dev/null に沈むこともできます

于 2010-12-17T18:29:42.690 に答える
1

チャターがどのように生成されているかによって異なります。私は試してみることから始めます:

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