|
| XMLSocketAppender () |
|
| ~XMLSocketAppender () |
|
| XMLSocketAppender (helpers::InetAddressPtr address, int port) |
| Connects to remote server at address and port .
|
|
| XMLSocketAppender (const LogString &host, int port) |
| Connects to remote server at host and port .
|
|
| SocketAppenderSkeleton (int defaultPort, int reconnectionDelay) |
|
| ~SocketAppenderSkeleton () |
|
| SocketAppenderSkeleton (helpers::InetAddressPtr address, int port, int reconnectionDelay) |
| Connects to remote server at address and port .
|
|
| SocketAppenderSkeleton (const LogString &host, int port, int reconnectionDelay) |
| Connects to remote server at host and port .
|
|
void | activateOptions (helpers::Pool &p) override |
| Activate the options that were previously set with calls to option setters.
|
|
void | close () override |
| Release any resources allocated within the appender such as file handles, network connections, etc.
|
|
bool | requiresLayout () const override |
| This appender does not use a layout.
|
|
void | setRemoteHost (const LogString &host) |
| The RemoteHost option takes a string value which should be the host name of the server where a Apache Chainsaw or compatible is running.
|
|
const LogString & | getRemoteHost () const |
| Returns value of the RemoteHost option.
|
|
void | setPort (int port1) |
| The Port option takes a positive integer representing the port where the server is waiting for connections.
|
|
int | getPort () const |
| Returns value of the Port option.
|
|
void | setLocationInfo (bool locationInfo1) |
| The LocationInfo option takes a boolean value.
|
|
bool | getLocationInfo () const |
| Returns value of the LocationInfo option.
|
|
void | setReconnectionDelay (int reconnectionDelay1) |
| The ReconnectionDelay option takes a positive integer representing the number of milliseconds to wait between each failed connection attempt to the server.
|
|
int | getReconnectionDelay () const |
| Returns value of the ReconnectionDelay option.
|
|
void | fireConnector () |
|
void | setOption (const LogString &option, const LogString &value) override |
| Set option to value .
|
|
| AppenderSkeleton () |
|
| AppenderSkeleton (const LayoutPtr &layout) |
|
virtual | ~AppenderSkeleton () |
|
void | finalize () |
| Finalize this appender by calling the derived class' close method.
|
|
void | activateOptions (helpers::Pool &) override |
| Activate the options that were previously set with calls to option setters.
|
|
void | setOption (const LogString &option, const LogString &value) override |
| Set option to value .
|
|
void | addFilter (const spi::FilterPtr newFilter) override |
| Add a filter to end of the filter list.
|
|
void | clearFilters () override |
| Clear the filters chain.
|
|
const spi::ErrorHandlerPtr | getErrorHandler () const |
| Return the currently set spi::ErrorHandler for this Appender.
|
|
spi::FilterPtr | getFilter () const override |
| Returns the head Filter.
|
|
const spi::FilterPtr | getFirstFilter () const |
| Return the first filter in the filter chain for this Appender.
|
|
LayoutPtr | getLayout () const override |
| Returns the layout of this appender.
|
|
LogString | getName () const override |
| Returns the name of this Appender.
|
|
const LevelPtr | getThreshold () const |
| Returns this appenders threshold level.
|
|
bool | isAsSevereAsThreshold (const LevelPtr &level) const |
| Check whether the message level is below the appender's threshold.
|
|
void | doAppend (const spi::LoggingEventPtr &event, helpers::Pool &pool) override |
| This method performs threshold checks and invokes filters before delegating actual logging to the subclasses specific AppenderSkeleton::append method.
|
|
void | setErrorHandler (const spi::ErrorHandlerPtr eh) |
| Set the ErrorHandler for this Appender.
|
|
void | setLayout (const LayoutPtr layout1) override |
| Set the layout for this appender.
|
|
void | setName (const LogString &name1) override |
| Set the name of this Appender.
|
|
void | setThreshold (const LevelPtr &threshold) |
| Set the threshold level.
|
|
virtual | ~Appender () |
|
virtual void | addFilter (const spi::FilterPtr newFilter)=0 |
| Add a filter to the end of the filter list.
|
|
virtual spi::FilterPtr | getFilter () const =0 |
| Returns the head Filter.
|
|
virtual void | clearFilters ()=0 |
| Clear the list of filters by removing all the filters in it.
|
|
virtual void | close ()=0 |
| Release any resources allocated within the appender such as file handles, network connections, etc.
|
|
virtual void | doAppend (const spi::LoggingEventPtr &event, log4cxx::helpers::Pool &pool)=0 |
| Log in Appender specific way.
|
|
virtual LogString | getName () const =0 |
| Get the name of this appender.
|
|
virtual void | setLayout (const LayoutPtr layout)=0 |
| Set the Layout for this appender.
|
|
virtual LayoutPtr | getLayout () const =0 |
| Returns this appenders layout.
|
|
virtual void | setName (const LogString &name)=0 |
| Set the name of this appender.
|
|
virtual bool | requiresLayout () const =0 |
| Configurators call this method to determine if the appender requires a layout.
|
|
Public Member Functions inherited from log4cxx::spi::OptionHandler |
virtual | ~OptionHandler () |
|
virtual void | activateOptions (helpers::Pool &p)=0 |
| Activate the options that were previously set with calls to option setters.
|
|
virtual void | setOption (const LogString &option, const LogString &value)=0 |
| Set option to value .
|
|
virtual | ~Object () |
|
virtual const helpers::Class & | getClass () const =0 |
|
virtual bool | instanceof (const Class &clazz) const =0 |
|
virtual const void * | cast (const Class &clazz) const =0 |
|
Sends spi::LoggingEvent elements to a remote a log server, usually in XML format.
Here is an example configuration that writes JSON to the TCP input plugin of a fluent-bit log server running on the same system as the application:
<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>
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.
- Remote logging uses the TCP protocol. Consequently, if the server is reachable, then log events will eventually arrive at the server.
- If the remote server is down, the logging requests are simply dropped. However, if and when the server comes back up, then event transmission is resumed transparently. This transparent reconneciton is performed by a connector thread which periodically attempts to connect to the server.
- Logging events are automatically buffered by the native TCP implementation. This means that if the link to server is slow but still faster than the rate of (log) event production by the client, the client will not be affected by the slow network connection. However, if the network connection is slower then the rate of event production, then the client can only progress at the network rate. In particular, if the network link to the the server is down, the client will be blocked.
On the other hand, if the network link is up, but the server is down, the client will not be blocked when making log requests but the log events will be lost due to server unavailability.
- Even if an
XMLSocketAppender
is no longer attached to any logger, it will not be destroyed in the presence of a connector thread. A connector thread exists only if the connection to the server is down. To avoid this destruction problem, you should close the the XMLSocketAppender
explicitly. See also next item.
Long lived applications which create/destroy many XMLSocketAppender
instances should be aware of this destruction problem. Most other applications can safely ignore it.
- If the application hosting the
XMLSocketAppender
exits before the XMLSocketAppender
is closed either explicitly or subsequent to destruction, then there might be untransmitted data in the pipe which might be lost.
To avoid lost data, it is usually sufficient to close the XMLSocketAppender
either explicitly or by calling the LogManager::shutdown method before exiting the application.