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

org.noorm.jdbc.LoggingHelper Maven / Gradle / Ivy

package org.noorm.jdbc;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;

/**
 * Helper class for extensive SQL logging in DEBUG logging level.
 *
 * @author Ulf Pietruschka / [email protected]
 *         Date: 20.01.19
 *         Time: 16:31
 */
public class LoggingHelper {

    private static final Logger log = LoggerFactory.getLogger(LoggingHelper.class);

    public void debugSQLCall(final String pTableName,
                             final Map pQueryParameters,
                             final Class pBeanClass,
                             final FilterExtension pFilterExtension) {

        final StringBuilder formattedParameters = new StringBuilder();
        formattedParameters.append("Executing SQL statement on table ").append(pTableName);
        if (pFilterExtension != null) {
            formattedParameters.append("\nFilter extension: Offset: ");
            formattedParameters.append(pFilterExtension.getOffset());
            formattedParameters.append(", Limit: ");
            formattedParameters.append(pFilterExtension.getLimit());
            for (final FilterExtension.SortCriteria sortCriteria : pFilterExtension.getSortCriteria()) {
                formattedParameters.append("\n  ").append(sortCriteria.getColumnName());
                formattedParameters.append(" / ").append(sortCriteria.getDirection());
            }
        }
        log.debug(debugQueryColumns(formattedParameters, pQueryParameters, pBeanClass).toString());
    }

    public void debugUpdate(final String pTableName,
                            final Map pUpdateParameters,
                            final Map pQueryParameters,
                            final Class pBeanClass) {

        final StringBuilder formattedParameters = new StringBuilder();
        formattedParameters.append("Executing UPDATE statement on table ").append(pTableName);
        String prefix = "\nUpdate parameters: ";
        for (final String updateColumn : pUpdateParameters.keySet()) {
            final Object parameter = pUpdateParameters.get(updateColumn);
            String parameterToString = Utils.getParameter2String(parameter);
            formattedParameters.append(prefix).append(updateColumn).append(" = ").append(parameterToString);
            prefix = "\n                  ";
        }
        log.debug(debugQueryColumns(formattedParameters, pQueryParameters, pBeanClass).toString());
    }

    public void debugDelete(final String pTableName,
                            final Map pQueryParameters,
                            final Class pBeanClass) {

        final StringBuilder formattedParameters = new StringBuilder();
        formattedParameters.append("Executing DELETE statement on table ").append(pTableName);
        log.debug(debugQueryColumns(formattedParameters, pQueryParameters, pBeanClass).toString());
    }

    private StringBuilder debugQueryColumns(final StringBuilder formattedParameters,
                                            final Map pQueryParameters,
                                            final Class pBeanClass) {
        if (pQueryParameters != null) {
            String prefix = "\nQuery parameters: ";
            for (final QueryColumn queryColumn : pQueryParameters.keySet()) {
                final String paramName = queryColumn.getColumnName();
                final Object parameter = pQueryParameters.get(queryColumn);
                String parameterToString = Utils.getParameter2String(parameter);
                formattedParameters.append(prefix).append(paramName)
                        .append(queryColumn.getOperator().getOperatorSyntax()).append(parameterToString);
                prefix = "\n                  ";
            }
        }
        if (pBeanClass != null) {
            formattedParameters.append("\nBean Class:        ").append(pBeanClass.getName());
        }
        return formattedParameters;
    }

    public void debugDML(final String pTableName, final String pSequenceName, final String pStatement) {

        final StringBuilder logMessage = new StringBuilder();
        if (pStatement.toUpperCase().startsWith("INSERT")) {
            logMessage.append("Inserting into ").append(pTableName);
            logMessage.append(" with sequence ").append(pSequenceName);
            logMessage.append(".\n");
            logMessage.append("Using insert statement: ").append(pStatement);
        } else {
            if (pStatement.toUpperCase().startsWith("UPDATE")) {
                logMessage.append("Updating ").append(pTableName);
                logMessage.append(".\n");
                logMessage.append("Using update statement: ").append(pStatement);
            } else { // DELETE
                logMessage.append("Deleting from ").append(pTableName);
                logMessage.append(".\n");
                logMessage.append("Using delete statement: ").append(pStatement);
            }
        }
        log.debug(logMessage.toString());
    }

    public void debugProcedureCall(final String pCallable,
                                   final Map pInParameters,
                                   final Class pBeanClass) {

        final StringBuilder formattedParameters = new StringBuilder();
        formattedParameters.append("Calling stored procedure ").append(pCallable);
        if (pInParameters != null) {
            String prefix = "\nInput parameters: ";
            for (final String paramName : pInParameters.keySet()) {
                final Object parameter = pInParameters.get(paramName);
                String parameterToString = Utils.getParameter2String(parameter);
                formattedParameters.append(prefix).append(paramName).append(" : ").append(parameterToString);
                prefix = "\n                  ";
            }
        }
        if (pBeanClass != null) {
            formattedParameters.append("\nBean Class:        ").append(pBeanClass.getName());
        }
        log.debug(formattedParameters.toString());
    }

    public void debugProcedureTermination(final String pCallable,
                                          final int pRowsProcessed) {

        StringBuilder logMessage = new StringBuilder();
        logMessage.append("Stored procedure ").append(pCallable).append(" successfully terminated. ");
        if (pRowsProcessed >= 0) {
            logMessage.append(Integer.toString(pRowsProcessed)).append(" rows processed.");
        }
        log.debug(logMessage.toString());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy