package org.apereo.cas.logging; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.appender.AbstractAppender; import org.apache.logging.log4j.core.config.AppenderRef; 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.PluginElement; import org.apache.logging.log4j.core.config.plugins.PluginFactory; import org.apache.logging.log4j.core.layout.PatternLayout; import org.springframework.util.Assert; /** * This is {@link CasAppender}. * * @author Misagh Moayyed * @since 5.0.0 */ @Plugin(name = "CasAppender", category = "Core", elementType = "appender", printObject = true) public class CasAppender extends AbstractAppender { private static final long serialVersionUID = 3744758323628847477L; private Configuration config; private AppenderRef appenderRef; /** * Instantiates a new Cas appender. * * @param name the name * @param config the config * @param appenderRef the appender ref */ public CasAppender(final String name, final Configuration config, final AppenderRef appenderRef) { super(name, null, PatternLayout.createDefaultLayout()); Assert.notNull(config, "Log configuration cannot be null"); Assert.notNull(config, "Appender reference configuration cannot be null"); this.config = config; this.appenderRef = appenderRef; } @Override public void append(final LogEvent logEvent) { final LogEvent newLogEvent = LoggingUtils.prepareLogEvent(logEvent); final String refName = this.appenderRef.getRef(); if (StringUtils.isNotBlank(refName)) { final Appender appender = this.config.getAppender(refName); if (appender != null) { appender.append(newLogEvent); } else { LOGGER.warn("No log appender could be found for [{}]", refName); } } else { LOGGER.warn("No log appender reference could be located in logging configuration."); } } /** * Create appender cas appender. * * @param name the name * @param appenderRef the appender ref * @param config the config * @return the cas appender */ @PluginFactory public static CasAppender build(@PluginAttribute("name") final String name, @PluginElement("AppenderRef") final AppenderRef appenderRef, @PluginConfiguration final Configuration config) { return new CasAppender(name, config, appenderRef); } }