.net简单使用Log4net的方法(多个日志配置文件)

前言:

几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。所以这个时候就需要一个记录日志的工具。log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。

那先来介绍一下:

开发工具vs2017

【注意项目名称不要为log4net,否者在之后配置log4net出错】

1】NuGet中引用Log4net包

2】添加web配置文件命名为log4new.config并在中写入以下代码

<?xml version="1.0" encoding="utf-8"?>
<configuration>

 <system.web>
 <compilation debug="true" targetFramework="4.5" />
 <httpRuntime targetFramework="4.5" />
 </system.web>
 <configSections>
 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.2" />
 </configSections>
 <!--配置log4net-->
 <log4net>
 <root>
 </root>
 <logger name="RollingLogFileAppender">
  <level value="ALL" />
  <appender-ref ref="RollingFileDebug" />
  <appender-ref ref="RollingFileInfo" />
  <appender-ref ref="RollingFileWarn" />
  <appender-ref ref="RollingFileError" />
  <appender-ref ref="RollingFileFatal" />
 </logger>
 <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
  <!--文件路径 如果不设置(去掉 value="Log/Debug/")会默认保存到[App_Data]文件夹中-->
  <param name="File" value="Log/Debug/"/>
  <!--追加到文件-->
  <param name="AppendToFile" value="true"/>
  <!--最多保留的文件数,设为"-1"则不限-->
  <param name="MaxSizeRollBackups" value="10"/>
  <!--写到一个文件-->
  <param name="StaticLogFileName" value="false"/>
  <!--文件名,按日期命名-->
  <param name="DatePattern" value="yyyyMMdd".log""/>
  <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
  <param name="RollingStyle" value="Date"/>
  <!--日志格式-->
  <layout type="log4net.Layout.PatternLayout">
  <!--%newline输出的日志会换行 [%date{HH:mm:ss fff}]表示记录的时间 -->
  <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
  <!--如果想自己设置格式就只需要-->
  <!--<conversionPattern value="%message"/>-->
  </layout>
  <lockingmodel type="log4net.appender.fileappender+minimallock" />
  <filter type="log4net.Filter.LevelRangeFilter">
  <param name="LevelMin" value="Debug" />
  <param name="LevelMax" value="Debug" />
  </filter>
 </appender>
 <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
  <param name="File" value="Log/Info/"/>
  <param name="AppendToFile" value="true"/>
  <param name="MaxSizeRollBackups" value="10"/>
  <param name="StaticLogFileName" value="false"/>
  <param name="DatePattern" value="yyyyMMdd".log""/>
  <param name="RollingStyle" value="Date"/>
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
  </layout>
  <lockingmodel type="log4net.appender.fileappender+minimallock" />
  <filter type="log4net.Filter.LevelRangeFilter">
  <param name="LevelMin" value="INFO" />
  <param name="LevelMax" value="INFO" />
  </filter>
 </appender>
 <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender">
  <param name="File" value="Log/Warn/"/>
  <param name="AppendToFile" value="true"/>
  <param name="MaxSizeRollBackups" value="10"/>
  <param name="StaticLogFileName" value="false"/>
  <param name="DatePattern" value="yyyyMMdd".log""/>
  <param name="RollingStyle" value="Date"/>
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
  </layout>
  <lockingmodel type="log4net.appender.fileappender+minimallock" />
  <filter type="log4net.Filter.LevelRangeFilter">
  <param name="LevelMin" value="WARN" />
  <param name="LevelMax" value="WARN" />
  </filter>
 </appender>
 <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender">
  <param name="File" value="Log/Error/"/>
  <param name="AppendToFile" value="true"/>
  <param name="MaxSizeRollBackups" value="10"/>
  <param name="StaticLogFileName" value="false"/>
  <param name="DatePattern" value="yyyyMMdd".log""/>
  <param name="RollingStyle" value="Date"/>
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
  </layout>
  <lockingmodel type="log4net.appender.fileappender+minimallock" />
  <filter type="log4net.Filter.LevelRangeFilter">
  <param name="LevelMin" value="ERROR" />
  <param name="LevelMax" value="ERROR" />
  </filter>
 </appender>
 <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender">
  <param name="File" value="Log/Fatal/"/>
  <param name="AppendToFile" value="true"/>
  <param name="MaxSizeRollBackups" value="10"/>
  <param name="StaticLogFileName" value="false"/>
  <param name="DatePattern" value="yyyyMMdd".log""/>
  <param name="RollingStyle" value="Date"/>
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
  </layout>
  <lockingmodel type="log4net.appender.fileappender+minimallock" />
  <filter type="log4net.Filter.LevelRangeFilter">
  <param name="LevelMin" value="FATAL" />
  <param name="LevelMax" value="FATAL" />
  </filter>
 </appender>

 </log4net>
</configuration>

[3】在Global.asax中添加代码

//配置log4
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/Web.config")));

4】写一个LogHelper.cs但是注意在这个.cs文件的命名空间写上[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

注意ConfigFile 后面跟的是配置文件的相对路径

LogHelper代码

public class LogHelper
 {
  public static readonly ILog Log = LogManager.GetLogger("RollingLogFileAppender");

  //  log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
  //ALL 最低等级的,用于打开所有日志记录。
  //DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
  //INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,
  //WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
  //ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
  //FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。

  //TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。
  //OFF 最高等级的,用于关闭所有日志记录。
  //如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

  #region DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
  public static void debug(string write)
  {

   Log.Debug("日志记录:" + write);
  }
  public static void debug(string write, Exception ex)
  {
   Log.Debug("日志记录:" + write + "。错误记载:" + ex.ToString());
  }
  #endregion
  #region INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,
  /// <summary>
  /// 1
  /// </summary>
  /// <param name="write"></param>
  public static void Info(string write)
  {
   Log.Info("日志记录:" + write);
  }
  public static void Info(string write, Exception ex)
  {
   Log.Info("日志记录:" + write + "。错误记载:" + ex.ToString());
  }
  #endregion
  #region WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。,可以使用这个级别。
  public static void warn(string write)
  {
   Log.Warn("日志记录:" + write);
  }
  public static void warn(string write, Exception ex)
  {
   Log.Warn("日志记录:" + write + "。错误记载:" + ex.ToString());
  }
  #endregion

  #region ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
  public static void error(string write)
  {
   Log.Error("日志记录:" + write);
  }
  public static void error(string write, Exception ex)
  {
   Log.Error("日志记录:" + write + "。错误记载:" + ex.ToString());
  }
  #endregion
  #region FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
  public static void fatal(string write)
  {
   Log.Fatal("日志记录:" + write);
  }
  public static void fatal(string write, Exception ex)
  {
   Log.Fatal("日志记录:" + write + "。错误记载:" + ex.ToString());
  }
  //#endregion

  #endregion

  //定义输出的日志内容
  public static string logMessage(SysLogMsg logMessage)
  {
   StringBuilder strInfo = new StringBuilder();
   strInfo.Append("\r\n1. 错误: >> 操作时间: " + logMessage.OperationTime + " 操作人: " + logMessage.UserName + " \r\n");
   strInfo.Append("2. 类名: " + logMessage.Class + " \r\n");
   strInfo.Append("3. 内容: " + logMessage.Content + "\r\n");
   strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");
   return strInfo.ToString();
  }
 }

5】最后可以开始写日志

可以自己定义一种日志格式【自己写一个model,定义几个参数 时间、操作人、类名等等】

最后根据log4new.config设置的路径找到日志所在【未定义的话一般在项目的bin/Debug 或者 bin/Release目录下】 第一个是默认格式日志,第二个是自己定的格式日志【都是string类型,只不过第二个使用\t\n换行,稍微美化一下输出格式】

<param name="File" value="Log/Debug/"/> 表示在当前文件夹Log/Debug中

最后附上githup地址

总结:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • .net下log4net使用方法详解

    本文实例为大家分享了.net下log4net的使用方法,供大家参考,具体内容如下 这里以控制台应用程序为例 首先是要添加引用: 安装后可以看到项目中多了log4net的引用: 添加应用程序配置文件app.config,配置log4net <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="lo

  • C#控制台程序使用Log4net日志组件详解

    C#控制台程序使用Log4net日志组件,供大家参考,具体内容如下 1.Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比如C#控制台程序和C# MVCWeb项目,拿控制台项目为例 项目源码在文章底部 2.首先创建一个控制台程序,引入Log4net.dll --使用NuGet 3.进行一些简单的配置,在App.config文件中配置,如果大家没有App.config文件,可以通过在解决方案中,添加新建项→应用程序配置文件,进行添加. <?xml version="1.0

  • Log4net日志记录组件的使用步骤详解和下载

    第一步: 添加并应用Log4net.dll.然后在Web.config文件中添加下面的配置局 复制代码 代码如下: <configSections>     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> 第二步: 新建Log4Net.config的配置文件,

  • 详解log4net的使用

    程序中只需要引用log4net.dll文件即可 配置的引用 log4net.Config.XmlConfigurator.Configure(); 首先添加以上代码. CS程序:在Main方法中添加: BS程序:Application_Start方法中添加: 或是两者都可以在AssemblyInfo.cs(Properties中)文件里添加以下的语句: //设置独立配置文件,log4net.config [assembly: log4net.Config.XmlConfigurator(Conf

  • log4net配置和使用方法分享

    1.Global.asax文件 复制代码 代码如下: void Application_Start(object sender, EventArgs e) {//在应用程序启动时运行的代码log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Sxmobi.FileHelper.GetMapPath("~\\log4net.config")));} 2.log4net.config 文件 复制代码

  • MVC使用Log4Net进行错误日志记录学习笔记4

    在Web应用运行过程中,我们难免会遇到程序运行异常,这个时候我们就应该将异常信息记录下来,以便开发人员和维护人员对异常原因进行还原,对异常原因进行修复.在ASP.NET平台中进行日志记录的组件也有很多,如Log4Net.CommonLogging等,我们这里选用Log4Net进行异常日志的记录. 1. 捕获异常 在ASP.NET MVC中提供了一个全局的异常处理过滤器:HandleErrorAttribute,可以通过该过滤器捕获异常信息. 我们在Models文件夹下新建类型Log4Except

  • asp.net log4net的使用方法

    刚开始接触asp.net,关于日志记录怎么能少,因此简单记录一下log4net的配置和使用,以防以后忘记.   首先引入log4net.dll,关于这个文件自己百度下载下. 然后配置一下有关配置,在web.config中加入在configuration节点下 <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log

  • JWT+Log4net配置与使用详解

    Log4net的优点 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.程序运行过程中就能生成并输出日志信息而无需人工干预,可供开发人员尽快找到应用程序中的Bug.另外,日志信息可以输出到不同的地方. Log4net的结构 log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及Layout(布局) 重点---网上教程项目中

  • C#中四步轻松使用log4net记录本地日志的方法

    在这里,记录我在项目中使用log4net记录本地日志的步骤.在不会之前感觉很难,很神秘,一旦会了之后其实没那么难.其实所有的事情都是一样的,下面我就分享一下我使用log4Net的经验. 第一步:首先从Visual Studio中的Nuget包管理中搜索下载 Log4Net dll文件 如下图: 选择安装的项目(哪个类库中需要记录日志就勾选上) 第二步:打开配置文件 WinFrom就是 App.config Web就是 web.config 将以下配置信息加入 <configSections>

  • .net简单使用Log4net的方法(多个日志配置文件)

    前言: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题.所以这个时候就需要一个记录日志的工具.log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介. 那先来介绍一下: 开发工具vs2017 [注意项目名称不要为log4net,否者在之后配置log4net出错] 1]Nu

  • 在.NET 6中使用日志组件log4net的方法

    本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例. 1.首先新建一个ASP.NET Core空项目 2.通过Nuget包管理器安装下面两个包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 3.在项目根目录下新建log4net的配置文件log4net.config,并将其设置为始终复制. <?xml version="1.0" encoding="utf-8" ?> &

  • php简单复制文件的方法

    本文实例讲述了php简单复制文件的方法.分享给大家供大家参考,具体如下: <?php /** *author:果冻 *qq:52091199 *wyg517.blog.163.com **/ $file = 'image/a1.jpg'; $newfile = 'a/123.jpg'; //必须有写入权限 if (file_exists($file) == false) { die ('文件不在,无法复制'); } $result = copy($file, $newfile); if ($re

  • Python使用shelve模块实现简单数据存储的方法

    本文实例讲述了Python使用shelve模块实现简单数据存储的方法.分享给大家供大家参考.具体分析如下: Python的shelve模块提供了一种简单的数据存储方案,以dict(字典)的形式来操作数据. #!/usr/bin/python import sys, shelve def store_person(db): """ Query user for data and store it in the shelf object """ pi

  • python根据出生年份简单计算生肖的方法

    本文实例讲述了python根据出生年份简单计算生肖的方法.分享给大家供大家参考.具体分析如下: 这里使用python根据出生年份计算生肖,看了代码会发现原来这么简单 #计算生肖 def ChineseZodiac(year): return u'猴鸡狗猪鼠牛虎兔龙蛇马羊'[year%12] ChineseZodiac(1990) 希望本文所述对大家的Python程序设计有所帮助.

  • jQuery简单创建节点的方法

    本文实例讲述了jQuery简单创建节点的方法.分享给大家供大家参考,具体如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascript" src="js/jquery-1

  • GO语言实现简单TCP服务的方法

    本文实例讲述了GO语言实现简单TCP服务的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "net" "fmt" ) var (   maxRead = 1100     msgStop   = []byte("cmdStop")     msgStart  = []byte("cmdContinue")     ) func main() {       ho

  • JS+CSS简单树形菜单实现方法

    本文实例讲述了JS+CSS简单树形菜单实现方法.分享给大家供大家参考.具体如下: 这是一款不错的CSS树形菜单,树状列表,当然不全是CSS实现,部分功能还使用了JavaScript代码进行配合,删减了修饰用的菜单图片,大家用的时候自己图片加进去,IMG标签大部分都预留了出来,稍懂Html语法的朋友很容易就看懂的. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-css-simple-tree-menu-style-codes/ 具体代码如下

  • JS实现简单路由器功能的方法

    本文实例讲述了JS实现简单路由器功能的方法.分享给大家供大家参考.具体实现方法如下: var wawa = {}; wawa.Router = function(){ function Router(){ } Router.prototype.setup = function(routemap, defaultFunc){ var that = this, rule, func; this.routemap = []; this.defaultFunc = defaultFunc; for (v

  • 一个极为简单的requirejs实现方法

    require和 sea的源码分析,我之前的博客有写过, 今天我想分享的是一个很简单的核心代码(不带注释和空行大概60行), 没有容错判断. require.js require函数实现用一句话概括: 依次加载require的模块,然后监测script的onload事件,判断所有模块加载成功,执行require的callback, 如果只带一个参数且不是数组,就是加载成功后return 模块. //标记已经加载成功的个数 var REQ_TOTAL = 0; //模块导出 window.expo

随机推荐