Search in sources :

Example 1 with StringBuilderFormattable

use of org.apache.logging.log4j.util.StringBuilderFormattable in project logging-log4j2 by apache.

the class MessagePatternConverter method format.

/**
     * {@inheritDoc}
     */
@Override
public void format(final LogEvent event, final StringBuilder toAppendTo) {
    final Message msg = event.getMessage();
    if (msg instanceof StringBuilderFormattable) {
        final boolean doRender = textRenderer != null;
        final StringBuilder workingBuilder = doRender ? new StringBuilder(80) : toAppendTo;
        final StringBuilderFormattable stringBuilderFormattable = (StringBuilderFormattable) msg;
        final int offset = workingBuilder.length();
        stringBuilderFormattable.formatTo(workingBuilder);
        // TODO can we optimize this?
        if (config != null && !noLookups) {
            for (int i = offset; i < workingBuilder.length() - 1; i++) {
                if (workingBuilder.charAt(i) == '$' && workingBuilder.charAt(i + 1) == '{') {
                    final String value = workingBuilder.substring(offset, workingBuilder.length());
                    workingBuilder.setLength(offset);
                    workingBuilder.append(config.getStrSubstitutor().replace(event, value));
                }
            }
        }
        if (doRender) {
            textRenderer.render(workingBuilder, toAppendTo);
        }
        return;
    }
    if (msg != null) {
        String result;
        if (msg instanceof MultiformatMessage) {
            result = ((MultiformatMessage) msg).getFormattedMessage(formats);
        } else {
            result = msg.getFormattedMessage();
        }
        if (result != null) {
            toAppendTo.append(config != null && result.contains("${") ? config.getStrSubstitutor().replace(event, result) : result);
        } else {
            toAppendTo.append("null");
        }
    }
}
Also used : MultiformatMessage(org.apache.logging.log4j.message.MultiformatMessage) Message(org.apache.logging.log4j.message.Message) StringBuilderFormattable(org.apache.logging.log4j.util.StringBuilderFormattable) MultiformatMessage(org.apache.logging.log4j.message.MultiformatMessage)

Example 2 with StringBuilderFormattable

use of org.apache.logging.log4j.util.StringBuilderFormattable in project logging-log4j2 by apache.

the class GelfLayout method toText.

private StringBuilder toText(final LogEvent event, final StringBuilder builder, final boolean gcFree) {
    builder.append('{');
    builder.append("\"version\":\"1.1\",");
    builder.append("\"host\":\"");
    JsonUtils.quoteAsString(toNullSafeString(host), builder);
    builder.append(QC);
    builder.append("\"timestamp\":").append(formatTimestamp(event.getTimeMillis())).append(C);
    builder.append("\"level\":").append(formatLevel(event.getLevel())).append(C);
    if (event.getThreadName() != null) {
        builder.append("\"_thread\":\"");
        JsonUtils.quoteAsString(event.getThreadName(), builder);
        builder.append(QC);
    }
    if (event.getLoggerName() != null) {
        builder.append("\"_logger\":\"");
        JsonUtils.quoteAsString(event.getLoggerName(), builder);
        builder.append(QC);
    }
    if (additionalFields.length > 0) {
        final StrSubstitutor strSubstitutor = getConfiguration().getStrSubstitutor();
        for (final KeyValuePair additionalField : additionalFields) {
            builder.append(QU);
            JsonUtils.quoteAsString(additionalField.getKey(), builder);
            builder.append("\":\"");
            final String value = valueNeedsLookup(additionalField.getValue()) ? strSubstitutor.replace(event, additionalField.getValue()) : additionalField.getValue();
            JsonUtils.quoteAsString(toNullSafeString(value), builder);
            builder.append(QC);
        }
    }
    if (includeThreadContext) {
        event.getContextData().forEach(WRITE_KEY_VALUES_INTO, builder);
    }
    if (event.getThrown() != null) {
        builder.append("\"full_message\":\"");
        if (includeStacktrace) {
            JsonUtils.quoteAsString(formatThrowable(event.getThrown()), builder);
        } else {
            JsonUtils.quoteAsString(event.getThrown().toString(), builder);
        }
        builder.append(QC);
    }
    builder.append("\"short_message\":\"");
    final Message message = event.getMessage();
    if (message instanceof CharSequence) {
        JsonUtils.quoteAsString(((CharSequence) message), builder);
    } else if (gcFree && message instanceof StringBuilderFormattable) {
        final StringBuilder messageBuffer = getMessageStringBuilder();
        try {
            ((StringBuilderFormattable) message).formatTo(messageBuffer);
            JsonUtils.quoteAsString(messageBuffer, builder);
        } finally {
            trimToMaxSize(messageBuffer);
        }
    } else {
        JsonUtils.quoteAsString(toNullSafeString(message.getFormattedMessage()), builder);
    }
    builder.append(Q);
    builder.append('}');
    if (includeNullDelimiter) {
        builder.append('\0');
    }
    return builder;
}
Also used : StrSubstitutor(org.apache.logging.log4j.core.lookup.StrSubstitutor) KeyValuePair(org.apache.logging.log4j.core.util.KeyValuePair) Message(org.apache.logging.log4j.message.Message) StringBuilderFormattable(org.apache.logging.log4j.util.StringBuilderFormattable)

Aggregations

Message (org.apache.logging.log4j.message.Message)2 StringBuilderFormattable (org.apache.logging.log4j.util.StringBuilderFormattable)2 StrSubstitutor (org.apache.logging.log4j.core.lookup.StrSubstitutor)1 KeyValuePair (org.apache.logging.log4j.core.util.KeyValuePair)1 MultiformatMessage (org.apache.logging.log4j.message.MultiformatMessage)1