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

be.yildizgames.common.logging.logback.LogbackConfigFileGenerator Maven / Gradle / Ivy

There is a newer version: 1.1.40
Show newest version
/*
 * This file is part of the Yildiz-Engine project, licenced under the MIT License  (MIT)
 *
 *  Copyright (c) 2019 Grégory Van den Borre
 *
 *  More infos available: https://engine.yildiz-games.be
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 *  documentation files (the "Software"), to deal in the Software without restriction, including without
 *  limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 *  of the Software, and to permit persons to whom the Software is furnished to do so,
 *  subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all copies or substantial
 *  portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 *  WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
 *  OR COPYRIGHT  HOLDERS BE LIABLE FOR ANY CLAIM,
 *  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  SOFTWARE.
 *
 */
package be.yildizgames.common.logging.logback;

import be.yildizgames.common.logging.LoggerConfiguration;

import java.util.ArrayList;
import java.util.List;

/**
 * Generate a logback configuration file.
 *
 * @author Grégory Van den Borre
 */
class LogbackConfigFileGenerator {

    /**
     * Simple indentation spaces.
     */
    private static final String INDENT = "  ";

    /**
     * Double indentation spaces.
     */
    private static final String INDENT2 = INDENT + INDENT;

    /**
     * TCP output.
     */
    private static final String TCP = "TCP";

    /**
     * File output.
     */
    private static final String FILE = "FILE";

    /**
     * Console output.
     */
    private static final String CONSOLE = "CONSOLE";

    /**
     * Appender tag.
     */
    private static final String APPENDER_NAME = INDENT + "";

    /**
     * Encoder tag.
     */
    private static final String ENCODER = INDENT2 + "\n";

    /**
     * Closed pattern tag.
     */
    private static final String PATTERN_CLOSE = "\n";

    /**
     * Closed appender tag.
     */
    private static final String APPENDER_CLOSE = INDENT + "\n";

    /**
     * Closed encoder tag.
     */
    private static final String ENCODER_CLOSE = INDENT2 + "\n";

    /**
     * Generate the content from the configuration.
     *
     * @param configuration Configuration to use.
     * @return The generated content.
     */
    final String generate(final LoggerConfiguration configuration) {
        LogbackLoggerLevelMapper mapper = new LogbackLoggerLevelMapper();
        StringBuilder builder = new StringBuilder();
        builder.append("\n");
        List appender = new ArrayList<>();
        for(LoggerConfiguration.SupportedOutput out : configuration.getLoggerOutputs()) {
            switch (out) {
                case TCP:
                    this.generateTcp(builder, configuration);
                    appender.add(TCP);
                    break;
                case FILE:
                    this.generateFile(builder, configuration);
                    appender.add(FILE);
                    break;
                default:
                    this.generateConsole(builder, configuration);
                    appender.add(CONSOLE);
                    break;
            }
        }
        builder
                .append("  \n");

        appender.forEach(a -> builder
                .append("    \n"));
        builder.append("  \n");

        for (String disabled : configuration.getLoggerToDisable()) {
            if (!disabled.isEmpty() && !disabled.isBlank()) {
                builder.append("  \n");
            }
        }
        builder.append("\n");
        return builder.toString();
    }

    /**
     * Generate content for the console output.
     *
     * @param builder       stringBuilder.
     * @param configuration configuration to use.
     */
    private void generateConsole(StringBuilder builder, LoggerConfiguration configuration) {
        builder
                .append(APPENDER_NAME)
                .append(CONSOLE)
                .append("\" class=\"ch.qos.logback.core.ConsoleAppender\">\n")
                .append(ENCODER)
                .append(PATTERN)
                .append(configuration.getLoggerPattern())
                .append(PATTERN_CLOSE)
                .append(ENCODER_CLOSE)
                .append(APPENDER_CLOSE);
    }

    /**
     * Generate content for the file output.
     *
     * @param builder       stringBuilder.
     * @param configuration configuration to use.
     */
    private void generateFile(StringBuilder builder, LoggerConfiguration configuration) {
        builder
                .append("  \n")
                .append(APPENDER_NAME)
                .append(FILE)
                .append("\" class=\"ch.qos.logback.core.FileAppender\">\n")
                .append("    ")
                .append(configuration.getLoggerOutputFile())
                .append("-${byDay}.txt \n")
                .append("    true\n")
                .append(ENCODER)
                .append(PATTERN)
                .append(configuration.getLoggerPattern())
                .append(PATTERN_CLOSE)
                .append(ENCODER_CLOSE)
                .append(APPENDER_CLOSE);
    }

    /**
     * Generate content for the tcp output.
     *
     * @param builder       stringBuilder.
     * @param configuration configuration to use.
     */
    private void generateTcp(StringBuilder builder, LoggerConfiguration configuration) {
        builder
                .append(APPENDER_NAME)
                .append(TCP)
                .append("\" class=\"com.splunk.logging.TcpAppender\">\n")
                .append("    ")
                .append(configuration.getLoggerTcpHost())
                .append("\n")
                .append("    ")
                .append(configuration.getLoggerTcpPort())
                .append("\n")
                .append("    \n")
                .append(PATTERN)
                .append(configuration.getLoggerPattern())
                .append(PATTERN_CLOSE)
                .append("    \n")
                .append(APPENDER_CLOSE);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy