相关文章推荐
失望的作业本  ·  es6 ...·  5 月前    · 
聪明伶俐的领带  ·  Mockito cannot ...·  1 年前    · 
玩篮球的松鼠  ·  jQuery ...·  1 年前    · 

使用log4net给项目添加日志功能

1,首先我们在项目中要添加log4net.dll的引用

2,然后我们要在配置文件中添加log4net相关的配置了,先创建一个名为log4net.appconfig的配置文件,如果项目中已经有了名为         app.config的默认配置文件我们在这写也是一样的。

3,app.config文件的默认内容如下

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
    </startup> 
</configuration>

4,然后我们添加configSections配置节

<configSections> <!--子节点log4net--> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections>

我们在其中添加了log4net子节点

5,然后我们再对log4net子节点进行配置

<log4net>
<!--(我们在这里添加)-->
</log4net>

先加一个root

<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) --> <level value="all" /> <appender-ref ref="ColoredConsoleAppender" /><!--控制台--> <appender-ref ref="RollingLogFileAppender" /><!--滚动文件,自动记录最新日志--> </root>

<root>中可以有三种元素分别是
appender-ref   :要引用的appender的名字 例如上面的ColoredConsoleAppender指的是在控制台显示日志
level                :<root>中最多只能有一个,只有在这个级别或者之上的事件才会被记录
param             :可以有多个,用于设置一些参数


因为上面有两个appender,所以我们要对这两个appender进行配置

<!--输出方式输入文件--> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <param name="File" value="logs\" /> <!--是否是向文件中追加日志--> <param name="AppendToFile" value="true" /> <!--log保留天数--> <param name="MaxSizeRollBackups" value="100" /> <!--日志文件名是否是固定不变的--> <param name="StaticLogFileName" value="false" /> <!--日志文件名格式为:2008-08-31.log--> <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" /> <!--日志根据日期滚动--> <param name="RollingStyle" value="Date" /> <!--格式布局--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%n" /><!--指定打印信息的具体格式--> <!-- <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] (%file:%line) %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/> --> </layout> </appender> <!-- 控制台前台显示日志 --> <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="ERROR" /> <!--设置不同日志信息等级的颜色--> <foreColor value="Red, HighIntensity" /> </mapping> <mapping> <level value="Info" /> <foreColor value="Green" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <!--日志显示格式--> <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] %l - %message%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--日志信息等级范围--> <param name="LevelMin" value="Info" /> <param name="LevelMax" value="Fatal" /> </filter> </appender>

每一个<appender>代表一种记录日志的方式,上面两个分别是"将日志信息输入到文件中"和"控制台前台显示日志" ,而appender下的param则是一些具体的规则。

<appender>有属性name 和 type 分别代表appender的名称和输出类型,这个是必须的 。 有元素appender-ref  param  filter  layout

filter是过滤器,用于过滤appender输出的内容,上面用的过滤器种类为LevelRangeFilter 日志等级在指定范围内的事件才被记录

layout 是用于控制appender的输出格式的,一个appender只能有一个layout 最常用的格式是PatternLayout,参考上面。

mapping可以设置不同日志级别对应的颜色显示

6,常用的layout节点有:

%m(message)  :输出的日志消息
%n(newline)     :换行
%d(date)          :输出当前语句运行的时刻
%r(runtime)      :输出程序运行到执行当前语句时消耗的毫秒数
%t(thread)        :当前语句所在的线程ID
%p(priority)      :日志当前优先级,DEBUG ,INFO ,WARN等
%c(class)         :当前日志对象的名称
%L                   :输出语句所在行号
%F                   :输出语句所在文件名
%-数字             :表示该项的最小长度,如果不够,则用空格填充

7,然而我们使用的时候其实可以写一个log4net辅助类,这样我们想在项目中使用就直接调用就好了

 public class LogHelper
        /// <summary>
        /// 输出调试信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="ex">异常</param>
        public static void Debug(Type t, Exception ex)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Debug("Debug", ex);
        /// <summary>
        /// 输出调试信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="msg">信息描述</param>
        public static void Debug(Type t, string msg)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Debug(msg);
        /// <summary>
        /// 输出一般信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="msg">信息描述</param>
        public static void Info(Type t, string msg)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Info(msg);
        /// <summary>
        /// 输出警告信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="ex">异常</param>
        public static void Warn(Type t, Exception ex)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Warn("Warn", ex);
        /// <summary>
        /// 输出警告信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="msg">信息描述</param>
        public static void Warn(Type t, string msg)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Warn(msg);
        /// <summary>
        /// 输出一般错误信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="ex">异常</param>
        public static void Error(Type t, Exception ex)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error("Error", ex);
        /// <summary>
        /// 输出一般错误信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="msg">信息描述</param>
        public static void Error(Type t, string msg)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error(msg);
        /// <summary>
        /// 输出致命错误信息到日志
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="ex">异常</param>
        public static void Fatal(Type t, Exception ex)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Fatal("Fatal", ex);
        /// <summary>
        /// 输出致命错误信息到日志 
        /// </summary>
        /// <param name="t">类型</param>
        /// <param name="msg">信息描述</param>
        public static void Fatal(Type t, string msg)
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Fatal(msg);

我们在其他地方可以这样使用,比如在Connection类中和 ChannelMonitorViewModel类中这样

 LogHelper.Info(typeof(Connection), "异常:" + e.ToString());
 LogHelper.Info(typeof(ChannelMonitorViewModel), "开始通道监听");

8,别忘了在AssemblyInfo.cs文件中加入这一行,不然就会打印不了日志信息的。

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

9,最后贴上整个配置文件的内容

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
  <!--连接字符串设置-->
  <connectionStrings>
    <add name="MySQLDBConnection" connectionString="server=localhost;user id=root;password=xinyalong;database=recharge_card_system"/>
  </connectionStrings>
  <configSections>
    <!--子节点log4net-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <level value="all" />
      <appender-ref ref="ColoredConsoleAppender" />
      <!--控制台-->
      <appender-ref ref="RollingLogFileAppender" />
      <!--滚动文件,自动记录最新日志-->
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--输出方式-->
      <!--日志路径-->
      <param name="File" value="logs\" />
      <!--是否是向文件中追加日志-->
      <param name="AppendToFile" value="true" />
      <!--log保留天数-->
      <param name="MaxSizeRollBackups" value="100" />
      <!--日志文件名是否是固定不变的-->
      <param name="StaticLogFileName" value="false" />
      <!--日志文件名格式为:2008-08-31.log-->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <!--指定打印信息的具体格式-->
        <!--例子:2019-05-27 16:54:49,249 [8] INFO  lib60870.Connection [(null)] - 后台网络线程开始运行-->
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%n" />
        <!-- <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] (%file:%line) %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/> -->
      </layout>
    </appender>
    <!-- 控制台前台显示日志 -->
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <!--设置日志信息等级和其对应的颜色-->
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <level value="Info" />
        <foreColor value="Green" />
      </mapping>
      <!--设置布局格式-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] %l - %message%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>
    </appender>
  </log4net>  
</configuration>
使用log4net给项目添加日志功能1,首先我们在项目中要添加log4net.dll的引用,2,然后我们要在配置文件中添加log4net相关的配置了,先创建一个名为log4net.appconfig的配置文件,如果项目中已经有了名为 app.config的默认配置文件我们在这写也是一样的。3,app.config文件的默认内容如下&lt;?xml version=...
Log4net的优点 log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。程序运行过程中就能生成并输出日志信息而无需人工干预,可供开发人员尽快找到应用程序中的Bug。另外,日志信息可以输出到不同的地方。 Log4net的结构 log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及Layout(布局) 重点—网上教程项目添加log4日志流程如下 1.项目中都会有一个工具类库,然后添加log4net.dll的引用,再
一般对控制台输入的日志我们使用的Appender为ConsoleAppender,日志为白色文字。 当我们想到DEBUG,INFO,WARN,ERROR 每种日志设置一种颜色时我们需要将Appender改为ColoredConsoleAppender 然后增加相应的颜色配置 <appender name="ConsoleAppender" type=...
首先让我们先把Log4Net跑起来,示例代码在文章最后面可以下载 1、先把Log4Net引入到工程中,为了演示方便,我们先建立一个winform程序。在程序的根目录下面,建立一个Libs文件夹,以便存放Log4Net的DLL文件。 2、进行一些简单的配置,先不讲配置文件的作用,大家照我写的输入。下面代码库的内容是在App.config文件中输入的,如果大家没有App.config文件,可以...
等级说明:Level级别:DEBUG &lt;INFO&lt;WARN&lt;ERROR&lt;FATAL &lt;root&gt; &lt;level value="INFO"/&gt; &lt;appender-ref ref="RollingLogFileAppender"/&gt; &lt;appender-ref ref=&quo
该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇。 比较流行的日志组件有以下四种,Topshelf都有相应的组件提供 log4net NLog serilog Elmah 本篇文章主要介绍log4net的使用。 在使用Topshelf创建Windows服务中提到了当我们调试的时候Console会打印出如下的类似日志 Configur...
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。 2、一个简单的使用实例 第一步:在项目添加log4net.dll的引用,这里引用版本是1.2.10.0。 第二步:程序启动时读取log4net的配置文件。 如果是CS程序,在根目录的Program.cs中的Main方法中添加log4net.Config.XmlConfigurator.Configure(); 如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加log4net.Config.XmlConfigurator.Configure(); 无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句: [assembly: log4net.Config .XmlConfigurator()] 也可以使用自定义的配置文件,具体请参见4.4 关联配置文件。 第三步:修改配置文件。如果是CS程序,则在默认的App.config文件(没有新建一个)中添加内容;如果是BS程序,则添加到Web.config文件中,添加内容一样,这里不再列出。 App.config文件添加内容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <level value="WARN" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> <logger name="testApp.Logging"> <level value="DEBUG"/> </logger> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header] "/> <param name="Footer" value="[Footer] "/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> </log4net> </configuration> 第四步:在程序使用log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");//获取一个日志记录器 log.Info(DateTime.Now.ToString() + ": login success");//写入一条新log 这样就将信息同时输出到控制台和写入到文件名为“log-file.txt”的文件中,其中“log-file.txt”文件的路径是当前程序运行所在目录;也可以定义为绝对路径,配置如: <param name="File" value="C:/log-file.txt" />就写入C盘根目录下log-file.txt文件中
前言用户可以从http://logging.apache.org/log4net/下载log4net的源代码。解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。在项目中配置第一步:首先在项目中引用log4net.dll文件。第二步:在Web.config文件中进行添加configSections的节点 代码如下:  <configSections>    <section name=”log4net” type=”log4net.
之前都是用java开发,换成asp.net,没有实时的日志输出监控,总是感觉很不方便,由于项目中采用的日志组件是log4net,就直接写个小的基于控制台的udp客户端接收log4net的日志消息,嗯,这回方便多了。 log4net的udp配置
扩展RollingFileAppender实现Error级别的日志发送预警 public class CRollingFileAppender : RollingFileAppender protected override void Append(log4net.Core.LoggingEvent loggingEvent) NuGet引用:NLog <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> See https://github.com/nlog/nlog/wi
在设置字体和颜色时,分别使用FontDialog和ColorDialog类对他们进行封装。显示对话框只要调用类的ShowDialog()方法。下面是在文本框中的右击事件: private void 字体ToolStripMenuItem_Click_1(object sender, EventArgs e) FontDialog font1 = new
<groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <scope>compi