/*
* 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
*
* http://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.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: http://www.jooq.org/licenses
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq.tools;
import org.jooq.ExecuteContext;
import org.jooq.ExecuteListener;
import org.jooq.ExecuteListenerProvider;
A default ExecuteListener
that just logs events to java.util.logging, log4j, or slf4j using the JooqLogger
. This is a stateful listener, meaning it has a reference to a StopWatch
that is shared among all query executions that use this same StopWatchListener
. If the instance is shared among query executions, the listener measures the time passed since the first initialisation. In order to let it measure the time for each individual query execution afresh, use an ExecuteListenerProvider
to create new instances every time:
configuration.set(StopWatchListener::new)
Author: Lukas Eder
/**
* A default {@link ExecuteListener} that just logs events to java.util.logging,
* log4j, or slf4j using the {@link JooqLogger}.
* <p>
* This is a stateful listener, meaning it has a reference to a
* {@link StopWatch} that is shared among all query executions that use this
* same {@link StopWatchListener}. If the instance is shared among query
* executions, the listener measures the time passed since the first
* initialisation. In order to let it measure the time for each individual query
* execution afresh, use an {@link ExecuteListenerProvider} to create new
* instances every time:
* <p>
*
* <pre>
* <code>
* configuration.set(StopWatchListener::new)
* </code>
* </pre>
*
* @author Lukas Eder
*/
public class StopWatchListener implements ExecuteListener {
Generated UID
/**
* Generated UID
*/
private static final long serialVersionUID = 7399239846062763212L;
private final StopWatch watch = new StopWatch();
@Override
public void start(ExecuteContext ctx) {
watch.splitTrace("Initialising");
}
@Override
public void renderStart(ExecuteContext ctx) {
watch.splitTrace("Rendering query");
}
@Override
public void renderEnd(ExecuteContext ctx) {
watch.splitTrace("Query rendered");
}
@Override
public void prepareStart(ExecuteContext ctx) {
watch.splitTrace("Preparing statement");
}
@Override
public void prepareEnd(ExecuteContext ctx) {
watch.splitTrace("Statement prepared");
}
@Override
public void bindStart(ExecuteContext ctx) {
watch.splitTrace("Binding variables");
}
@Override
public void bindEnd(ExecuteContext ctx) {
watch.splitTrace("Variables bound");
}
@Override
public void executeStart(ExecuteContext ctx) {
watch.splitTrace("Executing query");
}
@Override
public void executeEnd(ExecuteContext ctx) {
watch.splitDebug("Query executed");
}
@Override
public void outStart(ExecuteContext ctx) {
watch.splitDebug("Fetching out values");
}
@Override
public void outEnd(ExecuteContext ctx) {
watch.splitDebug("Out values fetched");
}
@Override
public void fetchStart(ExecuteContext ctx) {
watch.splitTrace("Fetching results");
}
@Override
public void resultStart(ExecuteContext ctx) {
watch.splitTrace("Fetching result");
}
@Override
public void recordStart(ExecuteContext ctx) {
watch.splitTrace("Fetching record");
}
@Override
public void recordEnd(ExecuteContext ctx) {
watch.splitTrace("Record fetched");
}
@Override
public void resultEnd(ExecuteContext ctx) {
watch.splitTrace("Result fetched");
}
@Override
public void fetchEnd(ExecuteContext ctx) {
watch.splitTrace("Results fetched");
}
@Override
public void end(ExecuteContext ctx) {
watch.splitDebug("Finishing");
}
@Override
public void exception(ExecuteContext ctx) {
watch.splitDebug("Exception");
}
@Override
public void warning(ExecuteContext ctx) {
watch.splitDebug("Warning");
}
}