Do I need to check if configuration is null? What to do if it is?

On Jan 7, 2017 10:33 PM, "Matt Sicker" <boa...@gmail.com> wrote:

> What do you mean?
>
> On 7 January 2017 at 15:03, Mikael Ståldal <mikael.stal...@magine.com>
> wrote:
>
>> No fields are mandatory (any more). However, I added protection against
>> additional fields being null.
>>
>> What about configuration from AbstractLayout.Builder?
>>
>> On Jan 4, 2017 2:55 AM, "Matt Sicker" <boa...@gmail.com> wrote:
>>
>>> You're missing a @Required on the mandatory field(s) (or a null check in
>>> the build method).
>>>
>>> ---------- Forwarded message ----------
>>> From: <mi...@apache.org>
>>> Date: 3 January 2017 at 15:09
>>> Subject: logging-log4j2 git commit: LOG4J-1762 Add Builder to GelfLayout
>>> To: comm...@logging.apache.org
>>>
>>>
>>> Repository: logging-log4j2
>>> Updated Branches:
>>>   refs/heads/master ce3bd9a59 -> 014300908
>>>
>>>
>>> LOG4J-1762 Add Builder to GelfLayout
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit
>>> /01430090
>>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/0
>>> 1430090
>>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/0
>>> 1430090
>>>
>>> Branch: refs/heads/master
>>> Commit: 0143009081516481e587a3a90e83beee7fff9f18
>>> Parents: ce3bd9a
>>> Author: Mikael Ståldal <mikael.stal...@magine.com>
>>> Authored: Tue Jan 3 22:09:22 2017 +0100
>>> Committer: Mikael Ståldal <mikael.stal...@magine.com>
>>> Committed: Tue Jan 3 22:09:22 2017 +0100
>>>
>>> ----------------------------------------------------------------------
>>>  .../logging/log4j/core/layout/GelfLayout.java   | 132
>>> ++++++++++++++++++-
>>>  .../log4j/core/layout/GelfLayoutTest.java       |  10 +-
>>>  .../log4j/core/layout/GelfLayoutTest2.java      |  48 +++++++
>>>  .../src/test/resources/GelfLayoutTest2.xml      |  33 +++++
>>>  .../log4j/perf/jmh/GelfLayoutBenchmark.java     |  13 +-
>>>  src/site/xdoc/manual/layouts.xml.vm             |   2 +-
>>>  6 files changed, 225 insertions(+), 13 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0
>>> 1430090/log4j-core/src/main/java/org/apache/logging/log4j/co
>>> re/layout/GelfLayout.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayout.java
>>> index 2f4853c..f7826d0 100644
>>> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayout.java
>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayout.java
>>> @@ -30,19 +30,21 @@ import java.util.zip.GZIPOutputStream;
>>>  import org.apache.logging.log4j.Level;
>>>  import org.apache.logging.log4j.core.Layout;
>>>  import org.apache.logging.log4j.core.LogEvent;
>>> +import org.apache.logging.log4j.core.config.Configuration;
>>>  import org.apache.logging.log4j.core.config.Node;
>>>  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.PluginBuilderAt
>>> tribute;
>>> +import org.apache.logging.log4j.core.config.plugins.PluginBuilderFa
>>> ctory;
>>>  import org.apache.logging.log4j.core.config.plugins.PluginElement;
>>> -import org.apache.logging.log4j.core.config.plugins.PluginFactory;
>>>  import org.apache.logging.log4j.core.net.Severity;
>>>  import org.apache.logging.log4j.core.util.JsonUtils;
>>>  import org.apache.logging.log4j.core.util.KeyValuePair;
>>> -import org.apache.logging.log4j.util.TriConsumer;
>>>  import org.apache.logging.log4j.message.Message;
>>>  import org.apache.logging.log4j.status.StatusLogger;
>>>  import org.apache.logging.log4j.util.StringBuilderFormattable;
>>>  import org.apache.logging.log4j.util.Strings;
>>> +import org.apache.logging.log4j.util.TriConsumer;
>>>
>>>  /**
>>>   * Lays out events in the Graylog Extended Log Format (GELF) 1.1.
>>> @@ -107,6 +109,110 @@ public final class GelfLayout extends
>>> AbstractStringLayout {
>>>      private final String host;
>>>      private final boolean includeStacktrace;
>>>
>>> +    public static class Builder<B extends Builder<B>> extends
>>> AbstractStringLayout.Builder<B>
>>> +        implements org.apache.logging.log4j.core.util.Builder<GelfLayout>
>>> {
>>> +
>>> +        @PluginBuilderAttribute
>>> +        private String host;
>>> +
>>> +        @PluginElement("AdditionalField")
>>> +        private KeyValuePair[] additionalFields;
>>> +
>>> +        @PluginBuilderAttribute
>>> +        private CompressionType compressionType = CompressionType.GZIP;
>>> +
>>> +        @PluginBuilderAttribute
>>> +        private int compressionThreshold = COMPRESSION_THRESHOLD;
>>> +
>>> +        @PluginBuilderAttribute
>>> +        private boolean includeStacktrace = true;
>>> +
>>> +        public Builder() {
>>> +            super();
>>> +            setCharset(StandardCharsets.UTF_8);
>>> +        }
>>> +
>>> +        @Override
>>> +        public GelfLayout build() {
>>> +            return new GelfLayout(getConfiguration(), host,
>>> additionalFields, compressionType, compressionThreshold, includeStacktrace);
>>> +        }
>>> +
>>> +        public String getHost() {
>>> +            return host;
>>> +        }
>>> +
>>> +        public CompressionType getCompressionType() {
>>> +            return compressionType;
>>> +        }
>>> +
>>> +        public int getCompressionThreshold() {
>>> +            return compressionThreshold;
>>> +        }
>>> +
>>> +        public boolean isIncludeStacktrace() {
>>> +            return includeStacktrace;
>>> +        }
>>> +
>>> +        public KeyValuePair[] getAdditionalFields() {
>>> +            return additionalFields;
>>> +        }
>>> +
>>> +        /**
>>> +         * The value of the <code>host</code> property (mandatory).
>>> +         *
>>> +         * @return this builder
>>> +         */
>>> +        public B setHost(String host) {
>>> +            this.host = host;
>>> +            return asBuilder();
>>> +        }
>>> +
>>> +        /**
>>> +         * Compression to use (optional, defaults to GZIP).
>>> +         *
>>> +         * @return this builder
>>> +         */
>>> +        public B setCompressionType(CompressionType compressionType) {
>>> +            this.compressionType = compressionType;
>>> +            return asBuilder();
>>> +        }
>>> +
>>> +        /**
>>> +         * Compress if data is larger than this number of bytes
>>> (optional, defaults to 1024).
>>> +         *
>>> +         * @return this builder
>>> +         */
>>> +        public B setCompressionThreshold(int compressionThreshold) {
>>> +            this.compressionThreshold = compressionThreshold;
>>> +            return asBuilder();
>>> +        }
>>> +
>>> +        /**
>>> +         * Whether to include full stacktrace of logged Throwables
>>> (optional, default to true).
>>> +         * If set to false, only the class name and message of the
>>> Throwable will be included.
>>> +         *
>>> +         * @return this builder
>>> +         */
>>> +        public B setIncludeStacktrace(boolean includeStacktrace) {
>>> +            this.includeStacktrace = includeStacktrace;
>>> +            return asBuilder();
>>> +        }
>>> +
>>> +        /**
>>> +         * Additional fields to set on each log event.
>>> +         *
>>> +         * @return this builder
>>> +         */
>>> +        public B setAdditionalFields(KeyValuePair[] additionalFields) {
>>> +            this.additionalFields = additionalFields;
>>> +            return asBuilder();
>>> +        }
>>> +    }
>>> +
>>> +    /**
>>> +     * @deprecated Use {@link #newBuilder()} instead
>>> +     */
>>> +    @Deprecated
>>>      public GelfLayout(final String host, final KeyValuePair[]
>>> additionalFields, final CompressionType compressionType,
>>>                        final int compressionThreshold, final boolean
>>> includeStacktrace) {
>>>          super(StandardCharsets.UTF_8);
>>> @@ -117,7 +223,20 @@ public final class GelfLayout extends
>>> AbstractStringLayout {
>>>          this.includeStacktrace = includeStacktrace;
>>>      }
>>>
>>> -    @PluginFactory
>>> +    private GelfLayout(final Configuration config, final String host,
>>> final KeyValuePair[] additionalFields, final CompressionType
>>> compressionType,
>>> +               final int compressionThreshold, final boolean
>>> includeStacktrace) {
>>> +        super(config, StandardCharsets.UTF_8, null, null);
>>> +        this.host = host;
>>> +        this.additionalFields = additionalFields;
>>> +        this.compressionType = compressionType;
>>> +        this.compressionThreshold = compressionThreshold;
>>> +        this.includeStacktrace = includeStacktrace;
>>> +    }
>>> +
>>> +    /**
>>> +     * @deprecated Use {@link #newBuilder()} instead
>>> +     */
>>> +    @Deprecated
>>>      public static GelfLayout createLayout(
>>>              //@formatter:off
>>>              @PluginAttribute("host") final String host,
>>> @@ -129,7 +248,12 @@ public final class GelfLayout extends
>>> AbstractStringLayout {
>>>              @PluginAttribute(value = "includeStacktrace",
>>>                  defaultBoolean = true) final boolean includeStacktrace)
>>> {
>>>              // @formatter:on
>>> -        return new GelfLayout(host, additionalFields, compressionType,
>>> compressionThreshold, includeStacktrace);
>>> +        return new GelfLayout(null, host, additionalFields,
>>> compressionType, compressionThreshold, includeStacktrace);
>>> +    }
>>> +
>>> +    @PluginBuilderFactory
>>> +    public static <B extends Builder<B>> B newBuilder() {
>>> +        return new Builder<B>().asBuilder();
>>>      }
>>>
>>>      @Override
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0
>>> 1430090/log4j-core/src/test/java/org/apache/logging/log4j/co
>>> re/layout/GelfLayoutTest.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayoutTest.java
>>> index 268d5d3..68d77f9 100644
>>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayoutTest.java
>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayoutTest.java
>>> @@ -83,9 +83,15 @@ public class GelfLayoutTest {
>>>              root.removeAppender(appender);
>>>          }
>>>          // set up appenders
>>> -        final GelfLayout layout = GelfLayout.createLayout(HOSTNAME,
>>> new KeyValuePair[] {
>>> +        final GelfLayout layout = GelfLayout.newBuilder()
>>> +            .setHost(HOSTNAME)
>>> +            .setAdditionalFields(new KeyValuePair[] {
>>>                  new KeyValuePair(KEY1, VALUE1),
>>> -                new KeyValuePair(KEY2, VALUE2), }, compressionType,
>>> 1024, includeStacktrace);
>>> +                new KeyValuePair(KEY2, VALUE2), })
>>> +            .setCompressionType(compressionType)
>>> +            .setCompressionThreshold(1024)
>>> +            .setIncludeStacktrace(includeStacktrace)
>>> +            .build();
>>>          final ListAppender eventAppender = new ListAppender("Events",
>>> null, null, true, false);
>>>          final ListAppender rawAppender = new ListAppender("Raw", null,
>>> layout, true, true);
>>>          final ListAppender formattedAppender = new
>>> ListAppender("Formatted", null, layout, true, false);
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0
>>> 1430090/log4j-core/src/test/java/org/apache/logging/log4j/co
>>> re/layout/GelfLayoutTest2.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest2.java
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayoutTest2.java
>>> new file mode 100644
>>> index 0000000..edbf7b1
>>> --- /dev/null
>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lay
>>> out/GelfLayoutTest2.java
>>> @@ -0,0 +1,48 @@
>>> +/*
>>> + * 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.IOException;
>>> +
>>> +import com.fasterxml.jackson.databind.JsonNode;
>>> +import com.fasterxml.jackson.databind.ObjectMapper;
>>> +import org.apache.logging.log4j.Logger;
>>> +import org.apache.logging.log4j.junit.LoggerContextRule;
>>> +import org.junit.ClassRule;
>>> +import org.junit.Test;
>>> +
>>> +import static org.junit.Assert.assertEquals;
>>> +
>>> +public class GelfLayoutTest2 {
>>> +
>>> +    @ClassRule
>>> +    public static LoggerContextRule context = new
>>> LoggerContextRule("GelfLayoutTest2.xml");
>>> +
>>> +    @Test
>>> +    public void gelfLayout() throws IOException {
>>> +        Logger logger = context.getLogger();
>>> +        logger.info("Message");
>>> +        String gelf = context.getListAppender("list"
>>> ).getMessages().get(0);
>>> +        ObjectMapper mapper = new ObjectMapper();
>>> +        JsonNode json = mapper.readTree(gelf);
>>> +        assertEquals("Message", json.get("short_message").asText());
>>> +        assertEquals("myhost", json.get("host").asText());
>>> +        assertEquals("FOO", json.get("_foo").asText());
>>> +    }
>>> +
>>> +}
>>> +
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0
>>> 1430090/log4j-core/src/test/resources/GelfLayoutTest2.xml
>>> ----------------------------------------------------------------------
>>> diff --git a/log4j-core/src/test/resources/GelfLayoutTest2.xml
>>> b/log4j-core/src/test/resources/GelfLayoutTest2.xml
>>> new file mode 100644
>>> index 0000000..f501185
>>> --- /dev/null
>>> +++ b/log4j-core/src/test/resources/GelfLayoutTest2.xml
>>> @@ -0,0 +1,33 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<!--
>>> + 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.
>>> +
>>> +-->
>>> +<Configuration status="OFF" name="GelfLayoutTest2">
>>> +  <Appenders>
>>> +    <List name="list">
>>> +      <GelfLayout host="myhost">
>>> +        <KeyValuePair key="foo" value="FOO"/>
>>> +      </GelfLayout>
>>> +    </List>
>>> +  </Appenders>
>>> +
>>> +  <Loggers>
>>> +    <Root level="info">
>>> +      <AppenderRef ref="list"/>
>>> +    </Root>
>>> +  </Loggers>
>>> +</Configuration>
>>> \ No newline at end of file
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0
>>> 1430090/log4j-perf/src/main/java/org/apache/logging/log4j/pe
>>> rf/jmh/GelfLayoutBenchmark.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/GelfLayoutBenchmark.java
>>> b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh
>>> /GelfLayoutBenchmark.java
>>> index 041be85..9ab0fc2 100644
>>> --- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh
>>> /GelfLayoutBenchmark.java
>>> +++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh
>>> /GelfLayoutBenchmark.java
>>> @@ -78,12 +78,13 @@ public class GelfLayoutBenchmark {
>>>      public void setUp() {
>>>          System.setProperty("log4j2.enable.direct.encoders", "true");
>>>
>>> -        appender = new DemoAppender(new GelfLayout(
>>> -                "host",
>>> -                ADDITIONAL_FIELDS,
>>> -                GelfLayout.CompressionType.OFF,
>>> -                0,
>>> -                true));
>>> +        appender = new DemoAppender(GelfLayout.newBuilder()
>>> +                .setHost("host")
>>> +                .setAdditionalFields(ADDITIONAL_FIELDS)
>>> +                .setCompressionType(GelfLayout.CompressionType.OFF)
>>> +                .setCompressionThreshold(0)
>>> +                .setIncludeStacktrace(true)
>>> +                .build());
>>>
>>>          j = 0;
>>>      }
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0
>>> 1430090/src/site/xdoc/manual/layouts.xml.vm
>>> ----------------------------------------------------------------------
>>> diff --git a/src/site/xdoc/manual/layouts.xml.vm
>>> b/src/site/xdoc/manual/layouts.xml.vm
>>> index 73517cb..ba0dc20 100644
>>> --- a/src/site/xdoc/manual/layouts.xml.vm
>>> +++ b/src/site/xdoc/manual/layouts.xml.vm
>>> @@ -225,7 +225,7 @@ logger.debug("one={}, two={}, three={}", 1, 2, 3);
>>>              <tr>
>>>                <td>compressionThreshold</td>
>>>                <td>int</td>
>>> -              <td>compress if data is larger than this number of bytes
>>> (optional, defaults to 1024)</td>
>>> +              <td>Compress if data is larger than this number of bytes
>>> (optional, defaults to 1024)</td>
>>>              </tr>
>>>              <tr>
>>>                <td>includeStacktrace</td>
>>>
>>>
>>>
>>>
>>> --
>>> Matt Sicker <boa...@gmail.com>
>>>
>>
>
>
> --
> Matt Sicker <boa...@gmail.com>
>

Reply via email to