同期ロギングは、ブロックされる可能性があるため、大きなパフォーマンス上のペナルティを招きます。非同期ロギングを行うスタンドアロンのRubyライブラリはありますか(log4rはそう思わない)?標準ライブラリロガーを非同期でログに変更できますか?私はlog4jのAsyncAppenderのようなものを探していますが、できるだけ多くの作業をバックグラウンドスレッドに移行するためにRubyのコードブロックを使用する実装が望ましいです。Ruby用の非同期ロギングライブラリはありますか?
答えて
あなたはこれを何かのために使うことができます:
require "test/unit"
class ReturnValues < Test::Unit::TestCase
def do_it
5 + 7
end
async :do_it
def test_simple
assert_equal 10, do_it - 2
end
end
優れています。 Rubyの表現力は常に私を驚かせる。あなたはJRubyを使って言いましたので、本当のスレッドを持っている可能性がありますが、多くの動的なルビーの魔法も使用していますので、JRubyはすべての動的なトリックにどれくらいうまく対処していますか? JRubyとMRIのベンチマークを並べて見るのはすばらしいことです。 – davidk01
ニースコード!ファイバー/イベントマシンを使うほうが良いかもしれません。スレッドは仕事をするでしょうが、MRI(そしてJRubyの将来)ではより重く、管理と同期が必要です。私はすでにあなたが望むものに近いかもしれないイベントマシンのファイルストリーマーがあると思います:http://stackoverflow.com/questions/2749503/what-is-the-best-way-to-read-files-in-an -eventmachine-based-app –
ものではありません個人的な経験:
Swiftcore Analoggerはに をログに記録するメッセージを送信するための高速非同期Rubyプログラムのためのロギングシステム だけでなく、クライアントライブラリを実装アナロジープロセス。
Analoggerは、複数のソースからのログを受け入れ、複数のログ宛先を持つことができます( )。現在、ファイル、STDOUT、または STDERRへのロギングがサポートされています。将来のリビジョンでは、 データベース宛先へのロギングもサポートされる可能性があります。
AnaloggerはEMが クライアントライブラリを使用していないが、ネットワーク通信のためのフレームワークを提供するために、EventMachine(http://rubyforge.org/projects/eventmachine) に依存します。
require 'thread' require 'singleton' require 'delegate' require 'monitor' class Async include Singleton def initialize @queue = Queue.new Thread.new { loop { @queue.pop.call } } end def run(&blk) @queue.push blk end end class Work < Delegator include MonitorMixin def initialize(&work) super work; @work, @done, @lock = work, false, new_cond end def calc synchronize { @result, @done = @work.call, true; @lock.signal } end def __getobj__ synchronize { @lock.wait_while { [email protected] } } @result end end Module.class.class_exec { def async(*method_names) method_names.each do |method_name| original_method = instance_method(method_name) define_method(method_name) do |*args,&blk| work = Work.new { original_method.bind(self).call(*args,&blk) } Async.instance.run { work.calc } return work end end end }
そして、私のログの例:戻り値として
require 'Logger' class Logger async :debug end log = Logger.new STDOUT log.debug "heloo"
を、私はあなたが本当にあなた自身の質問に答えるべきではありませんが、すべてがRubyで使いやすいようです知っ
これは別のプロセスで非同期ロギングを完全に行うと思われます - 私はプロセス内のロギングを(別のスレッドで)好むでしょう –
すでに
ログメッセージをディスクに別のスレッドで書きたいので、IOブロックがメインスレッドの処理速度を落とさないようにします。 –
アウトDunderスレッドセーフされたLoggerクラスに組み込まれて、私はただの本以上が
- 1. Rubyヘルパーの非同期Ajax
- 2. 非同期Ruby SNMPライブラリ
- 3. ASP.NET 4の非同期コントローラは意味がありますか?
- 4. Webpackローダーに非同期のメリットはありますか?
- 5. Linuxにsendfileの非同期バージョンはありますか?
- 6. <image>タグの非同期リクエストはありますか?
- 7. 非同期I/OベースのAws Javaクライアントはありますか?
- 8. 非同期メソッド内のQueueClient.OnMessageの使用は意味がありますか?
- 9. WebResponseをまだ非同期に呼び出すMVC非同期コントローラはありますか?
- 10. System.Net.WebClient - 非同期を使用する必要があります
- 11. MS Office/VBA Wordオブジェクトモデル用の非同期APIはありますか?
- 12. mallocは非同期ではありませんか?
- 13. この非同期アクター初期化イディオムの名前はありますか?
- 14. 非同期更新を使用するHTTPキャッシングプロキシはありますか?
- 15. 非同期コードベースを使用するJavaScript ES6クラスはありますか?
- 16. メインキューに非同期はありませんか?
- 17. 「非同期キーワード非同期」関数を「非同期キーワード非同期」関数に変換できますか?
- 18. Android NDKに非同期ファイルI/Oがありますか?
- 19. 非同期メソッドを待つ必要がありますか?
- 20. 非同期メソッドを待つ必要がありますか?
- 21. @AsyncはGroovyでは非同期ではありません
- 22. バックボーンのトリガー()は同期または非同期ですか?
- 23. AtomicInteger同期プリミティブはありますか?
- 24. 非同期性、スレッド化、node.js、Ruby on Rails
- 25. ダーツの非同期は本当に非同期ですか?
- 26. memorystreamsで非同期I/Oを使用する必要がありますか?
- 27. 非同期キットとasync.seriesは機能ではありません
- 28. Laravel - Mail :: sendは非同期ではありません
- 29. Windows Phoneアプリケーションの同期化などの非同期操作を実行する方法はありますか?
- 30. 非同期に非同期デリゲートを呼び出しますか?
は 'ruby'通訳されている。これらの日はまだかなりときハムは神経質を行い6ヶ月前にこの宝石を作成し
https://github.com/fonsan/dunderそれはマルチスレッドコードになる?基本的なシングルスレッドネイティブのRubyコードの巨大なインタプリタロックはまだありますか?あなたがIOを非同期に強制するために、[eventmachine](http://rubyeventmachine.com/)のようなフレームワークを既に使用していない限り、実際にはログを非同期にすることによるメリットはありません。 – sarnold
私は通常JRubyを使用していますので、本当のJavaスレッドを持っています(私は思う)。 –
ooh;)これはJRubyの使用を検討する魅力的な理由です。ありがとう。 – sarnold