This is an automated email from the ASF dual-hosted git repository. pkarwasz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 06fe59a6273595f07a18c681bbacd775a82977df Author: Gary Gregory <[email protected]> AuthorDate: Sat Feb 5 18:17:42 2022 -0500 Add test that show we can configure a Log4j 1 properties file with a socket appender using an XML layout. Conflicts: log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java --- .../log4j/builders/layout/XmlLayoutBuilder.java | 76 ++++++++++++++++++++++ .../config/SocketAppenderConfigurationTest.java | 5 ++ .../resources/log4j1-socket-xml-layout.properties | 24 +++++++ 3 files changed, 105 insertions(+) diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java new file mode 100644 index 0000000..6577a52 --- /dev/null +++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java @@ -0,0 +1,76 @@ +/* + * 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.log4j.builders.layout; + +import static org.apache.log4j.builders.BuilderManager.CATEGORY; +import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG; +import static org.apache.log4j.xml.XmlConfiguration.forEachElement; + +import java.util.Properties; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.apache.log4j.Layout; +import org.apache.log4j.bridge.LayoutWrapper; +import org.apache.log4j.builders.AbstractBuilder; +import org.apache.log4j.config.PropertiesConfiguration; +import org.apache.log4j.layout.Log4j1XmlLayout; +import org.apache.log4j.xml.XmlConfiguration; +import org.apache.logging.log4j.plugins.Plugin; +import org.w3c.dom.Element; + +/** + * Build an XML Layout + */ +@Plugin(name = "org.apache.log4j.xml.XMLLayout", category = CATEGORY) +public class XmlLayoutBuilder extends AbstractBuilder implements LayoutBuilder { + + private static final String LOCATION_INFO = "LocationInfo"; + private static final String PROPERTIES = "Properties"; + + public XmlLayoutBuilder() { + } + + public XmlLayoutBuilder(String prefix, Properties props) { + super(prefix, props); + } + + + @Override + public Layout parseLayout(Element layoutElement, XmlConfiguration config) { + final AtomicBoolean properties = new AtomicBoolean(); + final AtomicBoolean locationInfo = new AtomicBoolean(); + forEachElement(layoutElement.getElementsByTagName(PARAM_TAG), currentElement -> { + if (PROPERTIES.equalsIgnoreCase(currentElement.getAttribute("name"))) { + properties.set(Boolean.parseBoolean(currentElement.getAttribute("value"))); + } else if (LOCATION_INFO.equalsIgnoreCase(currentElement.getAttribute("name"))) { + locationInfo.set(Boolean.parseBoolean(currentElement.getAttribute("value"))); + } + }); + return createLayout(properties.get(), locationInfo.get()); + } + + @Override + public Layout parseLayout(PropertiesConfiguration config) { + boolean properties = getBooleanProperty(PROPERTIES); + boolean locationInfo = getBooleanProperty(LOCATION_INFO); + return createLayout(properties, locationInfo); + } + + private Layout createLayout(boolean properties, boolean locationInfo) { + return new LayoutWrapper(Log4j1XmlLayout.createLayout(locationInfo, properties)); + } +} diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/SocketAppenderConfigurationTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/SocketAppenderConfigurationTest.java index 5fbaf30..76dee05 100644 --- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/SocketAppenderConfigurationTest.java +++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/SocketAppenderConfigurationTest.java @@ -73,6 +73,11 @@ public class SocketAppenderConfigurationTest { } @Test + public void testPropertiesXmlLayout() throws Exception { + checkProtocolXmlConfig(Protocol.TCP, "target/test-classes/log4j1-socket-xml-layout.properties"); + } + + @Test public void testXml() throws Exception { checkProtocolXmlConfig(Protocol.TCP, "target/test-classes/log4j1-socket.xml"); } diff --git a/log4j-1.2-api/src/test/resources/log4j1-socket-xml-layout.properties b/log4j-1.2-api/src/test/resources/log4j1-socket-xml-layout.properties new file mode 100644 index 0000000..35ceb97 --- /dev/null +++ b/log4j-1.2-api/src/test/resources/log4j1-socket-xml-layout.properties @@ -0,0 +1,24 @@ +# +# 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. +# + +log4j.rootLogger=DEBUG,socket +log4j.appender.socket=org.apache.log4j.net.SocketAppender +log4j.appender.socket.remoteHost=localhost +log4j.appender.socket.port=9999 +log4j.appender.socket.reconnectionDelay=100 +log4j.appender.socket.layout=org.apache.log4j.xml.XMLLayout +log4j.appender.socket.Threshold=DEBUG
