P6Spy is a framework that enables database data to be seamlessly intercepted and logged with no code changes to the application.

Overview

p6spy

Build Status Maven Central Bintray Docs Javadoc Coverage Sqale Rating

P6Spy is a framework that enables database data to be seamlessly intercepted and logged with no code changes to existing application. The P6Spy distribution includes P6Log, an application which logs all JDBC transactions for any Java application.

Documentation:
Installation
Configuration
Javadoc

For full documentation refer to format of your choice: html, pdf or epub.

Need help?
User's mailing list: Post - Archive
Developer's mailing list: Post - Archive
Issue tracking: View/Create issues

Related github repos:
p6spy-it - for integration testing with misc application servers
p6spy-perf - for performance testing (using jmeter)

Comments
  • P6Spy proxy creation fails when JDBC object is wrapped by JBoss 7+

    P6Spy proxy creation fails when JDBC object is wrapped by JBoss 7+

    I'm using p6spy within my open source project stagemonitor. I've encountered some problems related to p6spy when using the wildfly 8.2.0 application server.

    The problem occurs when trying to create a proxy for org.jboss.jca.adapters.jdbc.jdk7.WrappedPreparedStatementJDK7, because its interface org.jboss.jca.adapters.jdbc.StatementAccess can't be loaded by the current thread's context class loader nor by the default class loader. In ProxyFactory#getInterfaces you are collecting all interfaces of the underlying object and set those as the interfaces of the proxy. But is that really needed?

    In this commit (https://github.com/felixbarny/p6spy/commit/2303129c6f0fdc9568a3d91f4bab7834985dd222) I explicitly set the interface to PreparedStatement. Isn't that all that's needed? That way I'm not running into any class loader issues because I can ensure at compile time that all necessary interfaces are available. It would also make the ProxyFactory.createProxy method a lot cleaner (no try/catch cascades needed). But I'm not sure if there are some corner cases that would fail then.

    What's your opinion on that?

    To reproduce the error, just execute

    git clone https://github.com/felixbarny/jpa-addressbook.git
    cd jpa-addressbook
    mvn wildfly:run
    

    Then open your browser at http://localhost:8080

    This is the full stack trace I get:

    14:09:52,129 ERROR [io.undertow.request] (default task-6) UT005023: Exception handling request to /: javax.servlet.ServletException: com.vaadin.server.ServiceException: org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke void org.example.VaadinUI.init() on org.example.VaadinUI@340db6a6
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:307) [vaadin-server-7.3.8.jar:7.3.8]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at org.stagemonitor.web.monitor.MonitoredHttpRequest.execute(MonitoredHttpRequest.java:194) [stagemonitor-web-0.13.0-20150501.102900-3.jar:0.13.0-SNAPSHOT]
        at org.stagemonitor.requestmonitor.RequestMonitor.monitor(RequestMonitor.java:124) [stagemonitor-requestmonitor-0.13.0-20150501.102847-3.jar:0.13.0-SNAPSHOT]
        at org.stagemonitor.web.monitor.filter.HttpRequestMonitorFilter.monitorRequest(HttpRequestMonitorFilter.java:169) [stagemonitor-web-0.13.0-20150501.102900-3.jar:0.13.0-SNAPSHOT]
        at org.stagemonitor.web.monitor.filter.HttpRequestMonitorFilter.doMonitor(HttpRequestMonitorFilter.java:126) [stagemonitor-web-0.13.0-20150501.102900-3.jar:0.13.0-SNAPSHOT]
        at org.stagemonitor.web.monitor.filter.HttpRequestMonitorFilter.doFilterInternal(HttpRequestMonitorFilter.java:100) [stagemonitor-web-0.13.0-20150501.102900-3.jar:0.13.0-SNAPSHOT]
        at org.stagemonitor.web.monitor.filter.AbstractExclusionFilter.doFilter(AbstractExclusionFilter.java:75) [stagemonitor-web-0.13.0-20150501.102900-3.jar:0.13.0-SNAPSHOT]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_25]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_25]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_25]
    Caused by: com.vaadin.server.ServiceException: org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke void org.example.VaadinUI.init() on org.example.VaadinUI@340db6a6
        at com.vaadin.server.VaadinService.handleExceptionDuringRequest(VaadinService.java:1464) [vaadin-server-7.3.8.jar:7.3.8]
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1418) [vaadin-server-7.3.8.jar:7.3.8]
        at com.vaadin.cdi.server.VaadinCDIServletService.handleRequest(VaadinCDIServletService.java:92) [vaadin-cdi-1.0.2.jar:1.0.2]
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:305) [vaadin-server-7.3.8.jar:7.3.8]
        ... 37 more
    Caused by: org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke void org.example.VaadinUI.init() on org.example.VaadinUI@340db6a6
        at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:100) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.postConstruct(DefaultLifecycleCallbackInvoker.java:81) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.injection.producer.BasicInjectionTarget.postConstruct(BasicInjectionTarget.java:126) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.injection.producer.BeanInjectionTarget.postConstruct(BeanInjectionTarget.java:70) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:153) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at com.vaadin.cdi.internal.UIContextual.create(UIContextual.java:85) [vaadin-cdi-1.0.2.jar:1.0.2]
        at org.apache.deltaspike.core.util.context.ContextualStorage.createContextualInstance(ContextualStorage.java:117) [deltaspike-core-api-1.2.1.jar:1.2.1]
        at org.apache.deltaspike.core.util.context.AbstractContext.get(AbstractContext.java:129) [deltaspike-core-api-1.2.1.jar:1.2.1]
        at com.vaadin.cdi.internal.AbstractVaadinContext.get(AbstractVaadinContext.java:156) [vaadin-cdi-1.0.2.jar:1.0.2]
        at com.vaadin.cdi.internal.ContextWrapper.get(ContextWrapper.java:49) [vaadin-cdi-1.0.2.jar:1.0.2]
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:742) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:762) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:61) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:89) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at com.vaadin.cdi.CDIUIProvider.createInstance(CDIUIProvider.java:95) [vaadin-cdi-1.0.2.jar:1.0.2]
        at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:194) [vaadin-server-7.3.8.jar:7.3.8]
        at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:74) [vaadin-server-7.3.8.jar:7.3.8]
        at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) [vaadin-server-7.3.8.jar:7.3.8]
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1406) [vaadin-server-7.3.8.jar:7.3.8]
        ... 39 more
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_25]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_25]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_25]
        at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_25]
        at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:98) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        ... 57 more
    Caused by: javax.ejb.EJBException: com.p6spy.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
        at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:190) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:340) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:95) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:448)
        at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
        at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
        at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)
        at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:182)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
        at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
        at org.example.backend.PhoneBookService$$$view1.ensureDemoData(Unknown Source) [classes:]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_25]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_25]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_25]
        at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_25]
        at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:414) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:127) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:65) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.example.backend.PhoneBookService$Proxy$_$$_Weld$EnterpriseProxy$.ensureDemoData(Unknown Source) [classes:]
        at org.example.VaadinUI.init(VaadinUI.java:35) [classes:]
        ... 62 more
    Caused by: com.p6spy.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
        at com.p6spy.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237) [p6spy-2.1.3.jar:]
        at com.p6spy.cglib.proxy.Enhancer.createHelper(Enhancer.java:377) [p6spy-2.1.3.jar:]
        at com.p6spy.cglib.proxy.Enhancer.create(Enhancer.java:285) [p6spy-2.1.3.jar:]
        at com.p6spy.engine.proxy.ProxyFactory.createProxy(ProxyFactory.java:70) [p6spy-2.1.3.jar:]
        at com.p6spy.engine.logging.P6LogConnectionPrepareStatementDelegate.invoke(P6LogConnectionPrepareStatementDelegate.java:42) [p6spy-2.1.3.jar:]
        at com.p6spy.engine.proxy.GenericInvocationHandler.invoke(GenericInvocationHandler.java:116) [p6spy-2.1.3.jar:]
        at org.p6spy.com.p6spy.engine.proxy.P6Proxy$$EnhancerByCGLIB$$9acafd8b.prepareStatement(<generated>) [p6spy-2.1.3.jar:]
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:162) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:160) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1885) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.doQuery(Loader.java:910) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.doList(Loader.java:2554) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.doList(Loader.java:2540) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.Loader.list(Loader.java:2365) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
        at org.example.backend.PhoneBookService.getGroups(PhoneBookService.java:67) [classes:]
        at org.example.backend.PhoneBookService.ensureDemoData(PhoneBookService.java:85) [classes:]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_25]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_25]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_25]
        at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_25]
        at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
        at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
        at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
        at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
        at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
        at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
        at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.component.interceptors.NonPooledEJBComponentInstanceAssociatingInterceptor.processInvocation(NonPooledEJBComponentInstanceAssociatingInterceptor.java:59) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
        at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:273) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
        ... 106 more
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) [:1.8.0_25]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_25]
        at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_25]
        at com.p6spy.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384) [p6spy-2.1.3.jar:]
        at com.p6spy.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219) [p6spy-2.1.3.jar:]
        ... 168 more
    Caused by: java.lang.NoClassDefFoundError: org/jboss/jca/adapters/jdbc/StatementAccess
        at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_25]
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [rt.jar:1.8.0_25]
        ... 173 more
    Caused by: java.lang.ClassNotFoundException: org.jboss.jca.adapters.jdbc.StatementAccess from [Module "deployment.jpa-addressbook-1.0-SNAPSHOT.war:main" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final]
        ... 175 more
    
    
    Defect 
    opened by felixbarny 20
  • Unescaped values in SQL queries

    Unescaped values in SQL queries

    When a field is filled with a value like this one This is a test ' the query shown by p6spy is update MYTABLE set field='This is a test '' where id=1 which is wrong because it didn't escape the apostrophe.

    Defect 
    opened by meGAmeS1 17
  • Logging connection info

    Logging connection info

    My app connects with many different databases, and I've seen that the MessageFormattingStrategy interface provides a connectionId.

    A connectionId is linked [ConnectionInformation|https://github.com/p6spy/p6spy/blob/04d3e31951ef6d630c07754ae3fb8efa570cd8c7/src/main/java/com/p6spy/engine/common/ConnectionInformation.java]. How do I have access to the name of the database and the JDBC URL?

    Question 
    opened by DavidPerezIngeniero 16
  • NullPointerException at P6SpyOptions.getActiveInstance

    NullPointerException at P6SpyOptions.getActiveInstance

    I'm encountering a strange NPE that isn't really reproducible. That may be a class-loading-ordering problem.

    Caused by: java.lang.NullPointerException
            at com.p6spy.engine.spy.P6SpyOptions.getActiveInstance(P6SpyOptions.java:117)
            at org.stagemonitor.jdbc.ConnectionMonitor.<init>(ConnectionMonitor.java:41)
            at org.stagemonitor.jdbc.ConnectionMonitorAspect.<init>(ConnectionMonitorAspect.java:21)
            at org.stagemonitor.jdbc.ConnectionMonitorAspect.ajc$postClinit(ConnectionMonitorAspect.java:1)
            at org.stagemonitor.jdbc.ConnectionMonitorAspect.<clinit>(ConnectionMonitorAspect.java:15)
            ... 123 more
    

    This is how I call getActiveInstance https://github.com/stagemonitor/stagemonitor/blob/master/stagemonitor-jdbc/src/main/java/org/stagemonitor/jdbc/ConnectionMonitor.java#L41

    Enhancement 
    opened by felixbarny 14
  • Logging configuration with filter/include/exclude/sqlexpression has some pitfalls

    Logging configuration with filter/include/exclude/sqlexpression has some pitfalls

    Yesterday I got filter and include properties to work, but the process was not that straight forward. It was my second attempt and it took over a hour with looking into the source code and debugging to get it working.

    In our application we are using apache OJB as persistence layer so near all statements are generated and looks like the following one: SELECT A0.FIRSTNAME,A0.LASTNAME,A0.BIRTHDATE,A0.PIDENT FROM MY_SCHEME.PERSON A0 WHERE (A0.PIDENT = 801) ORDER BY 2,3

    And it is also how they are logged by p6spy. So the first thing I have tried was "include=PERSON" in spy.properties. It doesn't worked. Nothing get logged at all. "exclude=PERSON" hasn't worked too (all statements was logged as if filter=false was set).

    Than I have tried to get sqlexpression to work. Here https://www.debuggex.com/r/blJkU7qV3cdcMxa4 I have created an expression matching above statement and inserted it into spy.properties with copy and paste as "sqlexpression = SELECT\s((\w+\.\w+,?)+)\sFROM\s\w+\.PERSON\s.+". It has not worked again :-). The simplified expression ".+\.PERSON\s.+" has not worked too.

    Than it was time to look into the source code and to debug. While debugging sqlexpression I saw all backslashes was removed. I was not aware of it. So to get sqlexpression to work all backslashes should be escaped with one more backslash: "sqlexpression=.+\\.PERSON\\s.+". I think it is worth to be mentioned here http://p6spy.github.io/p6spy/2.0/configandusage.html and possibly directly in example spy.properties file.

    After all I also get "include" and "exclude" to work (to some degree). The problem was my statements are upper case and I have written table name in upper case too. But current implementations only works if table names in "include" or "exclude" properties are lower case. It should be at least mentioned in the documentation and in example spy.properties file. Or even better it should be no difference between upper and lower case because the statement itself is converted to lower case before the pattern matching is done in P6LogQuery.isQueryOk().

    Contrary to "include" and "exclude" properties if one works with "sqlexpression" than the table name should be written exactly as it appears in sql statement because this pattern is applied to original statement as it is (without first converting to lower case). So the behaviour is somehow inconsistent to how include/exclude-patterns are handled 12 row later in the same method.

    The next thing there is following example "include = select" on the documentation page http://p6spy.github.io/p6spy/2.0/configandusage.html. It can't work either because values of "include"/"exclude" properties are converted to regex patterns "select.*from(.*((..." before they are matched against sql statements. So this example leads to regex pattern "select.*from(.*((select)).*)(where|;|$)" which would only match if the table name is "select".

    And this is also the last point. Currently "include" and "exclude" works only for select statements. But it is not documented now and the documentation suggests one can filter for statement types using this properties.

    Defect 
    opened by melleran 14
  • removed DB matrix in travis build + introduced parametrized build for all the various DBs

    removed DB matrix in travis build + introduced parametrized build for all the various DBs

    well, this one is quite big, I'd like to hear from you guys if it sounds OK with you

    • maven profiles refactored (benefit could be you don't need to modify pom.xml any more to run tests in your ide, as all the drivers are included by default)
    • junit tests running in travis are refactored in a way, that are parametrized with env var DB that can contain multiple DBs, i.e. -DDB=MySQL,H2,HSQLDB (see travis profile)
    • due to parametrized run - unregistration of drivers happen prio to each build
    • initial Datasource tests introduced using arquillian. with following limitations: XA not tested yet over P6Spy, moreover I don't see a way to have multiple DataSources referenced in spy.properties (will raise ticket for this one)
    • spy.properties are currently loaded in a static way, that is hard to test (we might need some refactoring here - will raise ticket here)
    • can't remember anything further right now

    Btw, seems that time of the build dropped significantly with this one

    opened by typekpb 14
  • Timestamps are logged incorrectedly

    Timestamps are logged incorrectedly

    If a query has a Timestamp parameter then com.p6spy.engine.common.Value.convertToString() treats it as a Date and truncates the time component.

    I wasted hours trying to fix a bug in my code that did not actually exist because the logs mislead me. Please add special handling for Timestamp in convertToString()

    Alternatively, consider changing the default value of databaseDialectDateFormat from dd-MMM-yy to yyyy-MM-dd'T'HH:mm:ss.SSSZ which I believe is equivalent to ISO-8601.

    opened by cowwoc 13
  • resultset category undocumented

    resultset category undocumented

    Here is what the documentation tells about:

    The log includes category information that describes the type of statement. This property excludes the listed categories. Valid options include the following:

    • error includes P6Spy errors. (It is recommended that you include this category.)
    • info includes driver startup information and property file information.
    • debug is only intended for use when you cannot get your driver to work properly, because it writes everything.
    • statement includes Statements, PreparedStatements, and CallableStatements.
    • batch includes calls made to the addBatch() JDBC API.
    • commit includes calls made to the commit() JDBC API.
    • rollback includes calls made to the rollback() JDBC API.
    • result includes statements generated by ResultSet.

    What about resultset?

    It traces very long output when inserting/updating binary data, and I don't know how to exclude it.

    Enhancement Documentation 
    opened by DavidPerezIngeniero 13
  • Make build compatible with Java 7

    Make build compatible with Java 7

    The maven compiler plugin is told to compile Java 6 code.

    However, the code contains references to methods only available as of Java 7.

    The following PR addresses this: https://github.com/Stephan972/p6spy/pull/1.

    Won't fix 
    opened by Stephan972 13
  • aop support

    aop support

    this is something I have in my mind since I started contributing to project.

    I think these days AOP is very popular and what could make sence would be to prevent all the referencing of the P6Spy in the bussines code/configuration and just go for the regular stuff, however if adding some specific p6spy-aop-aspectj (or whatever the name would be) to classpath and having particular aop java agent used, P6spy could wrap all the DB communication "automatically" via some interceptors/pointcuts.

    The thing is that these days, people consider AOP as the way to go for logging. I think that it makes sense for DB statements logging as well.

    And here I see the point where people using aop could find p6spy useful. If we would have maven modules like these:

    • p6spy-parent (already exists)
    • p6spy (already exists)
    • p6spy-aop-aspectj (would depend on p6spy)
    • p6spy-aop-jbossaop (would depend on p6spy) ...

    people would in the perfect world scenario include just the specific module in their project and having some defaults set via #29 that could be all they need to do. No realdriver config mess at all.

    moreover if people currently have own aop wrappers, this could remove implementation fragmentation and bring us all benefit of well tested single code base.

    technically, I'm not sure this can be achieved, but based on some playing around with aspectj, I believe it could be. still we could reuse the power of p6spy logging, just the starting point might be interceptor rather than wrapped real connection.

    Ideas?

    Won't fix 
    opened by typekpb 13
  • Exception in P6LogResultSetDelegate when query has no parameters

    Exception in P6LogResultSetDelegate when query has no parameters

    When using p6spy-2.3.1.jar from jFrog Bintray, I see an issue with queries that do not have any bound parameters. When reverting to p6spy-2.1.4.jar, the problem does not present itself. Perhaps it's related to the changes in cglib? Here is the stack trace when I get the exception:

    java.lang.ArrayIndexOutOfBoundsException: 0
        at com.p6spy.engine.logging.P6LogResultSetDelegate.invoke(P6LogResultSetDelegate.java:45)
        at com.p6spy.engine.proxy.GenericInvocationHandler.invoke(GenericInvocationHandler.java:116)
        at com.p6spy.engine.proxy.P6Proxy$$EnhancerByCGLIB$$96ffa73c.getResultSet(<generated>)
        at coldfusion.server.j2ee.sql.JRunStatement.getResultSet(JRunStatement.java:283)
        at coldfusion.sql.Executive.getRowSet(Executive.java:609)
        at coldfusion.sql.Executive.executeQuery(Executive.java:1470)
        at coldfusion.sql.Executive.executeQuery(Executive.java:1201)
        at coldfusion.sql.Executive.executeQuery(Executive.java:1131)
        at coldfusion.sql.SqlImpl.execute(SqlImpl.java:406)
        at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:1059)
        at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:688)
    ...
    

    I've been able to reproduce the problem with a simple query like this:

    SELECT * FROM sys.tables
    

    However, this query works just fine (when the application server performs its query statement processing and binds the VARCHAR parameter as "foo"):

    SELECT * FROM sys.tables WHERE name = 'foo'
    

    This is the content of my spy.properties file:

    driverlist=net.sourceforge.jtds.jdbc.Driver,com.microsoft.sqlserver.jdbc.SQLServerDriver
    reloadproperties=true
    reloadpropertiesinterval=30
    append=true
    appender=com.p6spy.engine.spy.appender.FileLogger
    logfile=/home/tomcat/servers/myapp/logs/spy.log
    

    Switching from the Microsoft JDBC (v4.0.2206.100) driver to the jTDS JDBC (1.3.1) driver shows the same problem with a similar stack trace:

    java.lang.ArrayIndexOutOfBoundsException: 0
        at com.p6spy.engine.logging.P6LogResultSetDelegate.invoke(P6LogResultSetDelegate.java:45)
        at com.p6spy.engine.proxy.GenericInvocationHandler.invoke(GenericInvocationHandler.java:116)
        at $java.sql.Statement$$EnhancerByCGLIB$$207673e7.getResultSet(<generated>)
        at coldfusion.server.j2ee.sql.JRunStatement.getResultSet(JRunStatement.java:283)
        at coldfusion.sql.Executive.getRowSet(Executive.java:609)
        at coldfusion.sql.Executive.executeQuery(Executive.java:1470)
        at coldfusion.sql.Executive.executeQuery(Executive.java:1201)
        at coldfusion.sql.Executive.executeQuery(Executive.java:1131)
        at coldfusion.sql.SqlImpl.execute(SqlImpl.java:406)
        at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:1059)
        at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:688)
    ...
    
    Defect 
    opened by jlamoree 12
  • Add support for newline separated JSON

    Add support for newline separated JSON

    In our applications we try to write all the logs to stdout in a newline separated JSON format. One applications can have different types of logs:

    • access logs
    • logs from the app itself
    • p6spy logs

    Our logging tool allows us to filter out the log we need. We can implement JSON logging for p6spy in our own library, but would a configurable JSON format be a useful feature to include in the p6spy library itself? If we make a PR, would it have a chance of being accepted?

    opened by thijslemmens 0
  • Not clear how to use ErrorLoggingEventListener

    Not clear how to use ErrorLoggingEventListener

    I want P6Spy to log SQL warnings/exceptions. I ran across ErrorLoggingEventListener whose Javadoc recommends:

    add com.p6spy.engine.logging.ErrorLoggingEventListener to the file
    src/main/resources/META-INF/services/com.p6spy.engine.logging.LoggingEventListener
    

    However, when I do this nothing gets logged. Is it possible to add error logging without disabling the default event listener?

    opened by cowwoc 1
  • Potential issue in PreparedStatementInformation::getSqlWithValues

    Potential issue in PreparedStatementInformation::getSqlWithValues

    I refer to the following line of code:

    https://github.com/p6spy/p6spy/blob/e0aa88e82ceaaa60f6bfcc478a2e0fdc175a81a2/src/main/java/com/p6spy/engine/common/PreparedStatementInformation.java#L53

    Assume there is a prepared stement with 10 binding parameters - that is, a ? occurs 10 times in the query. I sometimes see in the Hibernate logs that not all parameters are always get bound to a value (for whatever reason - I'm currently investigating on this). Now let's assume Hibernate bound parameters 3 to 10 in my example query. That is, parameterValues.size()) will yield 8. In this case, the if-statment will no try to get parameter 9 and 10 from the parameterValues. IMHO, Line 53 should better skip the size()-check on parameterValueswhich simplifies the if-statement to:

    if( statementQuery.charAt(pos) == '?') {

    Kind regards, Roland - a passionate user of p6spy :)

    opened by rgeierger 2
  • Generate a log from db procedure

    Generate a log from db procedure

    Hello, I have a question about registering procedures from the oracle database. I am currently able to register the following result:

    {CALL TEST_ADD_PROC(?,?,?)} P_B:24, P_A:2

    Is it possible to register the procedure as follows ?:

    {CALL TEST_ADD_PROC(p_a => 2,p_b=>24, p_sum => ?)}

    opened by KrzysztofFyrla 0
  • Project members/owners needed. Apply here.

    Project members/owners needed. Apply here.

    I cannot comment for others, but I really have no time to invest in this project any more. There seems to be however a demand for the features and bug fixes as well as there are people contributing pull requests. I know how frustrating it can be if there is no acceptance of those. So let put this very openly: Who would be interested to become a member? (To be able to review and merge PRs as release new versions). Please comment here and in the optimal case, please also refer to your existing contributions (either here or at the other open source projects). Thank you!

    Help needed 
    opened by typekpb 1
Releases(p6spy-3.9.1)
Owner
p6spy
p6spy
Logstash - transport and process your logs, events, or other data

Logstash Logstash is part of the Elastic Stack along with Beats, Elasticsearch and Kibana. Logstash is a server-side data processing pipeline that ing

elastic 13.2k Jan 5, 2023
The reliable, generic, fast and flexible logging framework for Java.

About logback Thank you for your interest in logback, the reliable, generic, fast and flexible logging library for Java. The Logback documentation can

QOS.CH Sarl 2.6k Jan 7, 2023
tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android

tinylog 2 Example import org.tinylog.Logger; public class Application { public static void main(String[] args) { Logger.info("Hello

tinylog.org 547 Dec 30, 2022
tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android

tinylog 2 Example import org.tinylog.Logger; public class Application { public static void main(String[] args) { Logger.info("Hello

tinylog.org 551 Jan 4, 2023
Highly efficient garbage-free logging framework for Java 8+

Garbage Free Log Highly efficient garbage-free logging framework for Java 8+. Use Add the following dependencies to your project: implementation 'com.

EPAM Systems 37 Dec 12, 2022
Sidekick is a live application debugger that lets you troubleshoot your applications while they keep on running

Explore Docs » Quick Start Tutorial » Table of Contents What is Sidekick? Sidekick Actions Why Sidekick? Features Who should use Sidekick? How does Si

Sidekick 1.6k Jan 6, 2023
Echopraxia - Java Logging API with clean and simple structured logging and conditional & contextual features. Logback implementation based on logstash-logback-encoder.

Echopraxia Echopraxia is a Java logging API that and is designed around structured logging, rich context, and conditional logging. There is a Logback-

Terse Systems 43 Nov 30, 2022
An extensible Java library for HTTP request and response logging

Logbook: HTTP request and response logging Logbook noun, /lɑɡ bʊk/: A book in which measurements from the ship's log are recorded, along with other sa

Zalando SE 1.3k Dec 29, 2022
Best-of-breed OpenTracing utilities, instrumentations and extensions

OpenTracing Toolbox OpenTracing Toolbox is a collection of libraries that build on top of OpenTracing and provide extensions and plugins to existing i

Zalando SE 181 Oct 15, 2022
Free and open source log management

Graylog Welcome! Graylog is an open source log management platform. You can read more about the project on our website and check out the documentation

Graylog 6.4k Jan 6, 2023
The Apache Software Foundation 3k Jan 4, 2023
Best-of-breed OpenTracing utilities, instrumentations and extensions

OpenTracing Toolbox OpenTracing Toolbox is a collection of libraries that build on top of OpenTracing and provide extensions and plugins to existing i

Zalando SE 181 Oct 15, 2022
Log sourcing is method of trying to map all the ERROR and WARN logs you have in your system in a cost effective way.

log-sourcing Log sourcing is method of trying to map all the ERROR and WARN logs you have in your system in a cost effective way. The basic idea is th

Shimon Magal 12 Apr 19, 2021
Logging filters for Spring WebFlux client and server request/responses

webflux-log Logging filters for Spring WebFlux client and server request/responses. Usage To log WebClient request/response, do the following specify

null 10 Nov 29, 2022
PortalLogger - Logs portals into a text file and in chat

Logs portals into a text file and in chat. Useful if afk flying under bedrock. Feel free to add to your client The logs are stored in .minecraft/ARTEMIS/PortalLogger

null 7 Dec 2, 2022
Web-based notebook that enables data-driven, interactive data analytics and collaborative documents with SQL, Scala and more.

Apache Zeppelin Documentation: User Guide Mailing Lists: User and Dev mailing list Continuous Integration: Contributing: Contribution Guide Issue Trac

The Apache Software Foundation 5.9k Jan 8, 2023
A distributed data integration framework that simplifies common aspects of big data integration such as data ingestion, replication, organization and lifecycle management for both streaming and batch data ecosystems.

Apache Gobblin Apache Gobblin is a highly scalable data management solution for structured and byte-oriented data in heterogeneous data ecosystems. Ca

The Apache Software Foundation 2.1k Jan 4, 2023