带有表单控制台的日志记录实用程序






4.50/5 (2投票s)
2006年9月7日
3分钟阅读

29956

512
一个带有基于窗体的控制台的日志实用程序。
引言
当我第一次开始使用Visual Studio时,我对Trace输出进入IDE中的标准文本窗口感到失望。 我需要的是一个面向记录的日志系统,可以输出到图形控制台。 我的解决方案是一个基于.NET Remoting和Windows .NET Forms的相当简单的解决方案。
控制台
控制台只是显示客户端收到的日志消息列表。 您可以对列进行排序。 新消息将放在列表的顶部。
不能绝对保证消息将以发送的完全相同的顺序显示。 这是因为我正在使用带有.NET Remoting的默认线程池。 因此,即使消息将按顺序发送,控制台也可能不会按接收的顺序执行消息。 但是,似乎这种情况非常罕见。 大多数时候,控制台将以正确的顺序显示消息。 无论消息执行顺序如何,条目的时间戳将始终反映发送消息的时间。
您可以通过双击行来向下钻取控制台上的单个消息。 你会得到这样的东西
控制台配置
应用程序配置文件应如下所示
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="port" value="1439"/>
</appSettings>
</configuration>
您还需要确保防火墙允许打开此端口。 您可以使用您想要的任何端口。 您只需要确保客户端配置文件中指定的端口是相同的。
客户端 API
API 非常简单。 首先,从 logger 项目添加对 logger_client.dll 的引用。
其次,在您的代码中添加引用
using LiveSwitch.LoggerClient;
接下来,实例化一个 Logger 代理。 这些是轻量级对象,因此不必释放它们。 您可以根据需要创建任意多个,而不会浪费重量级资源。
Logger logger = new Logger("component name");
logger 类有六个相关的方法
logger.Debug("text");
logger.Info("text");
logger.Warning("text");
logger.Warning("text", exception);
logger.Error("text");
logger.Error("text", exception);
客户端配置
客户端应用程序需要在其配置文件中进行应用程序设置。 请注意,您不能使用应用程序属性,因为依赖的客户端 DLL 需要读取可执行文件的配置文件,并且它无权访问 IDE 生成的代码。
应用程序的属性在名为 <exe 文件名>.config 的文件中提供。
这是一个例子。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="loggerUrl" value="tcp://:1439/logger"/>
</appSettings>
</configuration>
内部
消息在客户端库端进行批处理,并由单个工作线程发送。 以下是所有客户端记录器实例共享的主循环,用于将批量的请求发送到记录器应用程序。
private void Start()
{
while (true)
{
ILogger.LogMessage[] msgs;
lock (this)
{
while (_list.Count == 0)
{
Monitor.Wait(this);
}
msgs = _list.ToArray();
_list.Clear();
}
_client.Log(msgs); // xmit the batch of messages
}
}
如您所见,记录器客户端库后台线程使用监视器锁与应用程序同步。
在这里,您可以看到应用程序的信息记录器通知后台线程数据已准备就绪。
internal void LogInfo(string comp, string data)
{
ILogger.LogMessage msg =
new ILogger.LogMessage(ILogger.LogMessageType.INFO,
data, comp, DateTime.Now, _host, null);
lock (this)
{
_list.Add(msg);
Monitor.Pulse(this);
}
}
如您所见,交互非常规范。
结论
在开发应用程序时,此日志记录系统非常有帮助。 我希望你们中的一些人会觉得它有用。