But some of the methods threw a runtime exception which could just be another type of parse exception if differentiation is necessary.
On 23 July 2017 at 21:16, Gary Gregory <[email protected]> wrote: > On Jul 23, 2017 19:10, "Matt Sicker" <[email protected]> wrote: > > Nothing wrong with making more custom exceptions. > > > This new package already defines a new exception ParseException. > > Gary > > > On 23 July 2017 at 16:46, Gary Gregory <[email protected]> wrote: > > > Also, I'd like to see this used from our socket server classes to make > sure > > it fits nicely with that use case. > > > > Gary > > > > On Sun, Jul 23, 2017 at 1:05 PM, Gary Gregory <[email protected]> > > wrote: > > > > > OK, but RuntimeException should still never be thrown here... > > > > > > Gary > > > > > > On Sun, Jul 23, 2017 at 1:02 PM, Mikael Ståldal <[email protected]> > > wrote: > > > > > >> But that's not quite correct. I want to distinguish between unable to > > >> parse due to malformed input (ParseException), and unable to read from > > >> input (IOException). When reading from String or byte[], unable to > read > > >> from input shouldn't happen. > > >> > > >> > > >> On 2017-07-23 21:50, Gary Gregory wrote: > > >> > > >>> You already declare and throw ParseException, so I would use > > >>> ParseException. > > >>> > > >>> Gary > > >>> > > >>> > > >>> > > >>> On Sun, Jul 23, 2017 at 11:25 AM, Mikael Ståldal <[email protected]> > > >>> wrote: > > >>> > > >>> Do you have another suggestion? > > >>>> > > >>>> > > >>>> On 2017-07-23 05:01, Gary Gregory wrote: > > >>>> > > >>>> -1 to throw new RuntimeException(e) > > >>>>> > > >>>>> Gary > > >>>>> > > >>>>> On Jul 22, 2017 13:48, <[email protected]> wrote: > > >>>>> > > >>>>> Repository: logging-log4j2 > > >>>>> Updated Branches: > > >>>>> refs/heads/LOG4J2-1986 [created] c4814a873 > > >>>>> > > >>>>> > > >>>>> LOG4J2-1986 Public API for parsing the output from > > >>>>> JsonLayout/XmlLayout/YamlLayout > > >>>>> into a LogEvent > > >>>>> > > >>>>> > > >>>>> Project: http://git-wip-us.apache.org/ > repos/asf/logging-log4j2/repo > > >>>>> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/ > > >>>>> commit/c4814a87 > > >>>>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c > > >>>>> 4814a87 > > >>>>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c > > >>>>> 4814a87 > > >>>>> > > >>>>> Branch: refs/heads/LOG4J2-1986 > > >>>>> Commit: c4814a8730eb24bdf89cf23c89b4a957b8418ba5 > > >>>>> Parents: eea873e > > >>>>> Author: Mikael Ståldal <[email protected]> > > >>>>> Authored: Sat Jul 22 22:48:24 2017 +0200 > > >>>>> Committer: Mikael Ståldal <[email protected]> > > >>>>> Committed: Sat Jul 22 22:48:24 2017 +0200 > > >>>>> > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> .../parser/AbstractJacksonLogEventParser.java | 85 > > >>>>> +++++++++++++++ > > >>>>> .../log4j/core/parser/JsonLogEventParser.java | 32 ++++++ > > >>>>> .../log4j/core/parser/LogEventParser.java | 64 > > ++++++++++++ > > >>>>> .../log4j/core/parser/ParseException.java | 34 ++++++ > > >>>>> .../log4j/core/parser/TextLogEventParser.java | 50 +++++++++ > > >>>>> .../log4j/core/parser/XmlLogEventParser.java | 32 ++++++ > > >>>>> .../log4j/core/parser/YamlLogEventParser.java | 33 ++++++ > > >>>>> .../logging/log4j/core/parser/package-info.java | 20 ++++ > > >>>>> .../core/parser/JsonLogEventParserTest.java | 103 > > >>>>> +++++++++++++++++++ > > >>>>> src/changes/changes.xml | 3 + > > >>>>> 10 files changed, 456 insertions(+) > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/c > > >>>>> ore/parser/ > > >>>>> AbstractJacksonLogEventParser.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/ > > >>>>> AbstractJacksonLogEventParser.java b/log4j-core/src/main/java/ > > >>>>> org/apache/logging/log4j/core/parser/AbstractJacksonLogEvent > > >>>>> Parser.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..8b00e57 > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/ > > >>>>> AbstractJacksonLogEventParser.java > > >>>>> @@ -0,0 +1,85 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +import com.fasterxml.jackson.core.JsonProcessingException; > > >>>>> +import com.fasterxml.jackson.databind.ObjectReader; > > >>>>> +import org.apache.logging.log4j.core.LogEvent; > > >>>>> +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > > >>>>> +import org.apache.logging.log4j.core. > jackson.Log4jJsonObjectMapper; > > >>>>> + > > >>>>> +import java.io.IOException; > > >>>>> +import java.io.InputStream; > > >>>>> +import java.io.Reader; > > >>>>> + > > >>>>> +class AbstractJacksonLogEventParser implements TextLogEventParser > { > > >>>>> + final ObjectReader objectReader; > > >>>>> + > > >>>>> + AbstractJacksonLogEventParser(ObjectReader objectReader) { > > >>>>> + this.objectReader = objectReader; > > >>>>> + } > > >>>>> + > > >>>>> + @Override > > >>>>> + public LogEvent parseFrom(InputStream input) throws > IOException, > > >>>>> ParseException { > > >>>>> + try { > > >>>>> + return objectReader.readValue(input); > > >>>>> + } catch (JsonProcessingException e) { > > >>>>> + throw new ParseException(e); > > >>>>> + } > > >>>>> + } > > >>>>> + > > >>>>> + @Override > > >>>>> + public LogEvent parseFrom(Reader input) throws IOException, > > >>>>> ParseException { > > >>>>> + try { > > >>>>> + return objectReader.readValue(input); > > >>>>> + } catch (JsonProcessingException e) { > > >>>>> + throw new ParseException(e); > > >>>>> + } > > >>>>> + } > > >>>>> + > > >>>>> + @Override > > >>>>> + public LogEvent parseFrom(String input) throws ParseException > { > > >>>>> + try { > > >>>>> + return objectReader.readValue(input); > > >>>>> + } catch (JsonProcessingException e) { > > >>>>> + throw new ParseException(e); > > >>>>> + } catch (IOException e) { > > >>>>> + throw new RuntimeException(e); > > >>>>> + } > > >>>>> + } > > >>>>> + > > >>>>> + @Override > > >>>>> + public LogEvent parseFrom(byte[] input) throws ParseException > { > > >>>>> + try { > > >>>>> + return objectReader.readValue(input); > > >>>>> + } catch (JsonProcessingException e) { > > >>>>> + throw new ParseException(e); > > >>>>> + } catch (IOException e) { > > >>>>> + throw new RuntimeException(e); > > >>>>> + } > > >>>>> + } > > >>>>> + > > >>>>> + @Override > > >>>>> + public LogEvent parseFrom(byte[] input, int offset, int > length) > > >>>>> throws > > >>>>> ParseException { > > >>>>> + try { > > >>>>> + return objectReader.readValue(input, offset, length); > > >>>>> + } catch (JsonProcessingException e) { > > >>>>> + throw new ParseException(e); > > >>>>> + } catch (IOException e) { > > >>>>> + throw new RuntimeException(e); > > >>>>> + } > > >>>>> + } > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/c > > >>>>> ore/parser/ > > >>>>> JsonLogEventParser.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/JsonLogEventParser.java > > >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/JsonLogEventParser.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..218de0b > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/JsonLogEventParser.java > > >>>>> @@ -0,0 +1,32 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +import org.apache.logging.log4j.core.LogEvent; > > >>>>> +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > > >>>>> +import org.apache.logging.log4j.core. > jackson.Log4jJsonObjectMapper; > > >>>>> + > > >>>>> +/** > > >>>>> + * Parse the output from JsonLayout layout into instances of > {@link > > >>>>> LogEvent}. > > >>>>> + */ > > >>>>> +public class JsonLogEventParser extends > > AbstractJacksonLogEventParser > > >>>>> { > > >>>>> + > > >>>>> + public JsonLogEventParser() { > > >>>>> + super(new Log4jJsonObjectMapper().reader > > >>>>> For(Log4jLogEvent.class)); > > >>>>> + } > > >>>>> + > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > > >>>>> core/parser/LogEventParser.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/LogEventParser.java > > >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/LogEventParser.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..88e84fb > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/LogEventParser.java > > >>>>> @@ -0,0 +1,64 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +import org.apache.logging.log4j.core.LogEvent; > > >>>>> + > > >>>>> +import java.io.IOException; > > >>>>> +import java.io.InputStream; > > >>>>> + > > >>>>> +/** > > >>>>> + * Parse the output from a layout into instances of {@link > > LogEvent}. > > >>>>> + */ > > >>>>> +public interface LogEventParser { > > >>>>> + > > >>>>> + /** > > >>>>> + * Parse from an InputStream. The input stream may contain > > >>>>> multiple > > >>>>> log events. > > >>>>> + * This method will read one log event and leave the stream > open > > >>>>> and > > >>>>> positioned to read the > > >>>>> + * next log event. > > >>>>> + * > > >>>>> + * @param input the input stream > > >>>>> + * > > >>>>> + * @return the parsed LogEvent, or {@literal null} of end of > > >>>>> input is > > >>>>> reached. > > >>>>> + * @throws IOException if unable to read from the input > > >>>>> + * @throws ParseException if the input is malformed and cannot > > be > > >>>>> parsed as a LogEvent > > >>>>> + */ > > >>>>> + LogEvent parseFrom(InputStream input) throws IOException, > > >>>>> ParseException; > > >>>>> + > > >>>>> + /** > > >>>>> + * Parse from a byte array, which is expected to contain > exactly > > >>>>> one > > >>>>> log event. > > >>>>> + * > > >>>>> + * @param input the byte array > > >>>>> + * > > >>>>> + * @return the parsed LogEvent, never {@literal null}. > > >>>>> + * @throws ParseException if the input is malformed and cannot > > be > > >>>>> parsed as a LogEvent > > >>>>> + */ > > >>>>> + LogEvent parseFrom(byte[] input) throws ParseException; > > >>>>> + > > >>>>> + /** > > >>>>> + * Parse from a specified range of a byte array. The specified > > >>>>> range > > >>>>> is expected to contain > > >>>>> + * exactly one log event. > > >>>>> + * > > >>>>> + * @param input the byte array > > >>>>> + * @param offset the initial offset > > >>>>> + * @param length the length > > >>>>> + * > > >>>>> + * @return the parsed LogEvent, never {@literal null}. > > >>>>> + * @throws ParseException if the input is malformed and cannot > > be > > >>>>> parsed as a LogEvent > > >>>>> + */ > > >>>>> + LogEvent parseFrom(byte[] input, int offset, int length) > throws > > >>>>> ParseException; > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > > >>>>> core/parser/ParseException.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/ParseException.java > > >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/ParseException.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..8f5fa54 > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/ParseException.java > > >>>>> @@ -0,0 +1,34 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +/** > > >>>>> + * Thrown when the input cannot be parsed. > > >>>>> + */ > > >>>>> +public class ParseException extends Exception { > > >>>>> + public ParseException(String message) { > > >>>>> + super(message); > > >>>>> + } > > >>>>> + > > >>>>> + public ParseException(String message, Throwable cause) { > > >>>>> + super(message, cause); > > >>>>> + } > > >>>>> + > > >>>>> + public ParseException(Throwable cause) { > > >>>>> + super(cause); > > >>>>> + } > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/c > > >>>>> ore/parser/ > > >>>>> TextLogEventParser.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/TextLogEventParser.java > > >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/TextLogEventParser.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..3428024 > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/TextLogEventParser.java > > >>>>> @@ -0,0 +1,50 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +import org.apache.logging.log4j.core.LogEvent; > > >>>>> + > > >>>>> +import java.io.IOException; > > >>>>> +import java.io.Reader; > > >>>>> + > > >>>>> +/** > > >>>>> + * Parse the output from a text based layout into instances of > > {@link > > >>>>> LogEvent}. > > >>>>> + */ > > >>>>> +public interface TextLogEventParser extends LogEventParser { > > >>>>> + /** > > >>>>> + * Parse from a Reader. The reader may contain multiple log > > >>>>> events. > > >>>>> + * This method will read one log event and leave the reader > open > > >>>>> and > > >>>>> positioned to read the > > >>>>> + * next log event. > > >>>>> + * > > >>>>> + * @param input the reader > > >>>>> + * > > >>>>> + * @return the parsed LogEvent, or {@literal null} of end of > > >>>>> input is > > >>>>> reached. > > >>>>> + * @throws IOException if unable to read from the input > > >>>>> + * @throws ParseException if the input is malformed and cannot > > be > > >>>>> parsed as a LogEvent > > >>>>> + */ > > >>>>> + LogEvent parseFrom(Reader input) throws IOException, > > >>>>> ParseException; > > >>>>> + > > >>>>> + /** > > >>>>> + * Parse from a String, which is expected to contain exactly > one > > >>>>> log > > >>>>> event. > > >>>>> + * > > >>>>> + * @param input the string > > >>>>> + * > > >>>>> + * @return the parsed LogEvent > > >>>>> + * @throws ParseException if the input is malformed and cannot > > be > > >>>>> parsed as a LogEvent > > >>>>> + */ > > >>>>> + LogEvent parseFrom(String input) throws ParseException; > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > > >>>>> core/parser/XmlLogEventParser.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/XmlLogEventParser.java > > >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/XmlLogEventParser.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..597e70b > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/XmlLogEventParser.java > > >>>>> @@ -0,0 +1,32 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +import org.apache.logging.log4j.core.LogEvent; > > >>>>> +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > > >>>>> +import org.apache.logging.log4j.core. > jackson.Log4jXmlObjectMapper; > > >>>>> + > > >>>>> +/** > > >>>>> + * Parse the output from XmlLayout layout into instances of {@link > > >>>>> LogEvent}. > > >>>>> + */ > > >>>>> +public class XmlLogEventParser extends > > AbstractJacksonLogEventParser { > > >>>>> + > > >>>>> + public XmlLogEventParser() { > > >>>>> + super(new Log4jXmlObjectMapper().readerF > > >>>>> or(Log4jLogEvent.class)); > > >>>>> + } > > >>>>> + > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/c > > >>>>> ore/parser/ > > >>>>> YamlLogEventParser.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/YamlLogEventParser.java > > >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/YamlLogEventParser.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..59b3463 > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/YamlLogEventParser.java > > >>>>> @@ -0,0 +1,33 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +import org.apache.logging.log4j.core.LogEvent; > > >>>>> +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > > >>>>> +import org.apache.logging.log4j.core. > jackson.Log4jXmlObjectMapper; > > >>>>> +import org.apache.logging.log4j.core. > jackson.Log4jYamlObjectMapper; > > >>>>> + > > >>>>> +/** > > >>>>> + * Parse the output from YamlLayout layout into instances of > {@link > > >>>>> LogEvent}. > > >>>>> + */ > > >>>>> +public class YamlLogEventParser extends > > AbstractJacksonLogEventParser > > >>>>> { > > >>>>> + > > >>>>> + public YamlLogEventParser() { > > >>>>> + super(new Log4jYamlObjectMapper().reader > > >>>>> For(Log4jLogEvent.class)); > > >>>>> + } > > >>>>> + > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > > >>>>> core/parser/package-info.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/main/java/org > > >>>>> /apache/logging/log4j/core/par > > >>>>> ser/package-info.java > > >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/package-info.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..3506570 > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > >>>>> parser/package-info.java > > >>>>> @@ -0,0 +1,20 @@ > > >>>>> +/* > > >>>>> + * 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. > > >>>>> + */ > > >>>>> +/** > > >>>>> + * Parsers for the output of various layouts. > > >>>>> + */ > > >>>>> +package org.apache.logging.log4j.core.parser; > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/log4j-core/src/test/java/org/apache/logging/log4j/c > > >>>>> ore/parser/ > > >>>>> JsonLogEventParserTest.java > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/log4j-core/src/test/java/ > org/apache/logging/log4j/core/ > > >>>>> parser/JsonLogEventParserTest.java b/log4j-core/src/test/java/ > > >>>>> org/apache/logging/log4j/core/parser/JsonLogEventParserTest.java > > >>>>> new file mode 100644 > > >>>>> index 0000000..5684602 > > >>>>> --- /dev/null > > >>>>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > > >>>>> parser/JsonLogEventParserTest.java > > >>>>> @@ -0,0 +1,103 @@ > > >>>>> +/* > > >>>>> + * 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.parser; > > >>>>> + > > >>>>> +import org.apache.logging.log4j.core.LogEvent; > > >>>>> +import org.junit.Before; > > >>>>> +import org.junit.Test; > > >>>>> + > > >>>>> +import static org.junit.Assert.assertEquals; > > >>>>> +import static org.junit.Assert.assertNotNull; > > >>>>> + > > >>>>> +public class JsonLogEventParserTest { > > >>>>> + > > >>>>> + private JsonLogEventParser parser; > > >>>>> + > > >>>>> + private static final String JSON = "{\n" + > > >>>>> + " \"timeMillis\" : 1493121664118,\n" + > > >>>>> + " \"thread\" : \"main\",\n" + > > >>>>> + " \"level\" : \"INFO\",\n" + > > >>>>> + " \"loggerName\" : \"HelloWorld\",\n" + > > >>>>> + " \"marker\" : {\n" + > > >>>>> + " \"name\" : \"child\",\n" + > > >>>>> + " \"parents\" : [ {\n" + > > >>>>> + " \"name\" : \"parent\",\n" + > > >>>>> + " \"parents\" : [ {\n" + > > >>>>> + " \"name\" : \"grandparent\"\n" + > > >>>>> + " } ]\n" + > > >>>>> + " } ]\n" + > > >>>>> + " },\n" + > > >>>>> + " \"message\" : \"Hello, world!\",\n" + > > >>>>> + " \"thrown\" : {\n" + > > >>>>> + " \"commonElementCount\" : 0,\n" + > > >>>>> + " \"name\" : \"java.lang.RuntimeException\",\n" + > > >>>>> + " \"extendedStackTrace\" : [ {\n" + > > >>>>> + " \"class\" : \"logtest.Main\",\n" + > > >>>>> + " \"method\" : \"main\",\n" + > > >>>>> + " \"file\" : \"Main.java\",\n" + > > >>>>> + " \"line\" : 29,\n" + > > >>>>> + " \"exact\" : true,\n" + > > >>>>> + " \"location\" : \"classes/\",\n" + > > >>>>> + " \"version\" : \"?\"\n" + > > >>>>> + " } ]\n" + > > >>>>> + " },\n" + > > >>>>> + " \"contextStack\" : [ \"one\", \"two\" ],\n" + > > >>>>> + " \"endOfBatch\" : false,\n" + > > >>>>> + " \"loggerFqcn\" : > > >>>>> \"org.apache.logging.log4j.spi.AbstractLogger\",\n" > > >>>>> + > > >>>>> + " \"contextMap\" : {\n" + > > >>>>> + " \"bar\" : \"BAR\",\n" + > > >>>>> + " \"foo\" : \"FOO\"\n" + > > >>>>> + " },\n" + > > >>>>> + " \"threadId\" : 1,\n" + > > >>>>> + " \"threadPriority\" : 5,\n" + > > >>>>> + " \"source\" : {\n" + > > >>>>> + " \"class\" : \"logtest.Main\",\n" + > > >>>>> + " \"method\" : \"main\",\n" + > > >>>>> + " \"file\" : \"Main.java\",\n" + > > >>>>> + " \"line\" : 29\n" + > > >>>>> + " }\n" + > > >>>>> + "}"; > > >>>>> + > > >>>>> + @Before > > >>>>> + public void setup() { > > >>>>> + parser = new JsonLogEventParser(); > > >>>>> + } > > >>>>> + > > >>>>> + @Test > > >>>>> + public void testString() throws ParseException { > > >>>>> + LogEvent logEvent = parser.parseFrom(JSON); > > >>>>> + assertNotNull(logEvent); > > >>>>> + assertEquals("HelloWorld", logEvent.getLoggerName()); > > >>>>> + // TODO assert more here > > >>>>> + } > > >>>>> + > > >>>>> + @Test(expected = ParseException.class) > > >>>>> + public void testStringEmpty() throws ParseException { > > >>>>> + parser.parseFrom(""); > > >>>>> + } > > >>>>> + > > >>>>> + @Test(expected = ParseException.class) > > >>>>> + public void testStringInvalidJson() throws ParseException { > > >>>>> + parser.parseFrom("foobar"); > > >>>>> + } > > >>>>> + > > >>>>> + @Test(expected = ParseException.class) > > >>>>> + public void testStringInvalidProperty() throws ParseException > { > > >>>>> + parser.parseFrom("{\"foo\":\"bar\"}"); > > >>>>> + } > > >>>>> + > > >>>>> +} > > >>>>> > > >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > > >>>>> c4814a87/src/changes/changes.xml > > >>>>> ------------------------------------------------------------ > > ---------- > > >>>>> diff --git a/src/changes/changes.xml b/src/changes/changes.xml > > >>>>> index 074e31c..522f49b 100644 > > >>>>> --- a/src/changes/changes.xml > > >>>>> +++ b/src/changes/changes.xml > > >>>>> @@ -31,6 +31,9 @@ > > >>>>> - "remove" - Removed > > >>>>> --> > > >>>>> <release version="2.9.0" date="2017-MM-DD" description="GA > > >>>>> Release > > >>>>> 2.9.0"> > > >>>>> + <action issue="LOG4J2-1986" dev="mikes" type="add"> > > >>>>> + Public API for parsing the output from > > >>>>> JsonLayout/XmlLayout/YamlLayout > > >>>>> into a LogEvent. > > >>>>> + </action> > > >>>>> <action issue="LOG4J2-1984" dev="rgoers" type="update"> > > >>>>> Allow maxLength of StructuredData to be specified by the > > >>>>> user. > > >>>>> </action> > > >>>>> > > >>>>> > > >>>>> > > >>>> > > >>> > > >> > > > > > > > > > -- > Matt Sicker <[email protected]> > -- Matt Sicker <[email protected]>
