• Log4Net


    在WinForm或Console应用程序中,要使用Log4Net组件,需要在AssembleInfo.cs文件中添加如下代码,表示要使用的配置文件信息:

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "./LearnLog4Net.exe.config", ConfigFileExtension = "config", Watch = true)]

    使用Log4Net组件,主要的是要会配置Appender

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, Log4net" />
        </configSections>
    
      <log4net>
        <!-- 使用RollingFileAppender循环记录日志 -->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--自定义log文件名及log文件存储路径-->
          <file  type="log4net.Util.PatternString" value="e:/log/%date{yyyy-MM-dd}.txt" />
          <appendToFile value="true" />
          <!-- 每个日志文件最大1MB -->
          <maximumFileSize value="1MB" />
          <!-- 
               最大日志文件个数是10。如果日志文件大于1M,则会生成一个新的日志文件:yyyy-MM-dd.txt.1,
               如果记录的日志超过10个,会从yyyy-MM-dd.txt.1开始覆盖。
          -->
          <maxSizeRollBackups value="10" />
          <!-- 根据文件大小循环生成日志文件 -->
          <rollingStyle value="Size" />      
          <layout type="log4net.Layout.PatternLayout">        
            <!--
            关于使用log4net中可能会使用到的一些参数
                %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 
                %n(new line):换行 
                %d(datetime):输出当前语句运行的时刻 
                %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 
                %t(thread id):当前语句所在的线程ID 
                %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 
                %c(class):当前日志对象的名称,例如:
                %f(file):输出语句所在的文件名。
                %l(line):输出语句所在的行号。
                %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。
            -->      
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
          </layout>
        </appender>
    
        <!-- 定义输出到SQL Server数据库中 -->  
        <!-- 创建日志表的SQL脚本 
            CREATE TABLE [dbo].[Log](
                  [Id] [int] IDENTITY(1,1) NOT NULL,
                  [Date] [datetime] NOT NULL,
                  [Thread] [varchar](255) NOT NULL,
                  [Level] [varchar](50) NOT NULL,
                  [Logger] [nvarchar](255) NOT NULL,
                  [Message] [nvarchar](4000) NOT NULL,
                  [Exception] [ntext] NULL
              ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
        -->  
        <appender name="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender">  
          <!-- 先把日志内容记录到内存缓冲集合中,当集合长度为100时,一次性写入数据库,提高性能 -->
          <bufferSize value="100" />  
          <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
          <connectionString value="Data Source=SHZ-PCSQLSERVER2008;Initial Catalog=Log4Net;integrated security=false;Persist Security Info=True;User ID=sa;Password=sa" />  
          <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
          <parameter>  
            <parameterName value="@log_date" />  
            <dbType value="DateTime" />  
            <layout type="log4net.Layout.RawTimeStampLayout" />  
          </parameter>  
          <parameter>  
            <parameterName value="@thread" />  
            <dbType value="String" />  
            <size value="255" />  
            <layout type="log4net.Layout.PatternLayout">  
              <conversionPattern value="%thread" />  
            </layout>  
          </parameter>  
          <parameter>  
            <parameterName value="@log_level" />  
            <dbType value="String" />  
            <size value="50" />  
            <layout type="log4net.Layout.PatternLayout">  
              <conversionPattern value="%level" />  
            </layout>  
          </parameter>  
          <parameter>  
            <parameterName value="@logger" />  
            <dbType value="String" />  
            <size value="255" />  
            <layout type="log4net.Layout.PatternLayout">  
              <conversionPattern value="%logger" />  
            </layout>  
          </parameter>  
          <parameter>  
            <parameterName value="@message" />  
            <dbType value="String" />  
            <size value="4000" />  
            <layout type="log4net.Layout.PatternLayout">  
              <conversionPattern value="%message" />  
            </layout>  
          </parameter>  
          <parameter>  
            <parameterName value="@exception" />  
            <dbType value="String" />  
            <size value="20000" />  
            <layout type="log4net.Layout.ExceptionLayout" />  
          </parameter>  
        </appender>  
    
        <!-- 通过邮件发送日志 -->
        <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
          <authentication value="Basic" />
          <!-- 收件人邮箱,多个邮箱以“,”分隔 -->
          <to value="test@sina.cn" />
          <!-- 发件人邮箱 -->
          <from value="1111111111@qq.com" />
          <!-- 发件人邮箱 -->
          <username value="1111111111@qq.com" />
          <!-- 发件人邮箱密码 -->
          <password value="1111111111" />
          <!-- 邮件主题 -->
          <subject value="XXX系统异常报告" />
          <!-- 发送邮件的服务器 -->
          <smtpHost value="smtp.qq.com" />
          <!-- 内存中的日志缓冲区满100条才发送一次邮件 -->
          <bufferSize value="100" />
          <!--超长部分是否丢弃-->
          <lossy value="true" />
          <!-- 下面的定义, 就是 日志级别 大于 WARN 的, 才发邮件.  -->
          <evaluator type="log4net.Core.LevelEvaluator">
              <threshold value="WARN"/>
          </evaluator>
          <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
          </layout>
        </appender>
        
        <root>
          <!--
              定义记录日志的级别,该级别(含)以上的日志会被记录到对应的媒介中,取值有INFO,DEBUG,WARN,ERROR,FETAL,ALL
              注意:如果定义为INFO,则DEBUG信息并不会记录到媒介中。如果定义为DEBUG,则全部级别都会记录。
          -->
          <level value="ALL" />
          <appender-ref ref="RollingLogFileAppender" />
          <appender-ref ref="AdoNetAppender_SQLServer" />
          <appender-ref ref="SmtpAppender" />
        </root>
      </log4net>
    
    </configuration>

    LogHelper文件代码

    using log4net;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace LearnLog4Net
    {
        public static class LogHelper
        {
            private static ILog log;
            static LogHelper()
            {
                log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
            }
    
            public static void WriteInfo(object message)
            {
                if(log.IsInfoEnabled)
                {
                    log.Info(message);
                }
            }
    
            public static void WriteDebug(object message)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug(message);
                }
            }
    
            public static void WriteWarn(object message)
            {
                if(log.IsWarnEnabled)
                {
                    log.Warn(message);
                }
            }
    
            public static void WriteError(object message)
            {
                WriteError(message, null);
            }
    
            public static void WriteError(object message,Exception ex)
            {
                if(log.IsErrorEnabled)
                {
                    log.Error(message, ex);
                }
            }
    
            public static void WriteFetal(object message)
            {
                if(log.IsFatalEnabled)
                {
                    log.Fatal(message);
                }
            }
        }
    }
    View Code
  • 相关阅读:
    LeetCode1051. 高度检查器 Java
    LeetCode 面试题 16.04. 井字游戏 Java
    WPF 显示3D密集场景,堆场管理系统
    WPF 饼状图,柱形图,折线图 (3 饼状图)
    WPF 饼状图,柱形图,折线图 (2 折线图)
    WPF 饼状图,柱形图,折线图 (1 柱形图)
    wpf 实现控件拖拽(仿windows 桌面图标拖拽)
    设计模式-控制反转
    Socket 网络编程和IO模型
    wpf 滚动文字 跑马灯
  • 原文地址:https://www.cnblogs.com/shaomenghao/p/4212013.html
Copyright © 2020-2023  润新知