C# log4net 日志输出的实现示例

 更新时间:2021年10月22日 09:57:00   作者:letisgo5  
本文主要介绍了C# log4net 日志输出的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

思路:
1.安装插件:安装log4net
2.使用配置:添加log4net.config配置文件
3.输出日志文件格式:添加日志配置
4.AssemblyInfo.cs中配置

第一步:安装log4net

在这里插入图片描述

在这里插入图片描述

第二步:添加log4net.config配置文件

新增log4net.config配置文件,内容如下,与Program.cs同一目录即可。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
	</configSections>
	<log4net>
		<!--level取值:OFF FATAL ERROR WARN INFO DEBUG ALL -->
		<logger name="loginfo">
			<level value="ALL"/>
			<appender-ref ref="InfoAppender"/>
		</logger>
		<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
			<param name="File" value="log\\"/>
			<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
			<param name="AppendToFile" value="true"/>
			<param name="MaxFileSize" value="10240"/>
			<param name="StaticLogFileName" value="false"/>
			<param name="DatePattern" value="yyyy-MM-dd&quot;.txt&quot;"/>
			<param name="RollingStyle" value="Date"/>
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%d [%p] - %m%n"/>
			</layout>
		</appender>
	</log4net>
</configuration>

并设置 – 属性 – 复制到输出目录为:始终复制

在这里插入图片描述

第三步:添加日志配置

在文件Program.cs应用程序主入口加入:

LogUtils.SetConfig(new FileInfo(Application.StartupPath + @"\log4net.config"));

在这里插入图片描述

LogUtils.cs 写入日志公共类

class LogUtils
{
	private static readonly ILog loginfo = LogManager.GetLogger("loginfo");

	/// <summary>
	/// 从缺省配置文件获取日志配置
	/// </summary>
	public static void SetConfig()
	{
		XmlConfigurator.Configure();
	}

	/// <summary>
	/// 从指定配置文件获取日志配置
	/// </summary>
	/// <param name="configFile">指定的配置文件</param>
	public static void SetConfig(FileInfo configFile)
	{
		XmlConfigurator.Configure(configFile);
	}

	/// <summary>
	/// 生成分类日志
	/// </summary>
	/// <param name="info">日志信息</param>
	/// <param name="dirName">保存目录名,形如d:\log\aaa</param>
	private static void WriteSortLog(string info, string dirName)
	{
		try
		{
			if (false == System.IO.Directory.Exists(dirName))
			{
				System.IO.Directory.CreateDirectory(dirName);
			}
			string path = dirName + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
			StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default);
			sw.WriteLine(DateTime.Now.ToString("HH:mm:ss: ") + info);
			sw.Close();
		}
		catch (Exception ex)
		{
			string expMsg = "WriteSortLog异常:" + ex.Message + Environment.NewLine + ex.StackTrace;

			if (ex.InnerException != null)
				expMsg += Environment.NewLine + "InnerException:" + ex.InnerException.Message;

			Error(expMsg, ex);
		}
	}

	/// <summary>
	/// Info级 常规日志
	/// </summary>
	/// <param name="info">日志信息</param>
	public static void Info(string info)
	{
		if (loginfo.IsInfoEnabled)
		{
			loginfo.Info(info);
		}
	}

	/// <summary>
	/// Info 先生成常规日志,然后在指定目录另外创建一份日志
	/// 主要用来需要对日志进行分类时使用
	/// </summary>
	/// <param name="info"></param>
	/// <param name="dirName"></param>
	public static void Info(string info, string dirName)
	{
		if (loginfo.IsInfoEnabled)
		{
			//生成常规日志
			loginfo.Info(info);

			//生成分类日志
			WriteSortLog(info, dirName);
		}
	}

	/// <summary>
	/// Debug级 常规日志
	/// </summary>
	/// <param name="info">日志信息</param>
	public static void Debug(string info)
	{
		if (loginfo.IsDebugEnabled)
		{
			loginfo.Debug(info);
		}
	}

	/// <summary>
	/// Debug级 异常日志
	/// </summary>
	/// <param name="info">日志信息</param>
	/// <param name="exp">异常信息</param>
	public static void Debug(string info, Exception exp)
	{
		if (loginfo.IsDebugEnabled)
		{
			loginfo.Debug(info, exp);
		}
	}

	/// <summary>
	/// Error级 常规的日志
	/// </summary>
	/// <param name="info">日志信息</param>
	public static void Error(string info)
	{
		if (loginfo.IsErrorEnabled)
		{
			loginfo.Error(info);
		}
	}

	/// <summary>
	/// Error 异常日志
	/// </summary>
	/// <param name="info">日志信息</param>
	/// <param name="exp">异常信息</param>
	public static void Error(string info, Exception exp)
	{
		if (loginfo.IsErrorEnabled)
		{
			loginfo.Error(info, exp);
		}
	}

	/// <summary>
	/// Fatal级 常规日志
	/// </summary>
	/// <param name="info">日志信息</param>
	public static void Fatal(string info)
	{
		if (loginfo.IsFatalEnabled)
		{
			loginfo.Fatal(info);
		}
	}

	/// <summary>
	/// Fatal级 异常日志
	/// </summary>
	/// <param name="info">日志信息</param>
	/// <param name="exp">异常信息</param>
	public static void Fatal(string info, Exception exp)
	{
		if (loginfo.IsFatalEnabled)
		{
			loginfo.Fatal(info, exp);
		}
	}

	/// <summary>
	/// Warn级 常规日志
	/// </summary>
	/// <param name="info">日志信息</param>
	public static void Warn(string info)
	{
		if (loginfo.IsWarnEnabled)
		{
			loginfo.Warn(info);
		}
	}

	/// <summary>
	/// Warn级 异常日志
	/// </summary>
	/// <param name="info">日志</param>
	/// <param name="exp">异常信息</param>
	public static void Warn(string info, Exception exp)
	{
		if (loginfo.IsWarnEnabled)
		{
			loginfo.Warn(info, exp);
		}
	}
}

第四步:AssemblyInfo.cs中配置 Watch = true

在项目Properties文件夹下AssemblyInfo.cs中加入:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

在这里插入图片描述

最后通过

LogUtils.Error(“错误日志”);
LogUtils.Info(“正常输出日志”);
LogUtils.Warn(“温馨提示日志”);

最后启动项目:会在项目debug目录下输出日志文件夹log内

到此这篇关于C# log4net 日志输出的实现示例的文章就介绍到这了,更多相关C# log4net 日志输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#使用WMI实现监听进程的启动和关闭

    C#使用WMI实现监听进程的启动和关闭

    Windows Management Instrumentation(WMI)是用于管理基于 Windows 操作系统的数据和操作的基础结构,本文将使用WMI实现监听进程的启动和关闭,感兴趣的可以了解下
    2024-01-01
  • C# WINFORM 强制让窗体获得焦点的方法代码

    C# WINFORM 强制让窗体获得焦点的方法代码

    C# WINFORM 强制让窗体获得焦点的方法代码,需要的朋友可以参考一下
    2013-04-04
  • C#利用缓存分块读写大文件

    C#利用缓存分块读写大文件

    这篇文章主要为大家详细介绍了C#利用缓存分块读写大文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 基于Unity3D实现3D照片墙效果

    基于Unity3D实现3D照片墙效果

    Unity3D不仅仅可以开发游戏,还有非常多的开发方向。本文就将用Unity3D制作出一个3D照片墙的效果,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-03-03
  • Unity学习之FSM有限状态机

    Unity学习之FSM有限状态机

    这篇文章主要介绍了Unity学习之FSM有限状态机,通过详细的代码案例来进行解析说明,希望这篇文章对你有所帮助
    2021-06-06
  • C#实现简单的登录界面

    C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。
    2015-11-11
  • C#数据导入到EXCEL的方法

    C#数据导入到EXCEL的方法

    今天小编就为大家分享一篇关于C#数据导入到EXCEL的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C#中BitmapImage与BitmapSource接口的区别对比小结

    C#中BitmapImage与BitmapSource接口的区别对比小结

    BitmapImage和BitmapSource都可以用于表示和显示图像,本文就来介绍一下C#中BitmapImage与BitmapSource接口的区别对比,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • C#常见应用函数实例小结

    C#常见应用函数实例小结

    这篇文章主要介绍了C#常见应用函数,结合实例形式总结分析了C#常用的时间、URL、HTML、反射、小数运算等相关函数,需要的朋友可以参考下
    2017-01-01
  • C#中重载重写和覆盖的定义与区别

    C#中重载重写和覆盖的定义与区别

    今天小编就为大家分享一篇关于C#中重载重写和覆盖的定义与区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10

最新评论