Hibernateログをコマンドボックスコンソールにリダイレクトする
8920 ワード
私の最後のブログ記事では、Hibernateログレベルをlog 4 jで調整する方法を取り上げました.
マイケルボーン
@ michaelbornstricme私
もう一つの速いブログ柱、Lucee Hibernateの同時修正修正例外を解決することについてのこの時間.フィックスのために!💪 michaelborn.me/entry/resolvin…
午後12時00分- 2021年8月20日
これによって、あるデータベースエンティティを
開始するには、Hibernateロガーをつかむためにlog 4 j“logger”オブジェクトが必要です.
ログレベルを設定することができます
Loggerのログ出力を設定するには、Logeeの既存のlog 4 j appendersのいずれかを再利用することができます.これは基本的にすべてを渡すためにルーシーでpiggybacksです
このメソッドが適切になったら、Commandboxから利用できます.
マイケルボーン
@ michaelbornstricme私
もう一つの速いブログ柱、Lucee Hibernateの同時修正修正例外を解決することについてのこの時間.フィックスのために!💪 michaelborn.me/entry/resolvin…
午後12時00分- 2021年8月20日
これによって、あるデータベースエンティティを
DEBUG
ロガー、しかし、それはまた、log 4 j構成との更なるインタラクションのために我々をセットアップします.今週は、Hibernateロガーによって発行されたすべてのlog 4 jメッセージを取り出し、コンソールにリダイレクトします.このコンソールは実行時に表示されるものですbox server log --follow
コマンドボックスで.Not sure what Log4j is? and I'll happily cover basic Log4j usage in a blog post.
開始するには、Hibernateロガーをつかむためにlog 4 j“logger”オブジェクトが必要です.
var Logger = createObject( "java", "org.apache.log4j.Logger" );
var hibernateLog = Logger.getLogger( "org.hibernate" );
我々log
変数には、ルートHibernateロガーへのリファレンスが含まれます.Hibernateのどんなクラスからも放出されるすべてのログメッセージは、このロガーを通過します.ログレベルを設定することができます
WARN
or DEBUG
:var level = createObject( "java", "org.apache.log4j.Level" );
hibernateLog.setLevel( level.DEBUG );
注意:DEBUG
ログレベルでエンティティの問題が発生する可能性がありますResolving Concurrent Exceptions in Hibernate Logger .Loggerのログ出力を設定するには、Logeeの既存のlog 4 j appendersのいずれかを再利用することができます.これは基本的にすべてを渡すためにルーシーでpiggybacksです
org.hibernate
ログを“コンソール”の添付ファイルをSystem.Out
.var printWriter = getPageContext().getConfig().getOutWriter();
var layout = createObject( "java", "lucee.commons.io.log.log4j.layout.ClassicLayout");
var consoleAppender = createObject( "java", "lucee.commons.io.log.log4j.appender.ConsoleAppender" ).init( printWriter, layout );
最後に、log 4 jを使用して、すべてのHibernateログにLuceeのコンソールアペンダを使用できます.hibernateLog.addAppender( consoleAppender );
すべてをまとめてください.public function setHibernateLogging(){
/**
* Resolves Hibernate ConcurrentModificationException when flushing an entity save with one-to-many relationships.
*
* @see https://access.redhat.com/solutions/29774
* @see https://michaelborn.me/entry/resolving-concurrent-exceptions-in-hibernate-logger
*/
var Logger = createObject( "java", "org.apache.log4j.Logger" );
var level = createObject( "java", "org.apache.log4j.Level" );
var hibernateLog = Logger.getLogger( "org.hibernate" );
hibernateLog.setLevel( level.WARN );
/**
* Redirect all Hibernate logs to system.out
*/
if ( listFindNoCase( "Lucee", server.coldfusion.productname ) ) {
var printWriter = getPageContext().getConfig().getOutWriter();
var layout = createObject( "java", "lucee.commons.io.log.log4j.layout.ClassicLayout");
var consoleAppender = createObject( "java", "lucee.commons.io.log.log4j.appender.ConsoleAppender" ).init( printWriter, layout );
hibernateLog.addAppender( consoleAppender );
}
}
このメソッドはApplication.cfc
アプリケーションのライフサイクルの初期.このメソッドがページリクエストまたはonRequestStart()
, Hibernateは既に初期化されており、貴重な出力をたくさん失っています.このメソッドが適切になったら、Commandboxから利用できます.
box server log --follow
これは、より良いログの詳細を拾うために素晴らしい、と言うのは、無効なORMエンティティです.Reference
この問題について(Hibernateログをコマンドボックスコンソールにリダイレクトする), 我々は、より多くの情報をここで見つけました https://dev.to/mikeborn/redirecting-hibernate-logs-to-the-commandbox-console-1l7pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol