| /* |
| * 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.async; |
| |
| import org.apache.logging.log4j.Level; |
| import org.apache.logging.log4j.Marker; |
| import org.apache.logging.log4j.core.LogEvent; |
| import org.apache.logging.log4j.core.appender.AsyncAppender; |
| import org.apache.logging.log4j.message.Message; |
| |
| /** |
| * Enumeration over the different destinations where a log event can be sent. |
| * |
| * @see AsyncQueueFullPolicy |
| * @see AsyncQueueFullPolicyFactory |
| * @see DefaultAsyncQueueFullPolicy |
| * @see DiscardingAsyncQueueFullPolicy |
| * @since 2.6 |
| */ |
| public enum EventRoute { |
| /** |
| * Enqueues the event for asynchronous logging in the background thread. |
| */ |
| ENQUEUE { |
| @Override |
| public void logMessage(final AsyncLogger asyncLogger, final String fqcn, final Level level, |
| final Marker marker, final Message message, final Throwable thrown) { |
| } |
| |
| @Override |
| public void logMessage(final AsyncLoggerConfig asyncLoggerConfig, final LogEvent event) { |
| asyncLoggerConfig.logInBackgroundThread(event); |
| } |
| |
| @Override |
| public void logMessage(final AsyncAppender asyncAppender, final LogEvent logEvent) { |
| asyncAppender.logMessageInBackgroundThread(logEvent); |
| } |
| }, |
| /** |
| * Logs the event synchronously: sends the event directly to the appender (in the current thread). |
| * WARNING: This may result in lines logged out of order as synchronous events may be persisted before |
| * earlier events, even from the same thread, which wait in the queue. |
| */ |
| SYNCHRONOUS { |
| @Override |
| public void logMessage(final AsyncLogger asyncLogger, final String fqcn, final Level level, |
| final Marker marker, final Message message, final Throwable thrown) { |
| } |
| |
| @Override |
| public void logMessage(final AsyncLoggerConfig asyncLoggerConfig, final LogEvent event) { |
| asyncLoggerConfig.logToAsyncLoggerConfigsOnCurrentThread(event); |
| } |
| |
| @Override |
| public void logMessage(final AsyncAppender asyncAppender, final LogEvent logEvent) { |
| asyncAppender.logMessageInCurrentThread(logEvent); |
| } |
| }, |
| /** |
| * Discards the event (so it is not logged at all). |
| */ |
| DISCARD { |
| @Override |
| public void logMessage(final AsyncLogger asyncLogger, final String fqcn, final Level level, |
| final Marker marker, final Message message, final Throwable thrown) { |
| // do nothing: drop the event |
| } |
| |
| @Override |
| public void logMessage(final AsyncLoggerConfig asyncLoggerConfig, final LogEvent event) { |
| // do nothing: drop the event |
| } |
| |
| @Override |
| public void logMessage(final AsyncAppender asyncAppender, final LogEvent coreEvent) { |
| // do nothing: drop the event |
| } |
| }; |
| |
| public abstract void logMessage(final AsyncLogger asyncLogger, final String fqcn, final Level level, |
| final Marker marker, final Message message, final Throwable thrown); |
| |
| public abstract void logMessage(final AsyncLoggerConfig asyncLoggerConfig, final LogEvent event); |
| |
| public abstract void logMessage(final AsyncAppender asyncAppender, final LogEvent coreEvent); |
| } |