All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.taotao.cloud.p6spy.properties.P6spyProperties Maven / Gradle / Ivy

There is a newer version: 2022.10
Show newest version
/*
 * Copyright (c) 2020-2030, Shuigedeng ([email protected] & https://blog.taotaocloud.top/).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.taotao.cloud.p6spy.properties;

import com.taotao.cloud.common.constant.CommonConstant;
import com.taotao.cloud.common.utils.common.PropertyUtil;
import java.io.File;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;

/**
 * P6spyProperties
 *
 * @author shuigedeng
 * @version 2022.03
 * @since 2020/10/14 09:11
 */
@RefreshScope
@ConfigurationProperties(prefix = P6spyProperties.PREFIX)
public class P6spyProperties {

	public static final String PREFIX = "taotao.cloud.p6spy";

	private boolean enabled = true;

	/**
	 * 指定应用的日志拦截模块,默认为com.p6spy.engine.spy.P6SpyFactory # Module list adapts the modular
	 * functionality of P6Spy. # Only modules listed are active. # (default is
	 * com.p6spy.engine.logging.P6LogFactory and # com.p6spy.engine.spy.P6SpyFactory) # Please note
	 * that the core module (P6SpyFactory) can't be # deactivated. # Unlike the other properties,
	 * activation of the changes on # this one requires reload. #modulelist=com.p6spy.engine.spy.P6SpyFactory,com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
	 */
	private String modulelist = "com.p6spy.engine.spy.P6SpyFactory,com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory";

	/**
	 * 真实JDBC driver , 多个以 逗号 分割 默认为空 # A comma separated list of JDBC drivers to load and register.
	 * # (default is empty) # # Note: This is normally only needed when using P6Spy in an #
	 * application server environment with a JNDI data source or when # using a JDBC driver that
	 * does not implement the JDBC 4.0 API # (specifically automatic registration). driverlist=
	 */
	private String driverlist;

	/**
	 * 是否自动刷新 默认 false # for flushing per statement # (default is false) autoflush=false
	 */
	private Boolean autoflush = false;

	/**
	 * 配置SimpleDateFormat日期格式 默认为空 # sets the date format using Java's SimpleDateFormat routine. #
	 * In case property is not set, milliseconds since 1.1.1970 (unix time) is used (default
	 */
	private String dateformat = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 如果 stacktrace=true,则可以指定具体的类名来进行过滤。
	 * 

* # if stacktrace=true, specifies the stack trace to print */ private String stacktraceclass; /** * 监测属性配置文件是否进行重新加载 *

* # determines if property file should be reloaded # Please note: reload means forgetting all * the previously set # settings (even those set during runtime - via JMX) # and starting with * the clean table # (default is false) reloadproperties=false */ private Boolean reloadproperties = false; /** * 属性配置文件重新加载的时间间隔,单位:秒 默认60s *

* # determines how often should be reloaded in seconds # (default is 60) * #reloadpropertiesinterval=60 */ private Integer reloadpropertiesinterval = 60; /** * 指定 Log 的 appender,取值: *

* # specifies the appender to use for logging # Please note: reload means forgetting all the * previously set # settings (even those set during runtime - via JMX) # and starting with the * clean table # (only the properties read from the configuration file) # (default is * com.p6spy.engine.spy.appender.FileLogger) #appender=com.p6spy.engine.spy.appender.Slf4JLogger * #appender=com.p6spy.engine.spy.appender.StdoutLogger #appender=com.p6spy.engine.spy.appender.FileLogger */ // private String appender = "com.taotao.cloud.p6spy.logger.P6spyLogger"; private String appender = "com.p6spy.engine.spy.appender.FileLogger"; /** * 指定 Log 的文件名 默认 spy.log # name of logfile to use, note Windows users should make sure to use * forward slashes in their pathname (e:/test/spy.log) # (used for * com.p6spy.engine.spy.appender.FileLogger only) # (default is spy.log) */ private String logfile = System.getProperty("user.home") + File.separator + "logs" + File.separator + PropertyUtil.getProperty(CommonConstant.SPRING_APP_NAME_KEY) + File.separator + "p6spy" + File.separator + "spy.log"; /** * 指定是否每次是增加 Log,设置为 false 则每次都会先进行清空 默认true # append to the p6spy log file. if this is set to * false the # log file is truncated every time. (file logger only) # (default is true) */ private Boolean append = true; /** * 指定日志输出样式 默认为com.p6spy.engine.spy.appender.SingleLineFormat , 单行输出 不格式化语句 # class to use for * formatting log messages (default is: com.p6spy.engine.spy.appender.SingleLineFormat) */ private String logMessageFormat = "com.p6spy.engine.spy.appender.CustomLineFormat"; /** * # 也可以采用 com.p6spy.engine.spy.appender.CustomLineFormat 来自定义输出样式, # Custom log message format * used ONLY IF logMessageFormat is set to com.p6spy.engine.spy.appender.CustomLineFormat # * default is %(currentTime)|%(executionTime)|%(category)|connection%(connectionId)|%(sqlSingleLine) * # Available placeholders are: # %(connectionId) the id of the connection # * %(currentTime) the current time expressing in milliseconds # %(executionTime) * the time in milliseconds that the operation took to complete # %(category) the category of * the operation # %(effectiveSql) the SQL statement as submitted to the driver # * %(effectiveSqlSingleLine) the SQL statement as submitted to the driver, with all new lines * removed # %(sql) the SQL statement with all bind variables replaced * with actual values # %(sqlSingleLine) the SQL statement with all bind variables * replaced with actual values, with all new lines removed # customLogMessageFormat=%(currentTime)|%(executionTime)|%(category)|connection%(connectionId)|%(sqlSingleLine) */ private String customLogMessageFormat = "%(currentTime)|%(executionTime)|%(category)|connection%(connectionId)|%(sqlSingleLine)"; /** * # format that is used for logging of the java.util.Date implementations (has to be compatible * with java.text.SimpleDateFormat) # (default is yyyy-MM-dd'T'HH:mm:ss.SSSZ) * #databaseDialectDateFormat=yyyy-MM-dd'T'HH:mm:ss.SSSZ */ private String databaseDialectDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; /** * # format that is used for logging of the java.sql.Timestamp implementations (has to be * compatible with java.text.SimpleDateFormat) # (default is yyyy-MM-dd'T'HH:mm:ss.SSSZ) * #databaseDialectTimestampFormat=yyyy-MM-dd'T'HH:mm:ss.SSSZ */ private String databaseDialectTimestampFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; /** * # format that is used for logging booleans, possible values: boolean, numeric # (default is * boolean) #databaseDialectBooleanFormat=boolean */ private String databaseDialectBooleanFormat = "boolean"; /** * # Specifies the format for logging binary data. Not applicable if excludebinary is true. # * (default is com.p6spy.engine.logging.format.HexEncodedBinaryFormat) * #databaseDialectBinaryFormat=com.p6spy.engine.logging.format.PostgreSQLBinaryFormat * #databaseDialectBinaryFormat=com.p6spy.engine.logging.format.MySQLBinaryFormat * #databaseDialectBinaryFormat=com.p6spy.engine.logging.format.HexEncodedBinaryFormat */ private String databaseDialectBinaryFormat = "com.p6spy.engine.logging.format.MySQLBinaryFormat"; /** * # whether to expose options via JMX or not # (default is true) #jmx=true */ private Boolean jmx = true; /** * # if exposing options via jmx (see option: jmx), what should be the prefix used? # jmx naming * pattern constructed is: com.p6spy(.)?:name= # please note, if * there is already such a name in use it would be unregistered first (the last registered wins) * # (default is none) #jmxPrefix= */ private String jmxPrefix; /** * # if set to true, the execution time will be measured in nanoseconds as opposed to * milliseconds # (default is false) #useNanoTime=false */ private Boolean useNanoTime = false; /** * 实际数据源 JNDI *

* # DataSource replacement # # # # Replace the real * DataSource class in your application server # # configuration with the name * com.p6spy.engine.spy.P6DataSource # # (that provides also connection pooling and xa support). * # # then add the JNDI name and class name of the real # # DataSource here # # # # * Values set in this item cannot be reloaded using the # # reloadproperties variable. * Once it is loaded, it remains # # in memory until the application is restarted. # # # * ################################################################# * #realdatasource=/RealMySqlDS */ private String realdatasource; /** * 实际数据源 datasource class *

* #realdatasourceclass=com.mysql.jdbc.jdbc2.optional.MysqlDataSource */ private String realdatasourceclass; /** * 实际数据源所携带的配置参数 以 k=v 方式指定 以 分号 分割 *

* # DataSource properties # # # # If you are using the * DataSource support to intercept calls # # to a DataSource that requires properties for * proper setup, # # define those properties here. Use name value pairs, separate # # the * name and value with a semicolon, and separate the # # pairs with commas. # # # # The * example shown here is for mysql # # # ################################################################# * #realdatasourceproperties=port;3306,serverName;myhost,databaseName;jbossdb,foo;bar */ private String realdatasourceproperties; /** * # filter what is logged # please note this is a precondition for usage of: * include/exclude/sqlexpression # (default is false) #filter=false */ private Boolean filter = false; /** * # comma separated list of strings to include # please note that special characters escaping * (used in java) has to be done for the provided regular expression # (default is empty) * #include= # comma separated list of strings to exclude # (default is empty) #exclude= */ private String include; private String exclude; /** * # sql expression to evaluate if using regex # please note that special characters escaping * (used in java) has to be done for the provided regular expression # (default is empty) * #sqlexpression= */ private String sqlexpression; /** * #list of categories to exclude: error, info, batch, debug, statement, #commit, rollback, * result and resultset are valid values # (default is info,debug,result,resultset,batch) * #excludecategories=info,debug,result,resultset,batch */ private String excludecategories = "info,debug,result,resultset,batch"; /** * #whether the binary values (passed to DB or retrieved ones) should be logged with * placeholder: [binary] or not. # (default is false) #excludebinary=false */ private Boolean excludebinary = false; /** * # Execution threshold applies to the standard logging of P6Spy. # While the standard logging * logs out every statement # regardless of its execution time, this feature puts a time # * condition on that logging. Only statements that have taken # longer than the time specified * (in milliseconds) will be # logged. This way it is possible to see only statements that # * have exceeded some high water mark. # This time is reloadable. # # executionThreshold=integer * time (milliseconds) # (default is 0) #executionThreshold= */ private Integer executionThreshold = 0; /** * # Outage Detection # # This feature detects long-running statements that may be indicative of * # a database outage problem. If this feature is turned on, it will log any # statement that * surpasses the configurable time boundary during its execution. # When this feature is * enabled, no other statements are logged except the long # running statements. The interval * property is the boundary time set in seconds. # For example, if this is set to 2, then any * statement requiring at least 2 # seconds will be logged. Note that the same statement will * continue to be logged # for as long as it executes. So if the interval is set to 2, and the * query takes # 11 seconds, it will be logged 5 times (at the 2, 4, 6, 8, 10 second intervals). * # # outagedetection=true|false # outagedetectioninterval=integer time (seconds) # 是否开启慢SQL记录 * # (default is false) #outagedetection=false # 慢SQL记录标准,单位秒 # (default is 60) * #outagedetectioninterval=30 */ private Boolean outagedetection = false; private Integer outagedetectioninterval = 3; /** * 打印堆栈跟踪信息 默认flase *

* # prints a stack trace for every statement logged */ private Boolean stacktrace = false; /** * 设置 JNDI 数据源的 NamingContextFactory。 *

* # JNDI DataSource lookup # # # # If you are using the * DataSource support outside of an app # # server, you will probably need to define the * JNDI Context # # environment. # # # # If the P6Spy code will be executing inside an app * server then # # do not use these properties, and the DataSource lookup will # # use the * naming context defined by the app server. # # # # The two standard elements of * the naming environment are # # jndicontextfactory and jndicontextproviderurl. If you * need # # additional elements, use the jndicontextcustom property. # # You can define * multiple properties in jndicontextcustom, # # in name value pairs. Separate the name and * value with a # # semicolon, and separate the pairs with commas. # # # # * The example shown here is for a standalone program running on # # a machine that is also * running JBoss, so the JNDI context # # is configured for JBoss (3.0.4). # # # # (by * default all these are empty) # ################################################################# * #jndicontextfactory=org.jnp.interfaces.NamingContextFactory #jndicontextproviderurl=localhost:1099 * #jndicontextcustom=java.naming.factory.url.pkgs;org.jboss.naming:org.jnp.interfaces */ private String jndicontextfactory; /** * 设置 JNDI 数据源的提供者的 URL。 *

* # JNDI DataSource lookup # # # # If you are using the * DataSource support outside of an app # # server, you will probably need to define the * JNDI Context # # environment. # # # # If the P6Spy code will be executing inside an app * server then # # do not use these properties, and the DataSource lookup will # # use the * naming context defined by the app server. # # # # The two standard elements of * the naming environment are # # jndicontextfactory and jndicontextproviderurl. If you * need # # additional elements, use the jndicontextcustom property. # # You can define * multiple properties in jndicontextcustom, # # in name value pairs. Separate the name and * value with a # # semicolon, and separate the pairs with commas. # # # # * The example shown here is for a standalone program running on # # a machine that is also * running JBoss, so the JNDI context # # is configured for JBoss (3.0.4). # # # # (by * default all these are empty) # ################################################################# * #jndicontextfactory=org.jnp.interfaces.NamingContextFactory #jndicontextproviderurl=localhost:1099 * #jndicontextcustom=java.naming.factory.url.pkgs;org.jboss.naming:org.jnp.interfaces */ private String jndicontextproviderurl; /** * 设置 JNDI 数据源的一些定制信息,以分号分隔。 *

* # JNDI DataSource lookup # # # # If you are using the * DataSource support outside of an app # # server, you will probably need to define the * JNDI Context # # environment. # # # # If the P6Spy code will be executing inside an app * server then # # do not use these properties, and the DataSource lookup will # # use the * naming context defined by the app server. # # # # The two standard elements of * the naming environment are # # jndicontextfactory and jndicontextproviderurl. If you * need # # additional elements, use the jndicontextcustom property. # # You can define * multiple properties in jndicontextcustom, # # in name value pairs. Separate the name and * value with a # # semicolon, and separate the pairs with commas. # # # # * The example shown here is for a standalone program running on # # a machine that is also * running JBoss, so the JNDI context # # is configured for JBoss (3.0.4). # # # # (by * default all these are empty) # ################################################################# * #jndicontextfactory=org.jnp.interfaces.NamingContextFactory #jndicontextproviderurl=localhost:1099 * #jndicontextcustom=java.naming.factory.url.pkgs;org.jboss.naming:org.jnp.interfaces */ private String jndicontextcustom; public boolean getEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public String getModulelist() { return modulelist; } public void setModulelist(String modulelist) { this.modulelist = modulelist; } public String getDriverlist() { return driverlist; } public void setDriverlist(String driverlist) { this.driverlist = driverlist; } public Boolean getAutoflush() { return autoflush; } public void setAutoflush(Boolean autoflush) { this.autoflush = autoflush; } public String getDateformat() { return dateformat; } public void setDateformat(String dateformat) { this.dateformat = dateformat; } public String getStacktraceclass() { return stacktraceclass; } public void setStacktraceclass(String stacktraceclass) { this.stacktraceclass = stacktraceclass; } public Boolean getReloadproperties() { return reloadproperties; } public void setReloadproperties(Boolean reloadproperties) { this.reloadproperties = reloadproperties; } public Integer getReloadpropertiesinterval() { return reloadpropertiesinterval; } public void setReloadpropertiesinterval(Integer reloadpropertiesinterval) { this.reloadpropertiesinterval = reloadpropertiesinterval; } public String getAppender() { return appender; } public void setAppender(String appender) { this.appender = appender; } public String getLogfile() { return logfile; } public void setLogfile(String logfile) { this.logfile = logfile; } public Boolean getAppend() { return append; } public void setAppend(Boolean append) { this.append = append; } public String getLogMessageFormat() { return logMessageFormat; } public void setLogMessageFormat(String logMessageFormat) { this.logMessageFormat = logMessageFormat; } public String getCustomLogMessageFormat() { return customLogMessageFormat; } public void setCustomLogMessageFormat(String customLogMessageFormat) { this.customLogMessageFormat = customLogMessageFormat; } public String getDatabaseDialectDateFormat() { return databaseDialectDateFormat; } public void setDatabaseDialectDateFormat(String databaseDialectDateFormat) { this.databaseDialectDateFormat = databaseDialectDateFormat; } public String getDatabaseDialectTimestampFormat() { return databaseDialectTimestampFormat; } public void setDatabaseDialectTimestampFormat(String databaseDialectTimestampFormat) { this.databaseDialectTimestampFormat = databaseDialectTimestampFormat; } public String getDatabaseDialectBooleanFormat() { return databaseDialectBooleanFormat; } public void setDatabaseDialectBooleanFormat(String databaseDialectBooleanFormat) { this.databaseDialectBooleanFormat = databaseDialectBooleanFormat; } public String getDatabaseDialectBinaryFormat() { return databaseDialectBinaryFormat; } public void setDatabaseDialectBinaryFormat(String databaseDialectBinaryFormat) { this.databaseDialectBinaryFormat = databaseDialectBinaryFormat; } public Boolean getJmx() { return jmx; } public void setJmx(Boolean jmx) { this.jmx = jmx; } public String getJmxPrefix() { return jmxPrefix; } public void setJmxPrefix(String jmxPrefix) { this.jmxPrefix = jmxPrefix; } public Boolean getUseNanoTime() { return useNanoTime; } public void setUseNanoTime(Boolean useNanoTime) { this.useNanoTime = useNanoTime; } public String getRealdatasource() { return realdatasource; } public void setRealdatasource(String realdatasource) { this.realdatasource = realdatasource; } public String getRealdatasourceclass() { return realdatasourceclass; } public void setRealdatasourceclass(String realdatasourceclass) { this.realdatasourceclass = realdatasourceclass; } public String getRealdatasourceproperties() { return realdatasourceproperties; } public void setRealdatasourceproperties(String realdatasourceproperties) { this.realdatasourceproperties = realdatasourceproperties; } public Boolean getFilter() { return filter; } public void setFilter(Boolean filter) { this.filter = filter; } public String getInclude() { return include; } public void setInclude(String include) { this.include = include; } public String getExclude() { return exclude; } public void setExclude(String exclude) { this.exclude = exclude; } public String getSqlexpression() { return sqlexpression; } public void setSqlexpression(String sqlexpression) { this.sqlexpression = sqlexpression; } public String getExcludecategories() { return excludecategories; } public void setExcludecategories(String excludecategories) { this.excludecategories = excludecategories; } public Boolean getExcludebinary() { return excludebinary; } public void setExcludebinary(Boolean excludebinary) { this.excludebinary = excludebinary; } public Integer getExecutionThreshold() { return executionThreshold; } public void setExecutionThreshold(Integer executionThreshold) { this.executionThreshold = executionThreshold; } public Boolean getOutagedetection() { return outagedetection; } public void setOutagedetection(Boolean outagedetection) { this.outagedetection = outagedetection; } public Integer getOutagedetectioninterval() { return outagedetectioninterval; } public void setOutagedetectioninterval(Integer outagedetectioninterval) { this.outagedetectioninterval = outagedetectioninterval; } public Boolean getStacktrace() { return stacktrace; } public void setStacktrace(Boolean stacktrace) { this.stacktrace = stacktrace; } public String getJndicontextfactory() { return jndicontextfactory; } public void setJndicontextfactory(String jndicontextfactory) { this.jndicontextfactory = jndicontextfactory; } public String getJndicontextproviderurl() { return jndicontextproviderurl; } public void setJndicontextproviderurl(String jndicontextproviderurl) { this.jndicontextproviderurl = jndicontextproviderurl; } public String getJndicontextcustom() { return jndicontextcustom; } public void setJndicontextcustom(String jndicontextcustom) { this.jndicontextcustom = jndicontextcustom; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy