web-dev-qa-db-ja.com

多言語ロギングのアプローチ

Javaフロントエンドでパフォーマンスが非常に重要なFortranライブラリを使用してデスクトップアプリを構築しています。最近、Java =およびFortranへ(以下を参照)

間もなく、SCALA(akka.ioまたはJPPFの分散コンピューティングシステムを使用)にモジュールが追加される可能性があります。

正しく、統合され、適切にフォーマットされたログを確保するために何ができるのか疑問に思っています。現在、かなり広範囲にわたるJavaフロントエンドは_Java.util.logging_(JUL)を使用しています。多くの方も扱ったことがあると思いますが、ロガー構成のブートストラップはすでに多くなっています。私が望むよりも複雑なプロセスであり、自動テストが欠けています。

私たちのFortranバイナリは、Intel Fortranライブラリのデフォルトの動作に従って、コードがデプロイされたときに単に忘れられてしまうものを標準出力につぶやくことがあります。 JUL logger.log()呼び出しとほぼ同じ形式で表示されるようにしたいと思います。

非JULおよび/または非JVMコードによって発行された警告/エラーをキャプチャし、それを適切にフォーマットされた1つのファイルにまとめるために、ポリグロットロギングをどのように回避しますか。

re:Fortran?本当に!?

  • それは死んだプログラミング言語です!あなたは正気ではありません!!
    • fortranの最新バージョンは2015年で、Intelは2018年に新しいバージョンをリリースします。Cバインディングの性質により、ネイティブコードと同じくらい簡単にJNA/JNIにバインドします。
  • しかし、なぜパフォーマンスが必要なのか、時期尚早の最適化はすべての悪の根源です!
    • よく知っていますが、はい、Javaコードの最適化にかなりの時間を費やし、可能な限り最速のライブラリを追跡した後、いくつかの基本的な線形代数はJava fortranよりも、一部の操作は単にIntelのMKLを介してのみ利用可能です
3
Groostav

私は特にJULに慣れていませんが、ArjenMarkusのflibsパッケージのm_multilogモジュールを使用してかなりの成功を収めています http://flibs.sourceforge.net/m_multilog.html I syslogスタイルの重大度クラスを使用するように変更しました。結果は、タイムスタンプ、重大度クラス、およびログメッセージ本文に解析するのがかなり簡単です。

レイテンシーが大きな問題ではない場合は、ファイルにログインして定期的にメインのログ処理システムに読み込むのがおそらく最も簡単です。そうでない場合、「ライブ」ロギングが必要な場合は、を介して外部ロギングライブラリへのリンクがスタックする可能性があります。 iso_c_bindingsメカニズム。

いずれにせよ、flibsはBSDライセンスの形でリリースされていると思います。 m_multilogモジュールをクローバーして、ログプロセッサが理解できるログを書き込むことができるはずです。 Fortran用の標準ライブラリが事実上ないことを吸います。ロギング、CSV/JSON/XMLサポート、入力処理用の正規表現ライブラリなどの基本的な機能を実際に使用できます。

1
arclight