RemotingAppender Class | Apache log4net™ SDK Documentation

Delivers logging events to a remote logging sink.
Inheritance Hierarchy

System
Object
log4net.Appender
AppenderSkeleton
log4net.Appender
BufferingAppenderSkeleton
log4net.Appender
RemotingAppender

Namespace: log4net.Appender
Assembly: log4net (in log4net.dll) Version: 2.0.8.0-.NET 4.0
Syntax

C#
VB
C++
F#
Copy

    public class RemotingAppender : BufferingAppenderSkeleton

    Public Class RemotingAppender
    	Inherits BufferingAppenderSkeleton

    public ref class RemotingAppender : public BufferingAppenderSkeleton

    type RemotingAppender =
        class
            inherit BufferingAppenderSkeleton
        end

The RemotingAppender type exposes the following members.

Constructors

| Name | Description
--- | --- | ---
| RemotingAppender | Initializes a new instance of the RemotingAppender class.

Top
Properties

| Name | Description
--- | --- | ---
| BufferSize | Gets or sets the size of the cyclic buffer used to hold the logging events. (Inherited from BufferingAppenderSkeleton.)
| ErrorHandler | Gets or sets the IErrorHandler for this appender. (Inherited from AppenderSkeleton.)
| Evaluator | Gets or sets the ITriggeringEventEvaluator that causes the buffer to be sent immediately. (Inherited from BufferingAppenderSkeleton.)
| FilterHead | The filter chain. (Inherited from AppenderSkeleton.)
| Fix | Gets or sets a the fields that will be fixed in the event (Inherited from BufferingAppenderSkeleton.)
| Layout | Gets or sets the ILayout for this appender. (Inherited from AppenderSkeleton.)
| Lossy | Gets or sets a value that indicates whether the appender is lossy. (Inherited from BufferingAppenderSkeleton.)
| LossyEvaluator | Gets or sets the value of the ITriggeringEventEvaluator to use. (Inherited from BufferingAppenderSkeleton.)
| Name | Gets or sets the name of this appender. (Inherited from AppenderSkeleton.)
| OnlyFixPartialEventData | Obsolete. Gets or sets a value indicating if only part of the logging event data should be fixed. (Inherited from BufferingAppenderSkeleton.)
| RequiresLayout | Tests if this appender requires a Layout to be set. (Inherited from AppenderSkeleton.)
| Sink | Gets or sets the URL of the well-known object that will accept the logging events.
| Threshold | Gets or sets the threshold Level of this appender. (Inherited from AppenderSkeleton.)

Top
Methods

| Name | Description
--- | --- | ---
| ActivateOptions | Initialize the appender based on the options set (Overrides BufferingAppenderSkeleton ActivateOptions .)
| AddFilter | Adds a filter to the end of the filter chain. (Inherited from AppenderSkeleton.)
| Append( LoggingEvent ) | Append a bulk array of logging events. (Inherited from AppenderSkeleton.)
| Append(LoggingEvent) | This method is called by the DoAppend(LoggingEvent) method. (Inherited from BufferingAppenderSkeleton.)
| ClearFilters | Clears the filter list for this appender. (Inherited from AppenderSkeleton.)
| Close | Closes the appender and release resources. (Inherited from AppenderSkeleton.)
| DoAppend(LoggingEvent) | Performs threshold checks and invokes filters before delegating actual logging to the subclasses specific [M:Append(LoggingEvent)] method. (Inherited from AppenderSkeleton.)
| DoAppend( LoggingEvent ) | Performs threshold checks and invokes filters before delegating actual logging to the subclasses specific [M:Append(LoggingEvent[])] method. (Inherited from AppenderSkeleton.)
| Equals | Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
| FilterEvent | Test if the logging event should we output by this appender (Inherited from AppenderSkeleton.)
| Finalize | Finalizes this appender by calling the implementation's Close method. (Inherited from AppenderSkeleton.)
| Flush | Flush the currently buffered events (Inherited from BufferingAppenderSkeleton.)
| Flush(Boolean) | Flush the currently buffered events (Inherited from BufferingAppenderSkeleton.)
| Flush(Int32) | Flushes any buffered log data. (Overrides BufferingAppenderSkeleton Flush(Int32).)
| GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.)
| GetType | Gets the Type of the current instance. (Inherited from Object.)
| IsAsSevereAsThreshold | Checks if the message level is below this appender's threshold. (Inherited from AppenderSkeleton.)
| MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.)
| OnClose | Override base class close. (Overrides BufferingAppenderSkeleton OnClose .)
| PreAppendCheck | Called before [M:Append(LoggingEvent)] as a precondition. (Inherited from AppenderSkeleton.)
| RenderLoggingEvent(LoggingEvent) | Renders the LoggingEvent to a string. (Inherited from AppenderSkeleton.)
| RenderLoggingEvent(TextWriter, LoggingEvent) | Renders the LoggingEvent to a string. (Inherited from AppenderSkeleton.)
| SendBuffer | Send the contents of the buffer to the remote sink. (Overrides BufferingAppenderSkeleton SendBuffer( LoggingEvent ).)
| SendFromBuffer | Sends the contents of the buffer. (Inherited from BufferingAppenderSkeleton.)
| ToString | Returns a String that represents the current Object. (Inherited from Object.)

Top
Remarks

This Appender is designed to deliver events to a remote sink. That is any object that implements the RemotingAppender
IRemoteLoggingSink interface. It delivers the events using .NET remoting. The object to deliver events to is specified by setting the appenders Sink property.

The RemotingAppender buffers events before sending them. This allows it to make more efficient use of the remoting infrastructure.

Once the buffer is full the events are still not sent immediately. They are scheduled to be sent using a pool thread. The effect is that the send occurs asynchronously. This is very important for a number of non obvious reasons. The remoting infrastructure will flow thread local variables (stored in the CallContext), if they are marked as ILogicalThreadAffinative, across the remoting boundary. If the server is not contactable then the remoting infrastructure will clear the ILogicalThreadAffinative objects from the CallContext. To prevent a logging failure from having side effects on the calling application the remoting call must be made from a separate thread to the one used by the application. A ThreadPool thread is used for this. If no ThreadPool thread is available then the events will block in the thread pool manager until a thread is available.

Because the events are sent asynchronously using pool threads it is possible to close this appender before all the queued events have been sent. When closing the appender attempts to wait until all the queued events have been sent, but this will timeout after 30 seconds regardless.

If this appender is being closed because the ProcessExit event has fired it may not be possible to send all the queued events. During process exit the runtime limits the time that a ProcessExit event handler is allowed to run for. If the runtime terminates the threads before the queued events have been sent then they will be lost. To ensure that all events are sent the appender must be closed before the application exits. See Shutdown
for details on how to shutdown log4net programmatically.

See Also

#### Reference

log4net.Appender Namespace
log4net.Appender
RemotingAppender
IRemoteLoggingSink