RemotingAppender ClassApache log4net™ SDK Documentation
Delivers logging events to a remote logging sink.
Inheritance Hierarchy

SystemObject
  log4net.AppenderAppenderSkeleton
    log4net.AppenderBufferingAppenderSkeleton
      log4net.AppenderRemotingAppender

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

public class RemotingAppender : BufferingAppenderSkeleton

The RemotingAppender type exposes the following members.

Constructors

  NameDescription
Public methodRemotingAppender
Initializes a new instance of the RemotingAppender class.
Top
Properties

  NameDescription
Public propertyBufferSize
Gets or sets the size of the cyclic buffer used to hold the logging events.
(Inherited from BufferingAppenderSkeleton.)
Public propertyErrorHandler
Gets or sets the IErrorHandler for this appender.
(Inherited from AppenderSkeleton.)
Public propertyEvaluator
Gets or sets the ITriggeringEventEvaluator that causes the buffer to be sent immediately.
(Inherited from BufferingAppenderSkeleton.)
Public propertyFilterHead
The filter chain.
(Inherited from AppenderSkeleton.)
Public propertyFix
Gets or sets a the fields that will be fixed in the event
(Inherited from BufferingAppenderSkeleton.)
Public propertyLayout
Gets or sets the ILayout for this appender.
(Inherited from AppenderSkeleton.)
Public propertyLossy
Gets or sets a value that indicates whether the appender is lossy.
(Inherited from BufferingAppenderSkeleton.)
Public propertyLossyEvaluator
Gets or sets the value of the ITriggeringEventEvaluator to use.
(Inherited from BufferingAppenderSkeleton.)
Public propertyName
Gets or sets the name of this appender.
(Inherited from AppenderSkeleton.)
Public propertyOnlyFixPartialEventData Obsolete.
Gets or sets a value indicating if only part of the logging event data should be fixed.
(Inherited from BufferingAppenderSkeleton.)
Protected propertyRequiresLayout
Tests if this appender requires a Layout to be set.
(Inherited from AppenderSkeleton.)
Public propertySink
Gets or sets the URL of the well-known object that will accept the logging events.
Public propertyThreshold
Gets or sets the threshold Level of this appender.
(Inherited from AppenderSkeleton.)
Top
Methods

  NameDescription
Public methodActivateOptions
Initialize the appender based on the options set
(Overrides BufferingAppenderSkeletonActivateOptions.)
Public methodAddFilter
Adds a filter to the end of the filter chain.
(Inherited from AppenderSkeleton.)
Protected methodAppend(LoggingEvent)
Append a bulk array of logging events.
(Inherited from AppenderSkeleton.)
Protected methodAppend(LoggingEvent)
This method is called by the DoAppend(LoggingEvent) method.
(Inherited from BufferingAppenderSkeleton.)
Public methodClearFilters
Clears the filter list for this appender.
(Inherited from AppenderSkeleton.)
Public methodClose
Closes the appender and release resources.
(Inherited from AppenderSkeleton.)
Public methodDoAppend(LoggingEvent)
Performs threshold checks and invokes filters before delegating actual logging to the subclasses specific [M:Append(LoggingEvent)] method.
(Inherited from AppenderSkeleton.)
Public methodDoAppend(LoggingEvent)
Performs threshold checks and invokes filters before delegating actual logging to the subclasses specific [M:Append(LoggingEvent[])] method.
(Inherited from AppenderSkeleton.)
Public methodEquals
Determines whether the specified Object is equal to the current Object.
(Inherited from Object.)
Protected methodFilterEvent
Test if the logging event should we output by this appender
(Inherited from AppenderSkeleton.)
Protected methodFinalize
Finalizes this appender by calling the implementation's Close method.
(Inherited from AppenderSkeleton.)
Public methodFlush
Flush the currently buffered events
(Inherited from BufferingAppenderSkeleton.)
Public methodFlush(Boolean)
Flush the currently buffered events
(Inherited from BufferingAppenderSkeleton.)
Public methodFlush(Int32)
Flushes any buffered log data.
(Overrides BufferingAppenderSkeletonFlush(Int32).)
Public methodGetHashCode
Serves as a hash function for a particular type.
(Inherited from Object.)
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Protected methodIsAsSevereAsThreshold
Checks if the message level is below this appender's threshold.
(Inherited from AppenderSkeleton.)
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Protected methodOnClose
Override base class close.
(Overrides BufferingAppenderSkeletonOnClose.)
Protected methodPreAppendCheck
Called before [M:Append(LoggingEvent)] as a precondition.
(Inherited from AppenderSkeleton.)
Protected methodRenderLoggingEvent(LoggingEvent)
Renders the LoggingEvent to a string.
(Inherited from AppenderSkeleton.)
Protected methodRenderLoggingEvent(TextWriter, LoggingEvent)
Renders the LoggingEvent to a string.
(Inherited from AppenderSkeleton.)
Protected methodSendBuffer
Send the contents of the buffer to the remote sink.
(Overrides BufferingAppenderSkeletonSendBuffer(LoggingEvent).)
Protected methodSendFromBuffer
Sends the contents of the buffer.
(Inherited from BufferingAppenderSkeleton.)
Public methodToString
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 RemotingAppenderIRemoteLoggingSink 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