logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: logging-log4j2 git commit: [LOG4J2-1482] Improper header in CsvParameterLayout.
Date Thu, 04 Aug 2016 01:27:27 GMT
I implemented the fix this way because it seems wrong to have the default
log event factory coded in the AbstactStringLayout. Right now this use case
is only for headers and footers. So the changes make that explicit by
accessing the default log event factory from the header and footer methods.

Yes, it would be nice if we did not need a dummy log event in the first
place to create headers and footers. I was worried that going down that
road would be too big of a change.

I am open to fixing this differently of course. At least, we now have unit
tests :-)

> The problem seems to be in Serializer. It is still unclear to me why
Serializer needs a LogEvent, (away from PC now) but I assume it is because
of StrSubstitutor.

Yeah, needs a bit more digging.

> I would like it much better if StrSubstitutor could be fixed so that a
LogEvent becomes optional, or, if that is not feasible,

Yeah, maybe it's a matter of passing null for the log event and making sure
we have null checks in the right places.

Gary

On Wed, Aug 3, 2016 at 4:09 PM, Remko Popma <remko.popma@gmail.com> wrote:

> Why is this fixed in AbstactStringLayout, with ripple effect to JSON and
> YAML layouts?
>
> The problem seems to be in Serializer. It is still unclear to me why
> Serializer needs a LogEvent, (away from PC now) but I assume it is because
> of StrSubstitutor.
>
> I would like it much better if StrSubstitutor could be fixed so that a
> LogEvent becomes optional, or, if that is not feasible,
>
> Sent from my iPhone
>
> > On 2016/08/04, at 7:03, ggregory@apache.org wrote:
> >
> > Repository: logging-log4j2
> > Updated Branches:
> >  refs/heads/master 0f1b0dc00 -> ffc6c8f68
> >
> >
> > [LOG4J2-1482] Improper header in CsvParameterLayout.
> >
> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> > Commit:
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ffc6c8f6
> > Tree:
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ffc6c8f6
> > Diff:
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ffc6c8f6
> >
> > Branch: refs/heads/master
> > Commit: ffc6c8f68d260e8e14b140f0f05cbc77081efc2c
> > Parents: 0f1b0dc
> > Author: Gary Gregory <ggregory@apache.org>
> > Authored: Wed Aug 3 15:03:26 2016 -0700
> > Committer: Gary Gregory <ggregory@apache.org>
> > Committed: Wed Aug 3 15:03:26 2016 -0700
> >
> > ----------------------------------------------------------------------
> > .../log4j/core/impl/DefaultLogEventFactory.java |  5 ++
> > .../log4j/core/layout/AbstractStringLayout.java | 14 +--
> > .../logging/log4j/core/layout/JsonLayout.java   |  5 +-
> > .../logging/log4j/core/layout/YamlLayout.java   |  5 +-
> > .../log4j/core/layout/Log4j2_1482_CoreTest.java | 20 +++++
> > .../log4j/core/layout/Log4j2_1482_Test.java     | 89 ++++++++++++++++++++
> > log4j-core/src/test/resources/log4j2-1482.xml   | 27 ++++++
> > log4j-slf4j-impl/pom.xml                        |  5 ++
> > .../logging/slf4j/Log4j2_1482_Slf4jTest.java    | 41 +++++++++
> > .../src/test/resources/log4j2-1482.xml          | 27 ++++++
> > src/changes/changes.xml                         |  3 +
> > 11 files changed, 231 insertions(+), 10 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
> > index ef74c50..127b02a 100644
> > ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
> > +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
> > @@ -29,6 +29,11 @@ import org.apache.logging.log4j.message.Message;
> >  */
> > public class DefaultLogEventFactory implements LogEventFactory {
> >
> > +    private static final DefaultLogEventFactory instance = new
> DefaultLogEventFactory();
> > +
> > +    public static DefaultLogEventFactory getInstance() {
> > +        return instance;
> > +    }
> >
> >     /**
> >      * Creates a log event.
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
> > index 9e6270e..5ac98e7 100644
> > ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
> > +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
> > @@ -20,6 +20,8 @@ import org.apache.logging.log4j.core.LogEvent;
> > import org.apache.logging.log4j.core.StringLayout;
> > import org.apache.logging.log4j.core.config.Configuration;
> > import org.apache.logging.log4j.core.config.LoggerConfig;
> > +import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
> > +import org.apache.logging.log4j.core.impl.LogEventFactory;
> > import org.apache.logging.log4j.core.util.Constants;
> > import org.apache.logging.log4j.core.util.StringEncoder;
> > import org.apache.logging.log4j.util.PropertiesUtil;
> > @@ -202,7 +204,7 @@ public abstract class AbstractStringLayout extends
> AbstractLayout<String> implem
> >      */
> >     @Override
> >     public byte[] getFooter() {
> > -        return serializeToBytes(footerSerializer, super.getFooter());
> > +        return serializeToBytes(footerSerializer, super.getFooter(),
> DefaultLogEventFactory.getInstance());
> >     }
> >
> >     public Serializer getFooterSerializer() {
> > @@ -216,28 +218,28 @@ public abstract class AbstractStringLayout extends
> AbstractLayout<String> implem
> >      */
> >     @Override
> >     public byte[] getHeader() {
> > -        return serializeToBytes(headerSerializer, super.getHeader());
> > +        return serializeToBytes(headerSerializer, super.getHeader(),
> DefaultLogEventFactory.getInstance());
> >     }
> >
> >     public Serializer getHeaderSerializer() {
> >         return headerSerializer;
> >     }
> >
> > -    protected byte[] serializeToBytes(final Serializer serializer,
> final byte[] defaultValue) {
> > -        final String serializable = serializeToString(serializer);
> > +    protected byte[] serializeToBytes(final Serializer serializer,
> final byte[] defaultValue, final LogEventFactory logEventFactory) {
> > +        final String serializable = serializeToString(serializer,
> logEventFactory);
> >         if (serializer == null) {
> >             return defaultValue;
> >         }
> >         return StringEncoder.toBytes(serializable, getCharset());
> >     }
> >
> > -    protected String serializeToString(final Serializer serializer) {
> > +    protected String serializeToString(final Serializer serializer,
> final LogEventFactory logEventFactory) {
> >         if (serializer == null) {
> >             return null;
> >         }
> >         final LoggerConfig rootLogger =
> getConfiguration().getRootLogger();
> >         // Using "" for the FQCN, does it matter?
> > -        final LogEvent logEvent =
> rootLogger.getLogEventFactory().createEvent(rootLogger.getName(), null,
> Strings.EMPTY,
> > +        final LogEvent logEvent =
> logEventFactory.createEvent(rootLogger.getName(), null, Strings.EMPTY,
> >                 rootLogger.getLevel(), null, null, null);
> >         return serializer.toSerializable(logEvent);
> >     }
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
> > index e9d87ae..239a59f 100644
> > ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
> > +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
> > @@ -32,6 +32,7 @@ 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.PluginConfiguration;
> > import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> > +import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
> >
> > /**
> >  * Appends a series of JSON events as strings serialized as bytes.
> > @@ -828,7 +829,7 @@ public final class JsonLayout extends
> AbstractJacksonLayout {
> >             return null;
> >         }
> >         final StringBuilder buf = new StringBuilder();
> > -        final String str = serializeToString(getHeaderSerializer());
> > +        final String str = serializeToString(getHeaderSerializer(),
> DefaultLogEventFactory.getInstance());
> >         if (str != null) {
> >             buf.append(str);
> >         }
> > @@ -848,7 +849,7 @@ public final class JsonLayout extends
> AbstractJacksonLayout {
> >         }
> >         final StringBuilder buf = new StringBuilder();
> >         buf.append(this.eol);
> > -        final String str = serializeToString(getFooterSerializer());
> > +        final String str = serializeToString(getFooterSerializer(),
> DefaultLogEventFactory.getInstance());
> >         if (str != null) {
> >             buf.append(str);
> >         }
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
> > index 6f3e103..4b7a0c6 100644
> > ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
> > +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
> > @@ -32,6 +32,7 @@ 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.PluginConfiguration;
> > import org.apache.logging.log4j.core.config.plugins.PluginFactory;
> > +import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
> > import org.apache.logging.log4j.util.Strings;
> >
> > /**
> > @@ -728,7 +729,7 @@ public final class YamlLayout extends
> AbstractJacksonLayout {
> >             return null;
> >         }
> >         final StringBuilder buf = new StringBuilder();
> > -        final String str = serializeToString(getHeaderSerializer());
> > +        final String str = serializeToString(getHeaderSerializer(),
> DefaultLogEventFactory.getInstance());
> >         if (str != null) {
> >             buf.append(str);
> >         }
> > @@ -748,7 +749,7 @@ public final class YamlLayout extends
> AbstractJacksonLayout {
> >         }
> >         final StringBuilder buf = new StringBuilder();
> >         buf.append(this.eol);
> > -        final String str = serializeToString(getFooterSerializer());
> > +        final String str = serializeToString(getFooterSerializer(),
> DefaultLogEventFactory.getInstance());
> >         if (str != null) {
> >             buf.append(str);
> >         }
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java
> > new file mode 100644
> > index 0000000..24a38b6
> > --- /dev/null
> > +++
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java
> > @@ -0,0 +1,20 @@
> > +package org.apache.logging.log4j.core.layout;
> > +
> > +import org.apache.logging.log4j.LogManager;
> > +import org.apache.logging.log4j.Logger;
> > +
> > +public class Log4j2_1482_CoreTest extends Log4j2_1482_Test {
> > +
> > +    @Override
> > +    protected void log(int runNumber) {
> > +        if (runNumber == 2) {
> > +            // System.out.println("Set a breakpoint here.");
> > +        }
> > +        final Logger logger = LogManager.getLogger("auditcsvfile");
> > +        final int val1 = 9, val2 = 11, val3 = 12;
> > +        logger.info("Info Message!", val1, val2, val3);
> > +        logger.info("Info Message!", val1, val2, val3);
> > +        logger.info("Info Message!", val1, val2, val3);
> > +    }
> > +
> > +}
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java
> > new file mode 100644
> > index 0000000..d25a6ac
> > --- /dev/null
> > +++
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java
> > @@ -0,0 +1,89 @@
> > +/*
> > + * 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.layout;
> > +
> > +import java.io.File;
> > +import java.io.IOException;
> > +import java.nio.charset.Charset;
> > +import java.nio.file.Files;
> > +import java.nio.file.Path;
> > +import java.nio.file.Paths;
> > +import java.util.Arrays;
> > +import java.util.List;
> > +
> > +import org.apache.logging.log4j.core.LoggerContext;
> > +import org.apache.logging.log4j.core.config.Configurator;
> > +import org.apache.logging.log4j.junit.CleanFolders;
> > +import org.junit.Assert;
> > +import org.junit.Rule;
> > +import org.junit.Test;
> > +
> > +/**
> > + * Tests https://issues.apache.org/jira/browse/LOG4J2-1482
> > + */
> > +public abstract class Log4j2_1482_Test {
> > +
> > +    static final String CONFIG_LOCATION = "log4j2-1482.xml";
> > +
> > +    static final String FOLDER = "target/log4j2-1482";
> > +
> > +    private static final int LOOP_COUNT = 10;
> > +
> > +    static void assertFileContents(int runNumber) throws IOException {
> > +        Path path = Paths.get(FOLDER + "/audit.tmp");
> > +        List<String> lines = Files.readAllLines(path,
> Charset.defaultCharset());
> > +        int i = 1;
> > +        final int size = lines.size();
> > +        for (String string : lines) {
> > +            if (string.startsWith(",,")) {
> > +                Path folder = Paths.get(FOLDER);
> > +                File[] files = folder.toFile().listFiles();
> > +                Arrays.sort(files);
> > +                System.out.println("Run " + runNumber + ": " +
> Arrays.toString(files));
> > +                Assert.fail(
> > +                        String.format("Run %,d, line %,d of %,d: \"%s\"
> in %s", runNumber, i++, size, string, lines));
> > +            }
> > +        }
> > +    }
> > +
> > +    @Rule
> > +    public CleanFolders cleanFolders = new CleanFolders(FOLDER);
> > +
> > +    protected abstract void log(int runNumber) ;
> > +
> > +    private void loopingRun(int loopCount) throws IOException {
> > +        for (int i = 1; i <= loopCount; i++) {
> > +            try (LoggerContext loggerContext =
> Configurator.initialize(getClass().getName(),
> > +                    CONFIG_LOCATION)) {
> > +                log(i);
> > +            }
> > +            assertFileContents(i);
> > +        }
> > +    }
> > +
> > +    @Test
> > +    public void testLoopingRun() throws IOException {
> > +        loopingRun(LOOP_COUNT);
> > +    }
> > +
> > +    @Test
> > +    public void testSingleRun() throws IOException {
> > +        loopingRun(1);
> > +    }
> > +
> > +}
> > \ No newline at end of file
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/test/resources/log4j2-1482.xml
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/resources/log4j2-1482.xml
> b/log4j-core/src/test/resources/log4j2-1482.xml
> > new file mode 100644
> > index 0000000..e17953c
> > --- /dev/null
> > +++ b/log4j-core/src/test/resources/log4j2-1482.xml
> > @@ -0,0 +1,27 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<Configuration status="warn" name="MyApp" packages="">
> > +  <Properties>
> > +    <Property name="audit-path">target/log4j2-1482</Property>
> > +    <Property name="file-name">audit</Property>
> > +    <Property
> name="file-header">param1,param2,param3${sys:line.separator}
> > +    </Property>
> > +  </Properties>
> > +
> > +  <Appenders>
> > +    <RollingFile name="auditfile"
> fileName="${audit-path}/${file-name}.tmp"
> > +      filePattern="${audit-path}/${file-name}-%d{yyyy-MM-dd}-%i.csv">
> > +      <CsvParameterLayout delimiter="," header="${file-header}">
> > +      </CsvParameterLayout>
> > +      <Policies>
> > +        <SizeBasedTriggeringPolicy size="80 B" />
> > +      </Policies>
> > +      <DefaultRolloverStrategy max="2" />
> > +    </RollingFile>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="info">
> > +      <AppenderRef ref="auditfile" />
> > +    </Root>
> > +  </Loggers>
> > +</Configuration>
> > \ No newline at end of file
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-slf4j-impl/pom.xml
> > ----------------------------------------------------------------------
> > diff --git a/log4j-slf4j-impl/pom.xml b/log4j-slf4j-impl/pom.xml
> > index aca5799..21b02b1 100644
> > --- a/log4j-slf4j-impl/pom.xml
> > +++ b/log4j-slf4j-impl/pom.xml
> > @@ -58,6 +58,11 @@
> >       <scope>test</scope>
> >     </dependency>
> >     <dependency>
> > +      <groupId>org.apache.commons</groupId>
> > +      <artifactId>commons-csv</artifactId>
> > +      <scope>test</scope>
> > +    </dependency>
> > +    <dependency>
> >       <groupId>org.apache.logging.log4j</groupId>
> >       <artifactId>log4j-core</artifactId>
> >       <scope>test</scope>
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java
> b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java
> > new file mode 100644
> > index 0000000..d621e76
> > --- /dev/null
> > +++
> b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java
> > @@ -0,0 +1,41 @@
> > +/*
> > + * 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.slf4j;
> > +
> > +import org.apache.logging.log4j.core.layout.Log4j2_1482_Test;
> > +import org.slf4j.Logger;
> > +import org.slf4j.LoggerFactory;
> > +
> > +/**
> > + * Tests https://issues.apache.org/jira/browse/LOG4J2-1482
> > + */
> > +public class Log4j2_1482_Slf4jTest extends Log4j2_1482_Test {
> > +
> > +    @Override
> > +    protected void log(int runNumber) {
> > +        if (runNumber == 2) {
> > +            // System.out.println("Set a breakpoint here.");
> > +        }
> > +        final Logger logger = LoggerFactory.getLogger("auditcsvfile");
> > +        final int val1 = 9, val2 = 11, val3 = 12;
> > +        logger.info("Info Message!", val1, val2, val3);
> > +        logger.info("Info Message!", val1, val2, val3);
> > +        logger.info("Info Message!", val1, val2, val3);
> > +    }
> > +
> > +}
> > \ No newline at end of file
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml
> > ----------------------------------------------------------------------
> > diff --git a/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml
> b/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml
> > new file mode 100644
> > index 0000000..e17953c
> > --- /dev/null
> > +++ b/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml
> > @@ -0,0 +1,27 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<Configuration status="warn" name="MyApp" packages="">
> > +  <Properties>
> > +    <Property name="audit-path">target/log4j2-1482</Property>
> > +    <Property name="file-name">audit</Property>
> > +    <Property
> name="file-header">param1,param2,param3${sys:line.separator}
> > +    </Property>
> > +  </Properties>
> > +
> > +  <Appenders>
> > +    <RollingFile name="auditfile"
> fileName="${audit-path}/${file-name}.tmp"
> > +      filePattern="${audit-path}/${file-name}-%d{yyyy-MM-dd}-%i.csv">
> > +      <CsvParameterLayout delimiter="," header="${file-header}">
> > +      </CsvParameterLayout>
> > +      <Policies>
> > +        <SizeBasedTriggeringPolicy size="80 B" />
> > +      </Policies>
> > +      <DefaultRolloverStrategy max="2" />
> > +    </RollingFile>
> > +  </Appenders>
> > +
> > +  <Loggers>
> > +    <Root level="info">
> > +      <AppenderRef ref="auditfile" />
> > +    </Root>
> > +  </Loggers>
> > +</Configuration>
> > \ No newline at end of file
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/src/changes/changes.xml
> > ----------------------------------------------------------------------
> > diff --git a/src/changes/changes.xml b/src/changes/changes.xml
> > index b451094..31f280d 100644
> > --- a/src/changes/changes.xml
> > +++ b/src/changes/changes.xml
> > @@ -24,6 +24,9 @@
> >   </properties>
> >   <body>
> >     <release version="2.7" date="2016-MM-DD" description="GA Release
> 2.7">
> > +      <action issue="LOG4J2-1482" dev="ggregory" type="fix"
> due-to="Gary Gregory, Sumit Singhal">
> > +        Improper header in CsvParameterLayout.
> > +      </action>
> >       <action issue="LOG4J2-1199" dev="rpopma" type="fix">
> >         Document that JVM Input Arguments Lookup (JMX) is not available
> on Google App Engine.
> >       </action>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>
>


-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Mime
View raw message