This is an automated email from the ASF dual-hosted git repository. swebb2066 pushed a commit to branch fluent_bit_support in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit 51229847e80eef3c0c45f1cfa0dc8339a01dde18 Author: Stephen Webb <[email protected]> AuthorDate: Sat Apr 29 18:12:30 2023 +1000 Document how to send events to a fluent-bit server --- src/main/include/log4cxx/net/xmlsocketappender.h | 39 +++++++++++++++--------- src/test/cpp/net/xmlsocketappendertestcase.cpp | 14 +++++++++ src/test/resources/input/xml/fluent-bit.xml | 30 ++++++++++++++++++ 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/src/main/include/log4cxx/net/xmlsocketappender.h b/src/main/include/log4cxx/net/xmlsocketappender.h index ccd72887..61b79990 100644 --- a/src/main/include/log4cxx/net/xmlsocketappender.h +++ b/src/main/include/log4cxx/net/xmlsocketappender.h @@ -27,21 +27,32 @@ namespace net { /** -Sends LoggingEvent objects in XML format -to a remote a log server, usually a XMLSocketNode. - -<p>The XMLSocketAppender has the following properties: - -- If sent to a XMLSocketNode, remote logging -is non-intrusive as far as the log event is concerned. In other -words, the event will be logged with the same time stamp, +Sends spi::LoggingEvent elements +to a remote a log server, usually in XML format. + +A configuration that writes JSON to the TCP input plugin +of a <a href="https://docs.fluentbit.io/manual/pipeline/inputs/tcp">fluent-bit</a> +process running on the same system as the application: +~~~{.xml} +<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> +<appender name="A1" class="XMLSocketAppender"> + <param name="RemoteHost" value="localhost" /> + <param name="Port" value="5170" /> + <layout class="JSONLayout"/> +</appender> +<root> + <priority value ="INFO" /> + <appender-ref ref="A1" /> +</root> +</log4j:configuration> +~~~ + +<p>XMLSocketAppender has the following properties: + +- The event will be logged with the same time stamp, NDC, location info as if it were logged locally by the client. -- XMLSocketAppenders use exclusively an XMLLayout. They ship an -XML stream representing a LoggingEvent object -to the server side. - - Remote logging uses the TCP protocol. Consequently, if the server is reachable, then log events will eventually arrive at the server. @@ -76,7 +87,7 @@ destruction problem. Most other applications can safely ignore it. - If the application hosting the <code>XMLSocketAppender</code> - exits before the <code>XMLSocketAppender</code> is closed either +exits before the <code>XMLSocketAppender</code> is closed either explicitly or subsequent to destruction, then there might be untransmitted data in the pipe which might be lost. @n @n To avoid lost data, it is usually sufficient to @@ -99,7 +110,7 @@ class LOG4CXX_EXPORT XMLSocketAppender : public SocketAppenderSkeleton static int DEFAULT_RECONNECTION_DELAY; /** - An event XML stream cannot exceed 1024 bytes. + Unused */ static const int MAX_EVENT_LEN; diff --git a/src/test/cpp/net/xmlsocketappendertestcase.cpp b/src/test/cpp/net/xmlsocketappendertestcase.cpp index 37ae2f1e..b6131155 100644 --- a/src/test/cpp/net/xmlsocketappendertestcase.cpp +++ b/src/test/cpp/net/xmlsocketappendertestcase.cpp @@ -16,6 +16,7 @@ */ #include <log4cxx/net/xmlsocketappender.h> +#include <log4cxx/xml/domconfigurator.h> #include "../appenderskeletontestcase.h" #include "apr.h" @@ -34,6 +35,7 @@ class XMLSocketAppenderTestCase : public AppenderSkeletonTestCase // LOGUNIT_TEST(testDefaultThreshold); LOGUNIT_TEST(testSetOptionThreshold); + //LOGUNIT_TEST(test_fluent_bit); LOGUNIT_TEST_SUITE_END(); @@ -44,6 +46,18 @@ class XMLSocketAppenderTestCase : public AppenderSkeletonTestCase { return new log4cxx::net::XMLSocketAppender(); } + + void test_fluent_bit() + { + xml::DOMConfigurator::configure("input/xml/fluent-bit.xml"); + auto odbc = Logger::getRootLogger(); + for (int i = 0; i < 100; ++i) + { + LOG4CXX_INFO(odbc, "Message '" << i << "'"); + //apr_sleep(30000); + } + LOG4CXX_INFO(odbc, "Last message"); + } }; LOGUNIT_TEST_SUITE_REGISTRATION(XMLSocketAppenderTestCase); diff --git a/src/test/resources/input/xml/fluent-bit.xml b/src/test/resources/input/xml/fluent-bit.xml new file mode 100644 index 00000000..a1f2f592 --- /dev/null +++ b/src/test/resources/input/xml/fluent-bit.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> +<!-- + 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:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> +<appender name="A1" class="XMLSocketAppender"> + <param name="RemoteHost" value="localhost" /> + <param name="Port" value="5170" /> + <layout class="JSONLayout"/> +</appender> +<root> + <priority value ="INFO" /> + <appender-ref ref="A1" /> +</root> +</log4j:configuration>
