首页 > 其他分享 >WinForm(十四)窗体滚动日志

WinForm(十四)窗体滚动日志

时间:2023-02-07 22:01:22浏览次数:43  
标签:message public static 窗体 日志 logger WinForm

  在桌面程序里,一般日志记录到文件里就可以了,但有的时间,也需要在窗体上动态滚动显示,这时,就需要引入日志框架了。

  这里引入的依旧是NLog(在我的Mini API系统里,用的也是NLog)。首先要从Nuget中引入NLog.Windows.Forms,然后添加NLog.config,设置“始终复制”。

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="NLog.Windows.Forms" Version="4.6.0" />
</ItemGroup>

<ItemGroup>
<None Update="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>

  下面是NLog的配置文件,有两个Target和两个Rules,第一个Target是基于RichTextBox控件的,也是在一个窗体中,放置一个RichTextBox控件,来滚动显示输出的日志,所以在这个Target配置中设置的有窗体的名字和这个RichTextBox控件的名字。

  第二个是基于文件的,也就是日志不仅显示在UI上,还同时写一份到文件里,以便后查。(关于NLog框加的学习,请参考官网https://nlog-project.org)

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<targets>
<target xsi:type="RichTextBox"
name="richTextBoxLog"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
height="30"
autoScroll="true"
maxLines="100"
showMinimized="true"
toolWindow="true"
controlName="LogRichTextBox"
formName="LogForm"
width="50"
useDefaultRowColoringRules="true"
allowAccessoryFormCreation="true"
messageRetention="None"
supportLinks="false">
</target>
<target name="logfile" xsi:type="File" fileName="${basedir}/logs/${date:format=yyyyMMdd}.txt" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="richTextBoxLog" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>

  下面是窗体写了一个扩展方法,扩展了7个方法,当然可以按照自己需求进行扩展。另外,如果你在一些非窗体的类中写日志,也可以参照进行扩展。

public static class LoggerExpand
{
public static void LogInfo(this Form form, string message)
{
_logger.Info(message);
}
public static void LogTrace(this Form form, string message)
{
_logger.Trace(message);
}
public static void LogError(this Form form, string message)
{
_logger.Error(message);
}
public static void LogDebug(this Form form, string message)
{
_logger.Debug(message);
}
public static void LogFatal(this Form form, string message)
{
_logger.Fatal(message);
}
public static void LogWarn(this Form form, string message)
{
_logger.Warn(message);
}
public static void Log(this Form form, LogLevel level, string message)
{
_logger.Log(level, message);
}
static Logger _logger => LogManager.GetCurrentClassLogger();
}

  本例设置的日志动态滚动显示窗体是独立的桌面,并不在主窗体中,所以在弹出日志窗体时,需要ReInitialize一下日志控件,如下第2行代码,否则RichTextBox不会显示日志。

var  _logForm = new LogForm();
RichTextBoxTarget.ReInitializeAllTextboxes(_logForm);
_logForm.Show();

  效果图:

WinForm(十四)窗体滚动日志_WinForm

  想要更快更方便的了解相关知识,可以关注微信公众号 

WinForm(十四)窗体滚动日志_窗体滚动日志_02


标签:message,public,static,窗体,日志,logger,WinForm
From: https://blog.51cto.com/axzxs/6042703

相关文章

  • WinForm(十五)窗体间通信
    在很多WinForm的程序中,会有客户端之间相互通信的需求,或服务端与客户端通信的需求,这时就要用到TCP/IP的功能。在.NET中,主要是通过Socket来完成的,下面的例子是通过一个Tcp......
  • WinForm(十五)窗体间通信
    在很多WinForm的程序中,会有客户端之间相互通信的需求,或服务端与客户端通信的需求,这时就要用到TCP/IP的功能。在.NET中,主要是通过Socket来完成的,下面的例子是通过一个Tc......
  • WinForm(十五)窗体间通信
    在很多WinForm的程序中,会有客户端之间相互通信的需求,或服务端与客户端通信的需求,这时就要用到TCP/IP的功能。在.NET中,主要是通过Socket来完成的,下面的例子是通过一个Tc......
  • WinForm(十三)WebView2
    WebView是WinForm框架中一个控件,用来对网页信息交互,有时Web自己开发的,有时Web是三方的。下面通过一个例子来看看WebView2的使用。首先看Web的逻辑,是一个商品......
  • WinForm(十三)WebView2
    WebView是WinForm框架中一个控件,用来对网页信息交互,有时Web自己开发的,有时Web是三方的。下面通过一个例子来看看WebView2的使用。首先看Web的逻辑,是一个商品......
  • WinForm(十四)窗体滚动日志
    在桌面程序里,一般日志记录到文件里就可以了,但有的时间,也需要在窗体上动态滚动显示,这时,就需要引入日志框架了。这里引入的依旧是NLog(在我的MiniAPI系统里,用的也是......
  • WinForm(十四)窗体滚动日志
    在桌面程序里,一般日志记录到文件里就可以了,但有的时间,也需要在窗体上动态滚动显示,这时,就需要引入日志框架了。这里引入的依旧是NLog(在我的MiniAPI系统里,用的也是......
  • WinForm(十一)用户控件
    winform+api是一种对接数据模式,在本例中,为了方便,开发两个天生具有与后台api对接的用例控件,并且把他们封闭成单独控件,以供多次使用。提示:此实例不是生产使用,仅作演......
  • WinForm(十一)用户控件
    winform+api是一种对接数据模式,在本例中,为了方便,开发两个天生具有与后台api对接的用例控件,并且把他们封闭成单独控件,以供多次使用。提示:此实例不是生产使用,仅作演......
  • WinForm(十二)画图
    在.NET中,画图主要是通过Graphics类实现的,这个类主要通过两类方法完成画图,一类是DrawXXX,画各种线条图形;另一类是FillXXX,用各种形状,填充各种图形。Graphics是画板,Draw各......