创建log4net类库

VS创建Log4Net类库,实现日志记录,方便调用

一、VS2017创建类库
在这里插入图片描述

在类库中首先引入Log4net.dll,之后创建Log4Net.config配置文件[网上有很多]、在Properties的AssemblyInfo.cs添加如图,最后创建一个logger辅助类。

在这里插入图片描述

1.log4net.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>

    <!--********************************************************************************************************************************-->
    <!-- Debug 将日志以回滚文件的形式写到文件中 -->
    <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender" >
      <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
      <file value="App_Data\\" />
      <!-- 日志文件的命名规则 -->
      <datePattern value="yyyy-MM-dd/'Debug.log'"/>
      <!-- 将日志信息追加到已有的日志文件中-->
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="1MB" />
      <!-- 指定按日期切分日志文件 -->
      <rollingStyle value="Date"/>
      <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
      <staticLogFileName value="false" />
      <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n====================
									   %n【日志时间】: %d 
										  %n【线 程 ID】: [%thread]   
										  %n【日志级别】: %-5p  
										  %n【出错文件】:%F
										  %n【出错行号】:%L 
										  %n【出错的类】:%logger  
										  %n【日志内容】:%m %newline" />

      </layout>
     <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Debug" />
        <param name="LevelMax" value="Debug" />
      </filter>
    </appender>
    <!-- Info 将日志以回滚文件的形式写到文件中 -->
    <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender" >
      <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
      <file value="App_Data\\" />
      <!-- 日志文件的命名规则 -->
      <datePattern value="yyyy-MM-dd/'Info.log'"/>
      <!-- 将日志信息追加到已有的日志文件中-->
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="1MB" />
      <!-- 指定按日期切分日志文件 -->
      <rollingStyle value="Date"/>
      <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
      <staticLogFileName value="false" />
      <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n====================
										  %n【日志时间】: %d 
										  %n【线 程 ID】: [%thread]   
										  %n【日志级别】: %-5p  
										  %n【出错文件】:%F
										  %n【出错行号】:%L 
										  %n【出错的类】:%logger  
										  %n【日志内容】:%m %newline" />

      </layout>
 
  <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Info" />

      </filter>

    </appender>
    <!--  %n【线 程 ID】: [%thread]   
										  %n【日志级别】: %-5p  
										  %n【出错文件】:%F
										  %n【出错行号】:%L 
										  %n【出错的类】:%logger  -->
    <!--********************************************************************************************************************************-->
    <!-- WARN 将日志以回滚文件的形式写到文件中 -->
    <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender" >
      <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
      <file value="App_Data\\" />
      <!-- 日志文件的命名规则 -->
      <datePattern value="yyyy-MM-dd/'Warn.log'"/>
      <!-- 将日志信息追加到已有的日志文件中-->
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="1MB" />
      <!-- 指定按日期切分日志文件 -->
      <rollingStyle value="Date"/>
      <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
      <staticLogFileName value="false" />
      <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n====================
										  %n【日志时间】: %d 
										  %n【线 程 ID】: [%thread]   
										  %n【日志级别】: %-5p  
										  %n【出错文件】:%F
										  %n【出错行号】:%L 
										  %n【出错的类】:%logger  
										  %n【日志内容】:%m %newline" />

      </layout>
     <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Warn" />
        <param name="LevelMax" value="Warn" />

      </filter>

    </appender>
    <!--********************************************************************************************************************************-->
    <!-- Error 将日志以回滚文件的形式写到文件中 -->
    <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender" >
      <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
      <file value="App_Data\\" />
      <!-- 日志文件的命名规则 -->
      <datePattern value="yyyy-MM-dd/'Error.log'"/>
      <!-- 将日志信息追加到已有的日志文件中-->
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="1MB" />
      <!-- 指定按日期切分日志文件 -->
      <rollingStyle value="Date"/>
      <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
      <staticLogFileName value="false" />
      <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n====================
										  %n【日志时间】: %d 
										  %n【线 程 ID】: [%thread]   
										  %n【日志级别】: %-5p  
										  %n【出错文件】:%F
										  %n【出错行号】:%L 
										  %n【出错的类】:%logger  
										  %n【日志内容】:%m %newline" />
      </layout>
 <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Error" />
        <param name="LevelMax" value="Error" />

      </filter>

    </appender>
    <!--********************************************************************************************************************************-->
    <!-- Fatal 将日志以回滚文件的形式写到文件中 -->
    <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender" >
      <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
      <file value="App_Data\\" />
      <!-- 日志文件的命名规则 -->
      <datePattern value="yyyy-MM-dd/'Fatal.log'"/>
      <!-- 将日志信息追加到已有的日志文件中-->
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="1MB" />
      <!-- 指定按日期切分日志文件 -->
      <rollingStyle value="Date"/>
      <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
      <staticLogFileName value="false" />
      <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n====================
										  %n【日志时间】: %d 
										  %n【线 程 ID】: [%thread]   
										  %n【日志级别】: %-5p  
										  %n【出错文件】:%F
										  %n【出错行号】:%L 
										  %n【出错的类】:%logger  
										  %n【日志内容】:%m %newline" />

      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Fatal" />
        <param name="LevelMax" value="Fatal" />

      </filter>

    </appender>
    <!--********************************************************************************************************************************-->
    <root>
      <!--控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
     比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
    如果没有定义LEVEL的值,则缺省为DEBUG-->
      <appender-ref ref="RollingFileDebug" />
      <appender-ref ref="RollingFileInfo" />
      <appender-ref ref="RollingFileWarn" />
      <appender-ref ref="RollingFileError" />
      <appender-ref ref="RollingFileFatal" />
      <level value="DEBUG" />

    </root>
    <logger name="NHibernate">
      <level value="WARN" />

    </logger>

  </log4net>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
</configuration>

2.Logger.cs日志辅助类

namespace XXXXXXXX
{
/// <summary>
	///日志辅助类
	/// </summary>
	public sealed class Logger
	{
		#region [ 单例模式 ]
		private static readonly Logger _logger = new Logger();
		private static readonly log4net.ILog _Logger4net = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

		/// <summary>
		/// 无参私有构造函数
		/// </summary>
		/// public Logger(){}
	      private Logger(){}
		

		/// <summary>
		/// 得到单例
		/// </summary>
		public static Logger Singleton
		{
			get
			{
				return _logger;
			}
		}
		#endregion

	#region [ 参数 ]
		public bool IsDebugEnabled
		{
			get { return _Logger4net.IsDebugEnabled; }
		}
		public bool IsInfoEnabled
		{
			get { return _Logger4net.IsInfoEnabled; }
		}
		public bool IsWarnEnabled
		{
			get { return _Logger4net.IsWarnEnabled; }
		}
		public bool IsErrorEnabled
		{
			get { return _Logger4net.IsErrorEnabled; }
		}
		public bool IsFatalEnabled
		{
			get { return _Logger4net.IsFatalEnabled; }
		}
		#endregion
#region [ 接口方法 ]

		#region [ Debug ]
		public void Debug(string message)
		{
			if (this.IsDebugEnabled)
			{
				this.Log(LogLevel.Debug, message);
			}
		}

		public void Debug(string message, Exception exception)
		{
			if (this.IsDebugEnabled)
			{
				this.Log(LogLevel.Debug, message, exception);
			}
		}

		public void DebugFormat(string format, params object[] args)
		{
			if (this.IsDebugEnabled)
			{
				this.Log(LogLevel.Debug, format, args);
			}
		}

		public void DebugFormat(string format, Exception exception, params object[] args)
		{
			if (this.IsDebugEnabled)
			{
				this.Log(LogLevel.Debug, string.Format(format, args), exception);
			}
		}
		#endregion

		#region [ Info ]
		public void Info(string message)
		{
			if (this.IsInfoEnabled)
			{
				this.Log(LogLevel.Info, message);
			}
		}

		public void Info(string message, Exception exception)
		{
			if (this.IsInfoEnabled)
			{
				this.Log(LogLevel.Info, message, exception);
			}
		}

		public void InfoFormat(string format, params object[] args)
		{
			if (this.IsInfoEnabled)
			{
				this.Log(LogLevel.Info, format, args);
			}
		}

		public void InfoFormat(string format, Exception exception, params object[] args)
		{
			if (this.IsInfoEnabled)
			{
				this.Log(LogLevel.Info, string.Format(format, args), exception);
			}
		}
		#endregion

		#region  [ Warn ]

		public void Warn(string message)
		{
			if (this.IsWarnEnabled)
			{
				this.Log(LogLevel.Warn, message);
			}
		}

		public void Warn(string message, Exception exception)
		{
			if (this.IsWarnEnabled)
			{
				this.Log(LogLevel.Warn, message, exception);
			}
		}

		public void WarnFormat(string format, params object[] args)
		{
			if (this.IsWarnEnabled)
			{
				this.Log(LogLevel.Warn, format, args);
			}
		}

		public void WarnFormat(string format, Exception exception, params object[] args)
		{
			if (this.IsWarnEnabled)
			{
				this.Log(LogLevel.Warn, string.Format(format, args), exception);
			}
		}
		#endregion

		#region  [ Error ]

		public void Error(string message)
		{
			if (this.IsErrorEnabled)
			{
				this.Log(LogLevel.Error, message);
			}
		}

		public void Error(string message, Exception exception)
		{
			if (this.IsErrorEnabled)
			{
				this.Log(LogLevel.Error, message, exception);
			}
		}

		public void ErrorFormat(string format, params object[] args)
		{
			if (this.IsErrorEnabled)
			{
				this.Log(LogLevel.Error, format, args);
			}
		}

		public void ErrorFormat(string format, Exception exception, params object[] args)
		{
			if (this.IsErrorEnabled)
			{
				this.Log(LogLevel.Error, string.Format(format, args), exception);
			}
		}
		#endregion

		#region  [ Fatal ]

		public void Fatal(string message)
		{
			if (this.IsFatalEnabled)
			{
				this.Log(LogLevel.Fatal, message);
			}
		}

		public void Fatal(string message, Exception exception)
		{
			if (this.IsFatalEnabled)
			{
				this.Log(LogLevel.Fatal, message, exception);
			}
		}

		public void FatalFormat(string format, params object[] args)
		{
			if (this.IsFatalEnabled)
			{
				this.Log(LogLevel.Fatal, format, args);
			}
		}

		public void FatalFormat(string format, Exception exception, params object[] args)
		{
			if (this.IsFatalEnabled)
			{
				this.Log(LogLevel.Fatal, string.Format(format, args), exception);
			}
		}
		#endregion
		#endregion
        #region [ 内部方法 ]
		/// <summary>
		/// 输出普通日志
		/// </summary>
		/// <param name="level"></param>
		/// <param name="format"></param>
		/// <param name="args"></param>
		private void Log(LogLevel level, string format, params object[] args)
		{
			switch (level)
			{
				case LogLevel.Debug:
					_Logger4net.DebugFormat(format, args);
					break;
				case LogLevel.Info:
					_Logger4net.InfoFormat(format, args);
					break;
				case LogLevel.Warn:
					_Logger4net.WarnFormat(format, args);
					break;
				case LogLevel.Error:
					_Logger4net.ErrorFormat(format, args);
					break;
				case LogLevel.Fatal:
					_Logger4net.FatalFormat(format, args);
					break;
			}
		}

		/// <summary>
		/// 格式化输出异常信息
		/// </summary>
		/// <param name="level"></param>
		/// <param name="message"></param>
		/// <param name="exception"></param>
		private void Log(LogLevel level, string message, Exception exception)
		{
			switch (level)
			{
				case LogLevel.Debug:
					_Logger4net.Debug(message, exception);
					break;
				case LogLevel.Info:
					_Logger4net.Info(message, exception);
					break;
				case LogLevel.Warn:
					_Logger4net.Warn(message, exception);
					break;
				case LogLevel.Error:
					_Logger4net.Error(message, exception);
					break;
				case LogLevel.Fatal:
					_Logger4net.Fatal(message, exception);
					break;
			}
		}
		#endregion
	}//end of class
#region [ enum: LogLevel ]
	/// <summary>
	/// 日志级别
	/// </summary>
	public enum LogLevel
	{
		Debug,
		Info,
		Warn,
		Error,
		Fatal
	}
	#endregion
}

最后大功告成!
—HaoGeGe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值