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

biz.paluch.logging.gelf.log4j2.GelfLogField Maven / Gradle / Ivy

There is a newer version: 1.15.1
Show newest version
package biz.paluch.logging.gelf.log4j2;

import static org.apache.logging.log4j.core.layout.PatternLayout.newBuilder;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;

/**
 * Configuration for a log field.
 */
@Plugin(name = "Field", category = "Core", printObject = true)
public class GelfLogField {

    private static final Logger LOGGER = StatusLogger.getLogger();

    private String name;
    private String literal;
    private String mdc;
    private PatternLayout patternLayout;

    public GelfLogField(String name, String literal, String mdc, PatternLayout patternLayout) {
        this.name = name;
        this.literal = literal;
        this.mdc = mdc;
        this.patternLayout = patternLayout;
    }

    public String getName() {
        return name;
    }

    public String getLiteral() {
        return literal;
    }

    public String getMdc() {
        return mdc;
    }

    public PatternLayout getPatternLayout() {
        return patternLayout;
    }

    @PluginFactory
    public static GelfLogField createField(@PluginConfiguration final Configuration config,
            @PluginAttribute("name") String name, @PluginAttribute("literal") String literalValue,
            @PluginAttribute("mdc") String mdc, @PluginAttribute("pattern") String pattern) {

        final boolean isPattern = Strings.isNotEmpty(pattern);
        final boolean isLiteralValue = Strings.isNotEmpty(literalValue);
        final boolean isMDC = Strings.isNotEmpty(mdc);

        if (Strings.isEmpty(name)) {
            LOGGER.error("The name is empty");
            return null;
        }

        if ((isPattern && isLiteralValue) || (isPattern && isMDC) || (isLiteralValue && isMDC)) {
            LOGGER.error("The pattern, literal, and mdc attributes are mutually exclusive.");
            return null;
        }

        if (isPattern) {

            PatternLayout patternLayout = newBuilder().withPattern(pattern).withConfiguration(config)
                    .withNoConsoleNoAnsi(false).withAlwaysWriteExceptions(false).build();

            return new GelfLogField(name, null, null, patternLayout);
        }

        return new GelfLogField(name, literalValue, mdc, null);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy