pom.xml
< 依存> < groupIdを> p6spy </ groupIdを> < たartifactId > p6spy </ たartifactId > < バージョン> 3.8.1 </ バージョン> </ 依存関係>
application.ymlデータベース接続のmysqlを変更
春: データソース: ドライバー・クラス名:com.p6spy.engine.spy.P6SpyDriverの タイプ:com.zaxxer.hikari.HikariDataSourceの URLます。jdbc:p6spyます。mysql:// XXXX:?3306 / jw_user useUnicode =真&characterEncoding = UTF -8 ユーザ名:XXXX パスワード:XXXX
spy.properties
2つのパスがファイル(以下、ファイル・コード)を変更する必要があることに留意すべきです
アペンダ= com.example.mybatis_3_5.p6spy.P6spyLogger
logMessageFormat = com.example.mybatis_3_5.p6spy.P6spyLogFormat
################################################## ############### #P6Spyオプションファイル#の #は、詳細な手順については、マニュアルを参照してください。# #http://p6spy.github.io/p6spy/2.0/configandusage.html# #### ################################################## ########### ####################################### ########################## #モジュール# ## #モジュールのリストは、P6Spyのモジュラー機能を適応させます。# 記載されている#モジュールのみがアクティブになります。# #(デフォルトはcom.p6spy.engine.logging.P6LogFactoryと#です #com.p6spy.engine.spy.P6SpyFactory)#の #は、コアモジュール(P6SpyFactory)が#にすることはできませんのでご注意ください 無効に#。#の 他の特性とは異なり#、#1上の変化の活性化 位これは、リロードを必要とします。# ################################################# ################ #modulelist = com.p6spy.engine.spy.P6SpyFactory、com.p6spy.engine.logging.P6LogFactory、com.p6spy.engine.outage.P6OutageFactory ## ################################################## ############ #CORE(P6SPY)のプロパティ# ###################################### ########################## #JDBCドライバのカンマ区切りリストをロードして登録します。 #(デフォルトは空です) #1 #注:でP6Spyを使用する場合には、通常のみ必要とされる JNDIデータ・ソースまたはで#アプリケーションサーバ環境 JDBCドライバを使用して#それは、JDBC 4.0 APIを実装していません #(特に自動登録を)。 driverlist =はcom.mysql.jdbc.Driver #ステートメントあたりの洗浄のための #(デフォルトはfalse) #autoflush =偽 #はJavaのSimpleDateFormatのルーチンを使用して、日付の書式を設定します。 プロパティが1970年1月1日(UNIX時間)以来、ミリ秒単位に設定されていない場合には#(デフォルトは空です)が使用され HHはDATEFORMAT = YYYY-MM-DD:MM:SSの #はログに記録され、すべての文のスタックトレースを出力します #のスタックトレースは=偽 #スタックトレース= trueの場合、印刷にスタックトレースを指定する #stacktraceclass = #プロパティファイルを再ロードする必要があるかどうかを判断する に注意し#てください:すべての以前に設定し忘れ手段リロード #設定を- (実行時に設定しても、それらをJMX経由) #と開始きれいなテーブルと #(デフォルトはfalse) #1 reloadproperties =偽 位秒で再ロードする頻度を決定し ます(デフォルトは60です)# #reloadpropertiesinterval = 60 #ログに使用するアペンダを指定します 。#注意:リロードする手段はすべて忘れます以前に設定し (でも、それらは実行時に設定する- JMX経由)#設定を #ときれいなテーブルで始まります #(コンフィギュレーションファイルから読み取り専用プロパティ) #(デフォルトはcom.p6spy.engine.spy.appender.FileLoggerです) #アペンダ= com.p6spy.engine.spy.appender.Slf4JLogger #アペンダ= com.p6spy.engine.spy.appender.StdoutLogger #アペンダ= com.p6spy.engine.spy.appender.FileLogger #自定义SQL的格式化输出 アペンダ= com.example.mybatis_3_5.p6spy.P6spyLogger 使用するログファイルの#名前、Windowsユーザが前方を使用するようにしてください注意して彼らのパス名(E:/test/spy.log)にスラッシュ com.p6spy.engineに使用#( .spy.appender.FileLoggerのみ) #(デフォルトはspy.logある) #logfile = spy.log 位p6spyログファイルに追加します。これがfalseに設定されている場合 #ログファイルが毎回切り捨てられます。(ファイルロガーのみ) #(デフォルトはtrue) #はappend =真 ログメッセージをフォーマットするために使用する#クラス(デフォルトは次のとおりです。com.p6spy.engine.spy.appender.SingleLineFormat) logMessageFormat = com.example.mybatis_3_5.p6spy.P6spyLogFormat #logMessageFormat = com.p6spy.engine.spy.appender.MultiLineFormat #日付/時刻のロギングに使用されるフォーマット/ ...(java.text.SimpleDateFormatのと互換性がなければならない) #(デフォルトはDD-MMM-yyです) databaseDialectDateFormat = YYYY-MM-DD HH:MM:SSの # JMX経由でオプションを公開するかどうか #(デフォルトはtrueです) #1 JMX =真 #JMX経由のオプションをさらす場合(オプション参照:JMX)は、接頭辞は何を使用する必要がありますか? com.p6spy(:構築#JMX命名パターンである< jmxPrefix >?:名=)<optionsClassName > #してください、このような名前がすでに使用されている場合、それは未登録の最初(最後に登録勝利)になり、注意してください #(デフォルトはnone) #jmxPrefix = #trueに設定されている場合、実行時間は、ナノ秒で測定されますミリ秒に反対 #(デフォルトはfalse) #useNanoTime = falseを ##################################### ############################ #データソースの交換が# ## #アプリケーションサーバ#の実DataSourceクラスを置き換え 名前で#設定com.p6spy.engine.spy.P6DataSource# #(それはまた、接続プールとXAサポートを提供します)。# #その後、本物の#1のJNDI名とクラス名を追加し 、ここで##のDataSourceを ##の この項目に設定された#値が#の使用して再ロードすることはできません #のreloadproperties変数を。それがロードされると、それは#1のまま アプリケーションが再起動されるまでメモリに#。# ## ############################################### ################## #realdatasource = / RealMySqlDS #realdatasourceclass = com.mysql.jdbc.jdbc2.optional.MysqlDataSource ############# ################################################## ## #のDataSourceプロパティー# ## #あなたはインターセプトにデータソースのサポートを使用している場合は#呼び出し 、適切なセットアップのプロパティを必要とするデータソースに#を、#の #は、ここでそれらのプロパティを定義します。別の#の、名前と値のペアを使用して 名前と値をセミコロンで位に、そして#を区切る カンマで#ペアを。# ## ############################################# #################### #ここに示す例では、MySQL#のためであります ## #P6Spyコードは、アプリケーション・サーバー内で実行される場合、# #1 realdatasourceproperties =ポート; 3306、serverNameの、myhostの、databaseNameは、jbossdb、FOO;バー ################################ ################################# #JNDIデータソースのルックアップ# は##の #あなたが外のデータソースのサポートを使用している場合アプリの#の #サーバは、おそらくJNDIコンテキスト#の定義する必要があります 。#環境を。# ## #これらのプロパティを使用していない、とのDataSourceルックアップが#のだろう #は、アプリケーションサーバによって定義されたネーミングコンテキストを使用します。# ## #ネーミング環境の2つの標準的な要素は、#1です #のjndicontextfactoryとjndicontextproviderurl。あなたが#の必要がある場合 #追加要素を、jndicontextcustomプロパティを使用します。# #あなたは、jndicontextcustomに#の複数のプロパティを定義することができます 名前と値のペアで#を。#1で名前と値を区切る #セミコロン、およびカンマでペアを分けます。# ## #ここに示す例では、#で実行しているスタンドアロンのプログラムです #JDNIコンテキスト#1にも、JBossを実行しているマシン 位のJBoss(3.0.4)のために構成されています。# ## ##(デフォルトでは、これらすべては空です) ###################################### ########################### #jndicontextfactory = org.jnp.interfaces.NamingContextFactory #jndicontextproviderurl = localhostを:1099 #jndicontextcustom = java.naming。 factory.url.pkgs; org.jboss.nameing:org.jnp.interfacesに #jndicontextfactory = com.ibm.websphere.naming.WsnInitialContextFactory #jndicontextproviderurl = IIOP:// localhostを:900 ########### ################################################## ### #1 P6のロギング特定のプロパティ# ############################################### ################# ログに記録されているもの#フィルタ #これはの使用のための前提条件である点に注意してください。含める/除外/ sqlexpressionの #(デフォルトはfalse) #フィルタ=偽 #のカンマが含まれる文字列のリストを区切っ #してください、与えられた正規表現のために行う必要があります(Javaで使用)の特殊文字をエスケープすることに注意してください #(デフォルトは空である) の#include = #コンマ除外するための文字列の区切りリスト #(デフォルトは空である) #exclude = #SQL式を評価します正規表現使用する場合は #を特殊文字は(Javaで使用)エスケープがありますのでご注意ください与えられた正規表現のために行う必要があります (デフォルトは空です)# #sqlexpression = 除外するカテゴリの#list:エラー、情報、バッチ、デバッグ、声明、 #commit、ロールバックと結果は有効な値です 。#(デフォルトはinfoです、デバッグ、結果、結果セット、バッチ) #1 excludecategories =情報、デバッグ、結果、結果セット、バッチ #実行しきい値はP6Spyの標準ログに適用されます。 標準のログは、すべてのステートメントログアウトしている間# かかわらず、その実行時間の#を、この機能は、時間置き 、そのログの#条件を。撮影したステートメントだけ 長い(ミリ秒単位で)指定した時間よりも位になり #はログに記録します。このように、という文のみを見ることが可能である 。#は、いくつかのハイウォーターマークを超えています。 #この時間はリロード可能です。 # #executionThreshold =整数時間(ミリ秒) #(デフォルトは0です) #executionThreshold = #################################### ############################ #1 P6の停止特定のプロパティ# ################ ################################################ #の停電検出は、 # #この機能は示すことができる長時間実行文を検出 #データベースの停止の問題を。この機能をオンにすると、それがどのログに記録する 、その実行時に設定可能な時間の境界を超えた#ステートメントを。 この機能を有効にすると#、他の文は長い除いて記録されません ステートメントを実行している#。間隔プロパティは秒単位で設定された境界の時間です。 #たとえば、これは少なくとも2つ必要とする任意のステートメント次いで、2に設定されている場合に #秒が記録されます。同じ文がログに記録され続けることに注意してください 限り、実行するようにするため位。間隔が2に設定され、クエリがかかるされている場合ので #11秒、それが(2、4、6、8、10秒間隔で)5回記録されます。 # #outagedetection =真|偽 #outagedetectioninterval =整数時間(秒) #1 #(デフォルトはfalse) #1 outagedetection =偽 #(デフォルトである60) #outagedetectioninterval = 30
P6spyLogFormat.java
パッケージcom.example.mybatis_3_5.p6spy。 輸入com.p6spy.engine.spy.appender.MessageFormattingStrategy。 輸入org.springframework.util.StringUtils。 / ** * <P> * P6spy SQL日志格式化 * </ P> * * @author TZQ * @date 2019年8月8日午前9時50 * / パブリック クラス P6spyLogFormatは実装MessageFormattingStrategy { @Override パブリック文字列FORMATMESSAGE(最終 int型を connectionId、最後の文字列になりました、最後の 長い経過し、最終的に文字列のカテゴリ、最後の文字列用意し、最終的に文字列のSQL、最終文字列のURL){ 返す!StringUtils.isEmpty(SQL)?+ sql.replaceAll( "[\\ S] +"、 "「): "SQLを実行":NULL 。 } }
P6spyLogger.java
パッケージcom.example.mybatis_3_5.p6spy。 輸入com.p6spy.engine.logging.Category。 輸入com.p6spy.engine.spy.appender.FormattedLogger。 輸入lombok.extern.slf4j.Slf4j。 輸入org.springframework.util.StringUtils。 / ** * <P> * P6spy日志实现 * </ P> * * @author TZQ * @date 2019年8月8日9時54分 * / @ SLF4J パブリック クラス P6spyLoggerは拡張FormattedLogger { @Override 公共 ボイドたlogException(例外eを){ log.info( "" 、E)。 } @Override 公共 ボイドlogText(文字列テキスト){ log.info(テキスト)。 } @Override 公共 ボイド logSQL(int型、今connectionId、文字列長、文字列調製し、経過文字列のURLを文字列のSQLをカテゴリカテゴリ){ 最終的な文字列のMSG = strategy.formatMessage(connectionId、今、経過、 調製category.toString()、 、SQL、URL); もし(StringUtils.isEmpty(MSG)){ リターン。 } であれば(Category.ERROR.equals(カテゴリ)){ log.error(MSG)。 }それ以外の 場合(Category.WARN.equals(カテゴリ)){ log.warn(MSG)。 } そう であれば(Category.DEBUG.equals(カテゴリ)){ log.debug(MSG)。 } 他{ log.info(MSG)。 } } @Override パブリック ブールisCategoryEnabled(カテゴリカテゴリ){ 場合(Category.ERROR.equals(カテゴリ)){ 戻り)(log.isErrorEnabledします。 } そう であれば(Category.WARN.equals(カテゴリ)){ 戻り)(log.isWarnEnabledします。 }それ以外の もし(Category.DEBUG.equals(カテゴリ)){ 戻り)(log.isDebugEnabledします。 } 他{ 戻る)(log.isInfoEnabledします。 } } }