2016-12-21 1 views
0

ロギングに使用するベストプラクティスと混同しています。私はSLF4JがアプリケーションとロギングAPIとの間の結合を取り除いていることを発見しましたので、アクターのロギングを使用すると、アプリケーションに密接に結合されませんか?また、githubコードが多数チェックされ、 actorロギングであり、org.SLF4J.LoggerFactoryロギングではありません。どうして?私は SLF4jとログバックによるアクターログの使用とorg.slf4jを使用したSLF4Jとログバックを使用したログの比較

Another Good read

stack Overflow

SACHA'S BLOG OF PROGRAMMATICALNESS

を呼ば

いくつかのリンクは - >

答えて

0

だから我々は、新しい世界にいる、事前に最後の答えに

感謝をチェック私たちは反応的かつ非阻止的であるが、その前にいくつかの情報が必要な世界です。

Akkaは一般的なロギングライブラリ(log4j、logback)のファサードであるSLF4j apiをロギングに使用していますが、アクターをブロックしないためにはこの非同期をすべて行います。

ので:ログは次のように定義された俳優で

log.info("Received msg: {} use thread {} to dispatch", message, Thread.currentThread().getName()); 

LoggingAdapter log = Logging.getLogger(getContext().system(), this); 

ロギングアクターにログメッセージを送信し、IO操作は、実際にこの専門の俳優によって行われます。

Log4jまたはLogbackは、実際のロギングの実装のみです。そのため、プロジェクト内にifのいずれかを設定する必要があります。このhttp://doc.akka.io/docs/akka/current/java/logging.htmlの詳細 -

log4j.appender.file.layout.ConversionPattern=[%d,%p] [%X{sourceThread}] [%c{1}.%M:%L] %m%n 

%のX {sourceThread}は実際にあなたのログメッセージは、元のアクターとしない(%tで記録さ)ロギング・アクターの内部IOオペレーションを実行するスレッドによって発行された実行スレッドを与えます

私のアドバイスは、非同期操作を使用しているので、log4jの2を使用することで、ログ俳優の後ろにスレッドをブロックすることはありません - より多くのログの使用上の情報についてhttps://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

+0

おかげでlog4jの2パフォーマンスについて。私の質問は、私たちはロギングを実装するSLF4j APIを持っていましたが、なぜakkaロギングを使用し、SLF4jの組み込みメソッドをロギングに使用しないのでしょうか? –

+0

私が説明したように、IO操作でアクターをブロックしないようにするために、アクターとスループットのパフォーマンスを向上させるためにアクター内でakkaロギングを使用することが望ましい理由から、実際のロギングはSLF4jによって出荷されます。 –

+0

驚くばかり!それを得ました。ありがとう –

関連する問題