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!

Published Thursday, June 16, 2005 11:35 PM by PSteele

Comments

# re: Log4net's new TelnetAppender

That's pretty cool stuff. I just love how killer log4net has gotten over the last couple of releases.

Friday, June 17, 2005 12:39 AM by Chris Martin

# re: Log4net's new TelnetAppender

Fascinating. Too bad XML is "technologically terrible" and will be the downfall of many Windows-based applications...

Wednesday, June 22, 2005 6:08 PM by VB_SAMURAI