logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Bowman (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LOG4J2-1628) File locking regression for Async FileAppender
Date Fri, 30 Sep 2016 22:56:20 GMT

    [ https://issues.apache.org/jira/browse/LOG4J2-1628?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15537325#comment-15537325
] 

Mark Bowman commented on LOG4J2-1628:
-------------------------------------

{noformat}
package org.lcogt.commons.log;

import org.apache.logging.log4j.core.LogEvent;
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.PluginFactory;
import org.apache.logging.log4j.core.layout.AbstractStringLayout;
import org.apache.logging.log4j.message.Message;
import org.json.simple.JSONValue;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.util.Date;

/**
 * A Log4J layout that formats messages to adhere to LCOGT standards
 * http://intranet.lco.gtn/Software:Logging_Best_Practice
 * Created by ariba on 8/26/15.
 * Ported to log4j2 by mbowman 4th November 2015
 */
@Plugin(name = "LCOGTLayout", category = "Core", elementType = "layout")
public class LCOGTLayout extends AbstractStringLayout
{
    protected LCOGTLayout(Charset charset)
    {
        super(charset);
    }

    @PluginFactory
    public static LCOGTLayout createLayout(@PluginAttribute(value = "charset", defaultString
= "UTF-8") Charset charset)
    {
        return new LCOGTLayout(charset);
    }

    private static final ConcurrentDateFormatAccess dfa = new ConcurrentDateFormatAccess();


    @Override
    public String toSerializable(LogEvent loggingEvent)
    {
        Message message = loggingEvent.getMessage();
        StringBuilder builder = new StringBuilder();
        builder.append(dfa.format(new Date(loggingEvent.getTimeMillis()))).append(" ");
        builder.append(loggingEvent.getLevel()).append(": ");
        builder.append(loggingEvent.getLoggerName()).append(": ");

        builder.append(message.getFormattedMessage());

        if (loggingEvent.getThrown() != null)
        {
            builder.append("\n").append(getStackTrace(loggingEvent.getThrown()));
        }

        builder.append(" | ");

        builder.append(JSONValue.toJSONString(loggingEvent.getContextMap()));

        builder.append("\n");
        return builder.toString();
    }

    /**
     * Get the stack trace for the specified exception as a string
     *
     * @param t Exception to get stack trace
     * @return Stack trace as string
     */
    private String getStackTrace(Throwable t)
    {
        String stackTrace = "";
        if (t != null)
        {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw, true);
            t.printStackTrace(pw);
            pw.flush();
            sw.flush();
            stackTrace = sw.toString();
        }
        return stackTrace;
    }
}
{noformat}

> File locking regression for Async FileAppender
> ----------------------------------------------
>
>                 Key: LOG4J2-1628
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1628
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.6.2
>         Environment: centos
>            Reporter: Mark Bowman
>
> We have several threads writing to an async file with locking set to true. Under log4j
2.5 the message from each thread are interleaved correctly. Using log4j 2.6.2 some messages
are scrambled as if multiple threads are writing to the file simultaneously. Reverting to
2.5 fixes the problem.
> Configuration to follow.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message