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

org.kawanfw.sql.api.server.firewall.trigger.JsonLoggerSqlFirewallTrigger Maven / Gradle / Ivy

/*
 * Copyright (c)2022 KawanSoft S.A.S. All rights reserved.
 * 
 * Use of this software is governed by the Business Source License included
 * in the LICENSE.TXT file in the project's root directory.
 *
 * Change Date: 2026-11-01
 *
 * On the date above, in accordance with the Business Source License, use
 * of this software will be governed by version 2.0 of the Apache License.
 */
package org.kawanfw.sql.api.server.firewall.trigger;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.kawanfw.sql.api.server.SqlEvent;
import org.kawanfw.sql.api.server.firewall.SqlFirewallManager;
import org.kawanfw.sql.api.server.logging.LoggerCreator;
import org.kawanfw.sql.servlet.util.SqlFirewallTriggerUtil;
import org.kawanfw.sql.servlet.util.logging.GenericLoggerCreator;
import org.kawanfw.sql.servlet.util.logging.LoggerCreatorProperties;
import org.kawanfw.sql.servlet.util.logging.LoggerWrapper;
import org.kawanfw.sql.util.FrameworkDebug;
import org.slf4j.Logger;

/**
 * A trigger that will log using JSON format the {@code SqlEvent} info
 * and the {@code sqlFirewallManager} class name.
 * 
 * @author Nicolas de Pomereu
 * @since 11.0
 */

public class JsonLoggerSqlFirewallTrigger implements SqlFirewallTrigger {

    /** The debug flag */
    private static boolean DEBUG = FrameworkDebug.isSet(JsonLoggerSqlFirewallTrigger.class);

    private static Logger ACEQL_LOGGER = null;
    private static Map LOGGER_ELEMENTS = new ConcurrentHashMap<>();
        
    /**
     * Logs using JSON format the {@code SqlEvent} and the
     * {@code SqlFirewallManager} class name into a {@code Logger} with parameters:
     * 
    *
  • Name: {@code sonLoggerSqlFirewallTrigger}
  • *
  • File name pattern: {@code user.home/.kawansoft/log/JsonLoggerSqlFirewallTrigger_%d.log.%i} (example of file * created: {@code JsonLoggerSqlFirewallTrigger_2022-07-01.log.1}.).
  • *
  • Pattern of each line of log: "%msg%n"
  • *
  • Maximum File Size: 300Mb
  • *
  • Total Size Cap: 30Gb
  • *
* These default values may be superseded by creating a * {@code JsonLoggerSqlFirewallTrigger.properties} file in * {@code user.home/.kawansoft/conf}.
*
* * See the JsonLoggerSqlFirewallTrigger.properties * format.
*
*
*/ @Override public void runIfStatementRefused(SqlEvent sqlEvent, SqlFirewallManager sqlFirewallManager, Connection connection) throws IOException, SQLException { String jsonString = SqlFirewallTriggerUtil.toJsonString(sqlEvent, sqlFirewallManager); if (ACEQL_LOGGER == null) { LoggerCreator loggerCreator = getLoggerCreator(); ACEQL_LOGGER = loggerCreator.getLogger(); LOGGER_ELEMENTS = loggerCreator.getElements(); } LoggerWrapper.log(ACEQL_LOGGER, jsonString); } /** * Returns the Logger elements (for debug purpose) * * @return the lOGGER_ELEMENTS */ public static Map getLoggerElements() { return LOGGER_ELEMENTS; } /** * Builds a {@code LoggerCreator} for Json logging. * @return the created {@code LoggerCreator} * @throws IOException */ private LoggerCreator getLoggerCreator() throws IOException { String fileNamePattern = this.getClass().getSimpleName() + "_%d.log.%i"; LoggerCreatorProperties loggerCreatorProperties = LoggerCreatorProperties .getFileBasedProperties(this.getClass().getSimpleName()); LoggerCreator loggerCreator = null; if (loggerCreatorProperties != null) { debug("loggerCreatorProperties: " + loggerCreatorProperties.toString()); loggerCreator = GenericLoggerCreator.newBuilder().name(this.getClass().getSimpleName()) .fileNamePattern(fileNamePattern).pattern(loggerCreatorProperties.getPattern()) .logDirectory(loggerCreatorProperties.getLogDirectory()) .maxFileSize(loggerCreatorProperties.getMaxFileSize()) .totalSizeCap(loggerCreatorProperties.getTotalSizeCap()) .displayOnConsole(loggerCreatorProperties.isDisplayOnConsole()) .displayLogStatusMessages(loggerCreatorProperties.isDisplayLogStatusMessages()).build(); } else { debug("loggerCreatorProperties is null!"); loggerCreator = GenericLoggerCreator.newBuilder().name(this.getClass().getSimpleName()) .fileNamePattern(fileNamePattern).pattern("%msg%n") // Empty pattern .build(); } return loggerCreator; } /** * Debug tool * * @param s */ private static void debug(String s) { if (DEBUG) { System.out.println(new Date() + " " + s); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy