首页 > 编程语言 >Backend - C# 的日志Lognet4

Backend - C# 的日志Lognet4

时间:2024-07-10 13:25:49浏览次数:13  
标签:log4net Lognet4 C# System LogCls static using 日志 Backend

目录

一、安装 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();
}

标签:log4net,Lognet4,C#,System,LogCls,static,using,日志,Backend
From: https://blog.csdn.net/xiaoxiaoluobogan/article/details/140319936

相关文章

  • go并发模式 o-channel
    packagemainimport("fmt""time")funcmain(){varorfunc(channels...<-chaninterface{})<-chaninterface{}or=func(channels...<-chaninterface{})<-chaninterface{}{switchlen(channels)......
  • go并发模式 or-do-channel + bridge
    packagemainimport("context""fmt")//orDonefuncorDone(ctxcontext.Context,value<-chanint)<-chanint{ordoneStream:=make(chanint)gofunc(){deferclose(ordoneStream)for{......
  • go并发模式 tee-channel
    packagemainimport("context""fmt""time")functeeChannel(ctxcontext.Context,value<-chanint)(<-chanint,<-chanint){ch1:=make(chanint)ch2:=make(chanint)gofunc(){......
  • 面试官:Dubbo一次RPC调用会经过哪些环节?
    大家好,我是三友~~今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程。本文是基于Dubbo3.x版本进行讲解一个简单的Demo这里还是老样子,为了保证文章的完整性和连贯性,方便那些没有使用过的小伙伴更加容易接受文章的内容,这里快速讲一讲Dubbo一个简单的Demo如果你已经......
  • CSE 13S LRC Rules of the Game
    Assignment 1LRCCSE 13S, Winter 20241 IntroductionWe are going to simulate a simplified version of the dice game Left, Right, and Center. This game isentirely a game of chance, with no skill or player decisions (except f......
  • 初创芯片公司非常疯狂,将CPU性能提高100倍
    初创芯片公司非常疯狂,将CPU性能提高100倍[http://mp.weixin.qq.com/s?__biz=Mzg2NDgzNTQ4MA&mid=2247741576&idx=5&sn=733a2dffecbfd99e41e97e93e204b2cb&chksm=ce6e327ff919bb691bf4e3ed418f27d816846b1c577477d5d7f063c103e01d9d4cbeca47195b&mpshare=1&scene=......
  • 分享一个Typecho博客系统专用的CloudFlare缓存规则,优化加速一下下!
    好久都没有更新Typecho博客了,最近几天明月测试了一套适用于Typecho博客系统的CloudFlare缓存规则,经过近一周时间的测试确定有效,并且加速效果特别突出,今天就无偿分享给大家,也算是为国内Typecho生态添砖加瓦了吧!总结下来,这套CloudFlare缓存规则带来的好处就是可以大大的缓解服务......
  • 永久配置 cURL 使用代理服务器
    永久配置cURL使用代理服务器概述curl是一个命令行工具,可用于通过各种网络协议传输数据。对于开发人员来说,最常见的用途之一是测试RESTAPI。在某些环境(尤其是企业网络)中,所有HTTP流量都会通过代理服务器进行路由。本教程将介绍几种方法来永久配置curl使用选定的代理服......
  • 初创芯片公司非常疯狂,将CPU性能提高100倍
    初创芯片公司非常疯狂,将CPU性能提高100倍[http://mp.weixin.qq.com/s?__biz=Mzg2NDgzNTQ4MA&mid=2247741576&idx=5&sn=733a2dffecbfd99e41e97e93e204b2cb&chksm=ce6e327ff919bb691bf4e3ed418f27d816846b1c577477d5d7f063c103e01d9d4cbeca47195b&mpshare=1&scene=......
  • SpringBoot 整合 MyBatis 时报java.lang.IllegalArgumentException: Unable to instan
    配置   报错信息: 原因:版本不兼容,降低 mybatis 版本 问题解决: ......