程序的日志一般以文件形式,数据库形式记录。可以通过配置文件配合控制台程序来实时监控日志。
远程的日志配置,增加【UdpAppender】。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
<level value="All"></level>
<!--指定将此级别及以上的log打印到log文件中(由低到高:Debug、Info、Warn、Error、Fatal)-->
<additivity value="false"></additivity>
<appender-ref ref="UdpAppender"></appender-ref>
</root>
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
<localPort value="7170" />
<remoteAddress value="10.10.10.60" />
<remotePort value="7171" />
<layout type="log4net.Layout.PatternLayout, log4net">
<conversionPattern value="[%date] -- [%-5level] -- [%logger] [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
本地的监控工具,新建控制台程序,代码如下。
using System;
using System.Net;
using System.Net.Sockets;
class Program
{
static void Main(string[] args)
{
Console.Title = "Watch Log4 Udp Message";
Console.WriteLine("input listen port:");
int port = Convert.ToInt32( Console.ReadLine());
IPAddress address = IPAddress.Parse("127.0.0.1");
IPEndPoint remoteEndPoint = new IPEndPoint(address, 0);
UdpClient udpClient;
byte[] buffer;
string loggingEvent;
try
{
udpClient = new UdpClient(port);
Console.WriteLine(string.Format("listen remport udp at port {0} ok...",port));
while (true)
{
buffer = udpClient.Receive(ref remoteEndPoint);
loggingEvent = System.Text.Encoding.Default.GetString(buffer);
Console.ResetColor();
if (loggingEvent.Contains("[INFO]"))
{
Console.ForegroundColor = ConsoleColor.White;
}
else if (loggingEvent.Contains("[WARN]"))
{
Console.ForegroundColor = ConsoleColor.Yellow;
}
else if (loggingEvent.Contains("[DEBUG]"))
{
Console.ForegroundColor = ConsoleColor.Green;
}
else if (loggingEvent.Contains("[ERROR]"))
{
Console.ForegroundColor = ConsoleColor.Red;
}
else if (loggingEvent.Contains("[Fatal]"))
{
Console.ForegroundColor = ConsoleColor.DarkRed;
}
Console.WriteLine(loggingEvent);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
效果如下