/*
 * 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.message;

import java.io.Serializable;

Default factory for flow messages.
Since:2.6
/** * Default factory for flow messages. * * @since 2.6 */
public class DefaultFlowMessageFactory implements FlowMessageFactory, Serializable { private static final String EXIT_DEFAULT_PREFIX = "Exit"; private static final String ENTRY_DEFAULT_PREFIX = "Enter"; private static final long serialVersionUID = 8578655591131397576L; private final String entryText; private final String exitText;
Constructs a message factory with "Enter" and "Exit" as the default flow strings.
/** * Constructs a message factory with {@code "Enter"} and {@code "Exit"} as the default flow strings. */
public DefaultFlowMessageFactory() { this(ENTRY_DEFAULT_PREFIX, EXIT_DEFAULT_PREFIX); }
Constructs a message factory with the given entry and exit strings.
Params:
  • entryText – the text to use for trace entry, like "Enter".
  • exitText – the text to use for trace exit, like "Exit".
/** * Constructs a message factory with the given entry and exit strings. * @param entryText the text to use for trace entry, like {@code "Enter"}. * @param exitText the text to use for trace exit, like {@code "Exit"}. */
public DefaultFlowMessageFactory(final String entryText, final String exitText) { super(); this.entryText = entryText; this.exitText = exitText; } private static class AbstractFlowMessage implements FlowMessage { private static final long serialVersionUID = 1L; private final Message message; private final String text; AbstractFlowMessage(final String text, final Message message) { this.message = message; this.text = text; } @Override public String getFormattedMessage() { if (message != null) { return text + " " + message.getFormattedMessage(); } return text; } @Override public String getFormat() { if (message != null) { return text + ": " + message.getFormat(); } return text; } @Override public Object[] getParameters() { if (message != null) { return message.getParameters(); } return null; } @Override public Throwable getThrowable() { if (message != null) { return message.getThrowable(); } return null; } @Override public Message getMessage() { return message; } @Override public String getText() { return text; } } private static final class SimpleEntryMessage extends AbstractFlowMessage implements EntryMessage { private static final long serialVersionUID = 1L; SimpleEntryMessage(final String entryText, final Message message) { super(entryText, message); } } private static final class SimpleExitMessage extends AbstractFlowMessage implements ExitMessage { private static final long serialVersionUID = 1L; private final Object result; private final boolean isVoid; SimpleExitMessage(final String exitText, final EntryMessage message) { super(exitText, message.getMessage()); this.result = null; isVoid = true; } SimpleExitMessage(final String exitText, final Object result, final EntryMessage message) { super(exitText, message.getMessage()); this.result = result; isVoid = false; } SimpleExitMessage(final String exitText, final Object result, final Message message) { super(exitText, message); this.result = result; isVoid = false; } @Override public String getFormattedMessage() { final String formattedMessage = super.getFormattedMessage(); if (isVoid) { return formattedMessage; } return formattedMessage + ": " + result; } }
Gets the entry text.
Returns:the entry text.
/** * Gets the entry text. * @return the entry text. */
public String getEntryText() { return entryText; }
Gets the exit text.
Returns:the exit text.
/** * Gets the exit text. * @return the exit text. */
public String getExitText() { return exitText; } /* * (non-Javadoc) * * @see org.apache.logging.log4j.message.MessageFactory#newEntryMessage(org.apache.logging.log4j.message.Message) */ @Override public EntryMessage newEntryMessage(final Message message) { return new SimpleEntryMessage(entryText, makeImmutable(message)); } private Message makeImmutable(final Message message) { if (!(message instanceof ReusableMessage)) { return message; } return new SimpleMessage(message.getFormattedMessage()); } /* * (non-Javadoc) * * @see org.apache.logging.log4j.message.FlowMessageFactory#newExitMessage(org.apache.logging.log4j.message.EntryMessage) */ @Override public ExitMessage newExitMessage(final EntryMessage message) { return new SimpleExitMessage(exitText, message); } /* * (non-Javadoc) * * @see org.apache.logging.log4j.message.FlowMessageFactory#newExitMessage(java.lang.Object, org.apache.logging.log4j.message.EntryMessage) */ @Override public ExitMessage newExitMessage(final Object result, final EntryMessage message) { return new SimpleExitMessage(exitText, result, message); } /* * (non-Javadoc) * * @see org.apache.logging.log4j.message.FlowMessageFactory#newExitMessage(java.lang.Object, org.apache.logging.log4j.message.Message) */ @Override public ExitMessage newExitMessage(final Object result, final Message message) { return new SimpleExitMessage(exitText, result, message); } }