Closed gjaekel closed 7 years ago
The driver uses java.util.Logger, so you can configure it according to https://docs.oracle.com/javase/7/docs/api/java/util/logging/LogManager.html For instance in the tests I bridge it to SLF4J (using jul-to-slf4j lib + configuration in logging.properties) which is itself bridged to log4j (using slf4j-log4j12 lib) which is configured in the log4j.xml file.
If you just want to make it quiet, you don't have to bridge java.util.logging, you can directly configure it in a logging.properties file.
Dear Sylvain, thank for fast reply!
But that's seems not to be a smart way for me. Because I even take efforts to set up an per-application logging (and I can't even understand that this isn't the default on Wildfly). Therefore the logging use the application logging configuration (the SQL is logged in the applications logfile) and therefore I would have configure it for every (comming and going) application.
(In addition, I don't want to suppress the initial agents driver interception messages - but these appear in the Wildfly's console log and will not be affected.)
Nevertheless i'll now play with your suggestion and give feedback. Because there may be other things on stdout I have to filter out the used Logger(s), right?
But in fact my idea is let your package have a swich to suppress the local SQL logging and this may be passed as a system property. I'm a system engineer but no developer, but I'll also will try to find the associated lines in the code.
Aaaargh! I'm VERY sorry, but the output I observed isn't produced by the JDBC-Performance-Logger at all! It was (globaly) caused by Hibernate; by setting the System-Property hibernate.show_sql= true, as I just double-verified.
As a result, now I don't notice any local "SQL-related" output anymore. I just get the initial "Transforming class
Next, I'll try to apply it to our Tomcat installations ...
BTW: The updated timestamp delta calculation with respect to the selected line is a very smart feature I never seen before.
I'm glad you found the problem and that you find the tool useful. Regards Sylvain
Dear Sylvain,
Here my feedback: Today I found time to evaluate it on our Tomcats. All jdbc datasources for all application are managed by the Tomcat JDBC Pool, no application directly uses the drivers directly. The drivers are accessible for Tomcat along with the pool driver through it's lib directory.
If I apply the JDBC-Performance-Logger as an agent, it also have to add the SQL drivers to the JVMs plain classpath. Or the datasource initialisation inside a container will fail with 'interface foo not visible' for the driver class, e.g.:
20161122-103635.584 javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection
20161122-103635.584 at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
20161122-103635.585 at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
20161122-103635.585 at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:524)
20161122-103635.585 at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getSingleResult(CriteriaQueryTypeQueryAdapter.java:71)
20161122-103635.585 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
20161122-103635.585 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
20161122-103635.586 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
20161122-103635.586 at java.lang.reflect.Method.invoke(Method.java:498)
20161122-103635.586 at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:360)
20161122-103635.586 at com.sun.proxy.$Proxy390.getSingleResult(Unknown Source)
20161122-103635.586 at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:197)
20161122-103635.587 at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:74)
20161122-103635.587 at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:98)
20161122-103635.587 at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:89)
20161122-103635.587 at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:421)
20161122-103635.587 at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:381)
20161122-103635.588 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
20161122-103635.587 at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:421)
20161122-103635.587 at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:381)
20161122-103635.588 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
20161122-103635.588 at org.springframework.data.repository.core.support.RepositoryFactorySupport$DefaultMethodInvokingMethodInterceptor.invoke(RepositoryFactorySupport.java:512)
20161122-103635.588 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
20161122-103635.588 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
20161122-103635.589 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
20161122-103635.589 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
20161122-103635.589 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
20161122-103635.589 at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
20161122-103635.590 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
20161122-103635.590 at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostPr
20161122-103635.590 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
20161122-103635.590 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
20161122-103635.591 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
20161122-103635.591 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
20161122-103635.591 at com.sun.proxy.$Proxy370.countByIsSuperTrue(Unknown Source)
20161122-103635.591 at de.dnb.urhwahrng.applicationservice.datamanagement.AdminRepository.existSuperAdmin(AdminRepository.java:91)
20161122-103635.591 at de.dnb.urhwahrng.applicationservice.datamanagement.AdminRepository$$FastClassBySpringCGLIB$$616c9488.invoke(<generated>)
20161122-103635.592 at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
20161122-103635.592 at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:649)
20161122-103635.592 at de.dnb.urhwahrng.applicationservice.datamanagement.AdminRepository$$EnhancerBySpringCGLIB$$ee9e468f.existSuperAdmin(<generated>)
20161122-103635.592 at de.dnb.urhwahrng.applicationservice.business.usecases.admin.CreateDefaultSuperAdminUseCase.createDefaultSuperAdmin(CreateDefaultSuperAdminUseCase.java:31)
20161122-103635.593 at de.dnb.urhwahrng.applicationservice.business.service.init.ServiceInitializer.onApplicationEvent(ServiceInitializer.java:29)
20161122-103635.593 at de.dnb.urhwahrng.applicationservice.business.service.init.ServiceInitializer.onApplicationEvent(ServiceInitializer.java:17)
20161122-103635.593 at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151)
20161122-103635.593 at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)
20161122-103635.594 at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331)
20161122-103635.594 at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:773)
20161122-103635.594 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
20161122-103635.594 at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
20161122-103635.594 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
20161122-103635.595 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
20161122-103635.595 at org.apache.catalina.core.StandardContext.listenerStart(Unknown Source)
20161122-103635.595 at org.apache.catalina.core.StandardContext.startInternal(Unknown Source)
20161122-103635.595 at org.apache.catalina.util.LifecycleBase.start(Unknown Source)
20161122-103635.595 at org.apache.catalina.core.ContainerBase.addChildInternal(Unknown Source)
20161122-103635.596 at org.apache.catalina.core.ContainerBase.addChild(Unknown Source)
20161122-103635.596 at org.apache.catalina.core.StandardHost.addChild(Unknown Source)
20161122-103635.596 at org.apache.catalina.startup.HostConfig.deployWAR(Unknown Source)
20161122-103635.596 at org.apache.catalina.startup.HostConfig$DeployWar.run(Unknown Source)
20161122-103635.596 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
20161122-103635.597 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
20161122-103635.597 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
20161122-103635.597 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
20161122-103635.597 at java.lang.Thread.run(Thread.java:745)
20161122-103635.597 Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
20161122-103635.598 at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
20161122-103635.598 at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
20161122-103635.598 at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
20161122-103635.598 at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235)
20161122-103635.598 at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
20161122-103635.599 at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:63)
20161122-103635.599 at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:162)
20161122-103635.599 at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)
20161122-103635.599 at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:160)
20161122-103635.599 at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1885)
20161122-103635.600 at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862)
20161122-103635.600 at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839)
20161122-103635.600 at org.hibernate.loader.Loader.doQuery(Loader.java:910)
20161122-103635.600 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355)
20161122-103635.600 at org.hibernate.loader.Loader.doList(Loader.java:2554)
20161122-103635.601 at org.hibernate.loader.Loader.doList(Loader.java:2540)
20161122-103635.601 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370)
20161122-103635.601 at org.hibernate.loader.Loader.list(Loader.java:2365)
20161122-103635.601 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497)
20161122-103635.601 at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
20161122-103635.602 at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236)
20161122-103635.602 at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264)
20161122-103635.602 at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
20161122-103635.602 at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)
20161122-103635.602 at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:495)
20161122-103635.603 ... 57 more
20161122-103635.603 Caused by: java.sql.SQLException: java.lang.IllegalArgumentException: interface com.mysql.jdbc.MySQLConnection is not visible from class loader
20161122-103635.603 at ch.sla.jdbcperflogger.driver.WrappingDriver.wrapConnection(WrappingDriver.java:142)
20161122-103635.603 at ch.sla.jdbcperflogger.agent.DriverInterceptor.connect(DriverInterceptor.java:13)
20161122-103635.603 at com.mysql.jdbc.Driver.connect(Driver.java)
20161122-103635.604 at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:307)
20161122-103635.604 at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)
20161122-103635.604 at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:710)
20161122-103635.604 at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:644)
20161122-103635.604 at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:187)
20161122-103635.605 at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127)
20161122-103635.605 at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
20161122-103635.605 at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
20161122-103635.606 at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
20161122-103635.606 ... 78 more
20161122-103635.606 Caused by: java.lang.IllegalArgumentException: interface com.mysql.jdbc.MySQLConnection is not visible from class loader
20161122-103635.606 at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:581)
20161122-103635.606 at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:557)
20161122-103635.607 at java.lang.reflect.WeakCache$Factory.get(WeakCache.java:230)
20161122-103635.607 at java.lang.reflect.WeakCache.get(WeakCache.java:127)
20161122-103635.607 at java.lang.reflect.Proxy.getProxyClass0(Proxy.java:419)
20161122-103635.607 at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:719)
20161122-103635.607 at ch.sla.jdbcperflogger.driver.WrappingDriver.wrapConnection(WrappingDriver.java:169)
20161122-103635.608 at ch.sla.jdbcperflogger.agent.DriverInterceptor.connect(DriverInterceptor.java:13)
20161122-103635.608 at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java)
20161122-103635.608 at com.mysql.jdbc.Driver.connect$accessor$VYtw5NUl(Driver.java)
20161122-103635.608 at com.mysql.jdbc.Driver$auxiliary$TNwlmAJg.call(Unknown Source)
20161122-103635.608 at ch.sla.jdbcperflogger.driver.WrappingDriver.wrapConnection(WrappingDriver.java:137)
20161122-103635.609 ... 89 more
Dear Sylvain, I would like to disable the ouput of catched SQL to stdout on server side. Because I want to have the agent installed, but "quiet" in a production environment and just to connect to it via the remote GUI as needed. How to a achieve this? with greetings Guido