Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.logging.log4j.core.appender.routing;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import javax.script.Bindings;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Core;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LifeCycle2;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.appender.rewrite.RewritePolicy;
import org.apache.logging.log4j.core.config.AppenderControl;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.Node;
import org.apache.logging.log4j.core.config.Property;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.script.AbstractScript;
import org.apache.logging.log4j.core.script.ScriptManager;
import org.apache.logging.log4j.core.script.ScriptRef;
import org.apache.logging.log4j.core.util.Booleans;
/**
* This Appender "routes" between various Appenders, some of which can be references to
* Appenders defined earlier in the configuration while others can be dynamically created
* within this Appender as required. Routing is achieved by specifying a pattern on
* the Routing appender declaration. The pattern should contain one or more substitution patterns of
* the form "$${[key:]token}". The pattern will be resolved each time the Appender is called using
* the built in StrSubstitutor and the StrLookup plugin that matches the specified key.
*/
@Plugin(name = "Routing", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE, printObject = true)
public final class RoutingAppender extends AbstractAppender {
public static final String STATIC_VARIABLES_KEY = "staticVariables";
public static class Builder> extends AbstractAppender.Builder
implements org.apache.logging.log4j.core.util.Builder {
// Does not work unless the element is called "Script", I wanted "DefaultRounteScript"...
@PluginElement("Script")
private AbstractScript defaultRouteScript;
@PluginElement("Routes")
private Routes routes;
@PluginElement("RewritePolicy")
private RewritePolicy rewritePolicy;
@PluginElement("PurgePolicy")
private PurgePolicy purgePolicy;
@Override
public RoutingAppender build() {
final String name = getName();
if (name == null) {
LOGGER.error("No name defined for this RoutingAppender");
return null;
}
if (routes == null) {
LOGGER.error("No routes defined for RoutingAppender {}", name);
return null;
}
if (defaultRouteScript != null) {
if (getConfiguration().getScriptManager() == null) {
LOGGER.error("Script support is not enabled");
return null;
}
if (!(defaultRouteScript instanceof ScriptRef)) {
if (!getConfiguration().getScriptManager().addScript(defaultRouteScript)) {
return null;
}
}
}
return new RoutingAppender(
name,
getFilter(),
isIgnoreExceptions(),
routes,
rewritePolicy,
getConfiguration(),
purgePolicy,
defaultRouteScript,
getPropertyArray());
}
public Routes getRoutes() {
return routes;
}
public AbstractScript getDefaultRouteScript() {
return defaultRouteScript;
}
public RewritePolicy getRewritePolicy() {
return rewritePolicy;
}
public PurgePolicy getPurgePolicy() {
return purgePolicy;
}
public B withRoutes(@SuppressWarnings("hiding") final Routes routes) {
this.routes = routes;
return asBuilder();
}
public B withDefaultRouteScript(@SuppressWarnings("hiding") final AbstractScript defaultRouteScript) {
this.defaultRouteScript = defaultRouteScript;
return asBuilder();
}
public B withRewritePolicy(@SuppressWarnings("hiding") final RewritePolicy rewritePolicy) {
this.rewritePolicy = rewritePolicy;
return asBuilder();
}
public void withPurgePolicy(@SuppressWarnings("hiding") final PurgePolicy purgePolicy) {
this.purgePolicy = purgePolicy;
}
}
@PluginBuilderFactory
public static > B newBuilder() {
return new Builder().asBuilder();
}
private static final String DEFAULT_KEY = "ROUTING_APPENDER_DEFAULT";
private final Routes routes;
private Route defaultRoute;
private final Configuration configuration;
private final ConcurrentMap createdAppenders = new ConcurrentHashMap<>();
private final Map createdAppendersUnmodifiableView =
Collections.unmodifiableMap((Map) (Map) createdAppenders);
private final ConcurrentMap referencedAppenders = new ConcurrentHashMap<>();
private final RewritePolicy rewritePolicy;
private final PurgePolicy purgePolicy;
private final AbstractScript defaultRouteScript;
private final ConcurrentMap