Log4net's new TelnetAppender

The recently released 1.2.9-beta of log4net contains a new appender -- TelnetAppender. This appender acts like a telnet server and allows telnet clients to connect to it and monitor log4net's trace messages. I've only used log4net 1.2.8 but the TelnetAppender sounded pretty neat so I had to try it out. Here's a quick sample app I did. Note the DOMConfigurator has been deprecated and I'm now using the XmlConfigurator:

Option Strict On
Option Explicit On 

Imports System.IO
Imports System.Reflection

Imports log4net
Imports log4net.Config

Public Class Module1

    Shared Sub Main()
        XmlConfigurator.Configure(New FileInfo("logging.xml"))

        Console.WriteLine("Logging configured.  Start up a telnet client and press Enter to continue...")
        Console.ReadLine()

        Dim w As New Worker
        w.Foo1()

    End Sub

End Class

Public Class Worker
    Public Shared ReadOnly m_logger As ILog = LogManager.GetLogger(GetType(Worker))

    Public Sub Foo1()
        m_logger.Debug("Enter " & LogUtility.MethodName())

        Bar1(34)

        m_logger.Debug("Exit " & LogUtility.MethodName())
    End Sub

    Public Function Bar1(ByVal val As Integer) As Integer
        m_logger.Debug("Enter " & LogUtility.MethodName() & " with val = " & val.ToString())

        Dim result As Integer = val * 7

        m_logger.Debug("Leaving " & LogUtility.MethodName() & " with: " & result)
        Return result
    End Function
End Class

Public Class LogUtility

    Public Shared Function MethodName() As String
        ' back up one stack frame to get the caller's method name
        Dim sf As StackFrame = New StackFrame(1)
        Dim mb As MethodBase = sf.GetMethod()
        Return String.Format("{0}.{1}", mb.ReflectedType.ToString(), mb.Name)
    End Function

End Class

Here's my log4net config file (logging.xml):

<?xml version="1.0" encoding="utf-8" ?> 
<log4net>

	<appender name="ods" type="log4net.Appender.OutputDebugStringAppender">
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%-5p [%t]: %m%n" />
		</layout>
	</appender>

	<appender name="tnet" type="log4net.Appender.TelnetAppender">
		<port value="23" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%-5p [%t]: %m%n" />
		</layout>
	</appender>

	<root>
		<level value="ALL" />
		<appender-ref ref="ods" />
		<appender-ref ref="tnet" />
	</root>

</log4net>

Obviously the TelnetAppender is designed for a process that is always running (like a Windows Service). Since this is just a simple console demo, I added a pause right after log4net is initialized to give you a chance to start up a telnet client and connect to your local machine. You should get a message like:

TelnetAppender v1.0 (1 active connections)

At this point, go back to the demo and press Enter. The log4net messages will be streamed to your telnet client. Too fun!

2 Comments

Comments have been disabled for this content.