blob: 68c99bcd4982b91ba223f2ebdc81b06803d124bc [file]
/*
* 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.
*/
#ifndef _LOG4CXX_NET_XML_SOCKET_APPENDER_H
#define _LOG4CXX_NET_XML_SOCKET_APPENDER_H
#include <log4cxx/net/socketappenderskeleton.h>
namespace LOG4CXX_NS
{
namespace net
{
/**
Sends spi::LoggingEvent elements
to a remote a log server, usually in XML format.
Here is an example configuration that writes JSON to the
<a href="https://docs.fluentbit.io/manual/pipeline/inputs/tcp">TCP input plugin of a fluent-bit log server</a>
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>
~~~
See \ref socket_appender_properties "SocketAppenderSkeleton" for more information on the behaviour this appender.
*/
class LOG4CXX_EXPORT XMLSocketAppender : public SocketAppenderSkeleton
{
public:
/**
The default port number of remote logging server (4560).
*/
static int DEFAULT_PORT;
/**
The default reconnection delay (30000 milliseconds or 30 seconds).
*/
static int DEFAULT_RECONNECTION_DELAY;
#if LOG4CXX_ABI_VERSION <= 15
/**
Unused
*/
static const int MAX_EVENT_LEN;
#endif
DECLARE_LOG4CXX_OBJECT(XMLSocketAppender)
BEGIN_LOG4CXX_CAST_MAP()
LOG4CXX_CAST_ENTRY(XMLSocketAppender)
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton)
END_LOG4CXX_CAST_MAP()
XMLSocketAppender();
~XMLSocketAppender();
/**
Connects to remote server at <code>address</code> and <code>port</code>.
*/
#if LOG4CXX_ABI_VERSION <= 15
XMLSocketAppender(helpers::InetAddressPtr address, int port);
#else
XMLSocketAppender(const helpers::InetAddressPtr& address, int port);
#endif
/**
Connects to remote server at <code>host</code> and <code>port</code>.
*/
XMLSocketAppender(const LogString& host, int port);
using SocketAppenderSkeleton::activateOptions;
#if 15 < LOG4CXX_ABI_VERSION
/**
* This appender has a default layout.
* @returns false
*/
bool requiresLayout() const override
{
return false;
}
#endif
protected:
#if LOG4CXX_ABI_VERSION <= 15
/**
@deprecated This method will be removed in a future version.
*/
void setSocket(LOG4CXX_NS::helpers::SocketPtr& socket, helpers::Pool& p) override;
/**
@deprecated This method will be removed in a future version.
*/
void cleanUp(helpers::Pool& p) override;
#endif
int getDefaultDelay() const override;
int getDefaultPort() const override;
void append( LOG4CXX_APPEND_FORMAL_PARAMETERS ) override;
private:
// prevent copy and assignment statements
XMLSocketAppender(const XMLSocketAppender&);
XMLSocketAppender& operator=(const XMLSocketAppender&);
#if LOG4CXX_ABI_VERSION <= 15
struct XMLSocketAppenderPriv;
#endif
}; // class XMLSocketAppender
LOG4CXX_PTR_DEF(XMLSocketAppender);
} // namespace net
} // namespace log4cxx
#endif // _LOG4CXX_NET_XML_SOCKET_APPENDER_H