WinForm 实现日志记录功能

-Log4net 简介
Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。
要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。
利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。
WinForm对应的是*.exe.config,WebForm对应的是*.config

  • 引用log4net文件并把日志输出到日志文件里
    1 创建窗体项目
    命名为”VisualPositioning.cs“
    2 下载log4net.dll文件
    log4net.dll版本用的2.0,找到创建的项目所在文件夹, 把log4net.dll文件库放在文件夹里如下所示:
    在这里插入图片描述
    4.0对应的是VS2017
    在这里插入图片描述
    3 引用log4net.dll文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    右键——属性可以查看log4net.dll版本
    在这里插入图片描述
    在这里插入图片描述
    4 修改AssemblyInfo.cs
    指定log4net从配置文件中读取相关配置
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

在这里插入图片描述
在这里插入图片描述
5 修改App.config
原来是这样的
在这里插入图片描述

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--重点configsections必须是第一个节点1og4net配置-->
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <log4net>
    <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志文件存放的地址"D:\App_Log\servicelog\"或者工程根目录"Log\\LogInfo\\"-->
      <param name= "File" value= "Log\\LogInfo\\"/>
      <!--输出的日志不会覆盖以前的信息-->
      <param name= "AppendToFile" value= "true"/>
      <!--备份文件的个数-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--是否使用静态文件名-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--日志文件名-->
      <param name= "DatePattern" value= "yyyy-MM-dd&quot;.read.log&quot;"/>
      <!--文件创建的方式,这里是以Date方式创建-->
      <param name= "RollingStyle" value= "Date"/>
      <!--日志格式、错误日志布局-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="[%date]-[%thread]-[%-p]-[%logger]-[%M] -> %message%newline" />
        <!--conversionPattern:
            %m(message):输出的日志消息;                    %n(newline):换行;
            %L:输出语句所在的行号;                        %F:输出语句所在的文件名;
            %d(datetime):输出当前语句运行的时刻;           %p(priority): 日志的当前日志级别;
            %t(threadid):当前语句所在的线程ID ;            %c(class):当前日志对象的名称;         
            %r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数;
            %-10:表示最小长度为10,如果不够,则用空格填充;-->
      </layout>
    </appender>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\\LogInfo\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxFileSize" value="10240" />
      <param name="MaxSizeRollBackups" value="100" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
      <param name="RollingStyle" value="Date" />
      <!--信息日志布局-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
      </layout>
    </appender>
    <root>
      <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
          比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
          如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="all" />
      <appender-ref ref="ErrorAppender"/>
      <appender-ref ref="InfoAppender"/>
    </root>
  </log4net>
  
</configuration>

6 测试
代码中要引用log4net头文件,不然报错 using log4net;
代码写在Program.cs里面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using log4net;

namespace LogTest
{
    class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args)
        {
            StartService sart = new StartService();
            sart.Start();
            sart.Stop();
        }

        class StartService
        {
            private static ILog log = log4net.LogManager.GetLogger(typeof(StartService));
            public void Start()
            {
                Console.WriteLine("Starting WriteLine....");
                log.Info("Starting log.Info....");
                log.Error("Starting log.Error....");
            }

            public void Stop()
            {
                Console.WriteLine(" Stopping WriteLine....");
                log.Info("Stopping log.Info....");
                log.Error("Stopping log.Error....");
            }
        }
    }
}

在这里插入图片描述

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值