Backend - C# 的日志Lognet4

目录

一、安装 log4net 插件

(一)作用

(二)操作

(三)注意

二、配置

(一)配置AssemblyInfo.cs

 (二)配置log4net.config

1. 创建log4net.config文件(和program.cs同层级)

2. 设置文件属性

3. 其中,文件内容:

三、使用

(一)封装一个类,方便管理

(二)调用

(三)等级Level

四、其他:简单日志

(一)定义日志

(二)调用


一、安装 log4net 插件

(一)作用

        log4net是方便记录日志的驱动插件。

(二)操作

        点击工具栏的“工具” > NuGet套件管理员 > 套件管理器主控台。

        打开控制台后,输入安装命令: 

Install-Package log4net

        安装成功后会提示:

(三)注意

        不同解决方案在使用log4net,都需要各自安装一次。

        查看或勾选安装:点击工具栏的“工具” > NuGet套件管理员 > 管理方案的NuGet套件 > 搜寻插件名 > 查看某项目是否安装。

二、配置

(一)配置AssemblyInfo.cs

<!--添加log4net.dll的参数-->
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "web.config", Watch = true)]

如图所示:

 (二)配置log4net.config

1. 创建log4net.config文件(和program.cs同层级)。

2. 设置文件属性

        右击log4net.config文件 > 属性 > 将“复制到输出目录”设置为“一律复制” 。

3. 其中,文件内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
	</configSections>
	<log4net>
		<!--错误日志类-->
		<logger name="logerror"><!--日志类名字-->
			<level value="ERROR" /><!--日志级别-->
			<appender-ref ref="ErrorAppender" />
		</logger>
		<logger name="loginfo">
			<level value="INFO" />
			<appender-ref ref="InfoAppender" />
		</logger>
		<!--错误日志附加介质-->
		<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"><!--name是名称,type是指定介质类型-->
			<!--路径在exe程序的相对目录下-->
			<param name="File" value="Logs//LogError//" />
			<!--是否追加到文件(true:不会覆盖之前的信息)-->
			<param name="AppendToFile" value="true" />
			<!--是否只写到一个文件中-->
			<param name="StaticLogFileName" value="false" />
			<!--按日期产生文件名-->
			<param name="DatePattern" value='"Errorlog_"yyyyMMdd".txt"'/>
			<!-- 按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite]) -->
			<param name="RollingStyle" value=" Composite " />
			<!-- 当个日志文件的大小。只在文件大小和混合方式方式下使用, 超出大小后在所有文件名后自动增加正整数重新命名 -->
			<param name="maximumFileSize" value="10MB" />
			<!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
			<param name="MaxSizeRollBackups" value="8" />
			<!--记录的格式-->
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%n【Time】:%d [%t]     %n【Level】:%-5p     %n【ClassType】:%c [%x]     %n【Message】:%m%n     %n" />
			</layout>
		</appender>
		<!--普通信息日志附加介质-->
		<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
			<param name="File" value="Logs//LogInfo//" />
			<param name="AppendToFile" value="true" />
			<param name="StaticLogFileName" value="false" />
			<param name="DatePattern" value='"Infolog_"yyyyMMdd".txt"' />
			<param name="RollingStyle" value="Composite" />
			<param name="maximumFileSize" value="10MB" />
			<param name="MaxSizeRollBackups" value="8" />
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%n【Time】:%d [%t]     %n【Level】:%-5p     %n【ClassType】:%c [%x]     %n【Message】:%m%n     %n" />
			</layout>
		</appender>
	</log4net>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

其中,红色圈的内容一定要放在configuration里靠前的位置。

三、使用

(一)封装一个类,方便管理

// Logging.cs 文件
using log4net; // 导入
namespace LogSpace
{
    class LogCls
    {
        public static readonly ILog Logerror = LogManager.GetLogger("logerror"); // 初始化
        public static readonly ILog Loginfo = LogManager.GetLogger("loginfo");

        public static void ErrorLog(string msg)
        {
            if (Logerror.IsErrorEnabled) // 调用
            {
                Logerror.Error(msg);
            }
        }
        public static void InfoLog(string msg)
        {
            if (Loginfo.IsInfoEnabled)
            {
                Loginfo.Info(msg);
            }
        }
    }
}

(二)调用

using LogSpace;
namespace StartExeSpace
{
    class StartExe
    {
	    static void Main()
	    {
	        LogCls.ErrorLog("this is an error content"); // 该方法用了static,其所属类不用实例化
	        LogCls.InfoLog("this is an info content");
	        Console.ReadKey();
	    }
    }
}

(三)等级Level

由高到低:None > Fatal > ERROR > WARN > DEBUG > INFO > All

理解:若等级是ERROR,则就算调用了log4net的info方法,也不会写入到日志文件中。

四、其他:简单日志

以下是不需要插件,生成简单日志的例子

(一)定义日志

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LogSpace
{
    class LogCls
    {
        public void WriteLog(string msg)
        {
            //创建日志文件夹
            string logPath = Directory.GetCurrentDirectory() + "\\logs";
            if (!Directory.Exists(logPath))
            {
                Directory.CreateDirectory(logPath);
            }

            //创建日志文件
            string fname = $"{logPath}\\log_{DateTime.Now.ToString("yyyyMMdd")}.txt";
            FileInfo finfo = new FileInfo(fname);
            if (!finfo.Exists)
            {
                FileStream fs;
                fs = File.Create(fname);
                fs.Close();
                finfo = new FileInfo(fname);
            }

            //文件超过10MB则重命名
            if (finfo.Length < 1024 * 1024 * 10)
            {
                File.Move($"{logPath}\\log_{DateTime.Now.ToString("yyyyMMdd")}.txt", $"{logPath}\\log_{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.txt");
            }
            
            //记录日志
            using (FileStream fs = finfo.OpenWrite())
            {
                //根据上面创建的文件流,创建写数据流
                StreamWriter w = new StreamWriter(fs);

                //设置写数据流的起始位置,为文件流的末尾
                w.BaseStream.Seek(0, SeekOrigin.End);

                //写入日志内容
                w.WriteLine($"Starting Logging【{DateTime.Now}】");
                w.WriteLine($"{msg}\n");
                w.WriteLine("------------------------------------\n");

                //清空缓冲区
                w.Flush();

                //关闭写数据流
                w.Close();
            }
        }
    }
}

(二)调用

static void Main()
{
    LogCls logcls = new LogCls();
    logcls.WriteLog("this is a content");
    Console.ReadKey();
}

上一篇:CSS样式应用的基石:元素选择器、类选择器与ID选择器


下一篇:解决方案