zoukankan      html  css  js  c++  java
  • log4net的使用

    配置文件(根目录下创建文件夹并添加配置文件  Config/log4net.config  )

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <!--定义输出到文件中-->
      <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
        <!--设置日志存储路径-->
        <param name="File" value="log/" />
        <!--是否追加到文件-->
        <param name="AppendToFile" value="true" />
        <!--配置追加程序以使用最小锁定模型,该模型允许多个进程写入同一文件。-->
        <lockingModel type = " log4net.Appender.FileAppender + MinimalLock" />
        <!--配置附加程序以使用“进程间”锁定模型。-->
        <!--<lockingModel type = " log4net.Appender.FileAppender + InterProcessLock" />-->
        <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
        <param name="MaxSizeRollBackups" value="100" />
        <param name="MaxFileSize" value="1024" />
        <!--是否只写到一个文件中-->
        <param name="StaticLogFileName" value="false" />
        <!--这是按日期产生文件夹,并在文件名前也加上日期-->
        <param name="DatePattern" value="yyyy/MM/dd&quot;.log&quot;" />
        <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
        <param name="RollingStyle" value="Date" />
    
        <layout type="log4net.Layout.PatternLayout">
          <!-- ConversionPattern 解释
              %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
              %n(new line):換行
              %d(datetime):输出当前语句运行的时刻
              %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
              %t(thread id):当前语句所在的线程ID
              %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
              %c(class):当前日志对象的名称
              %L:输出语句所在的行号
              %F:输出语句所在的文件名
              %-数字:表示该项的最小长度,如果不够,则用空格填充
            -->
          <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n " />
        </layout>
        <lockingmodel type="log4net.appender.fileappender+minimallock" />
        <filter type="log4net.Filter.LevelRangeFilter">
          <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->
          <!-- Off 所有的写入方法都不写到日志里
                 FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
                 ERROR(一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
                  WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
                 INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
                 DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。
                 ALL所有的写入方法都写到日志里
            -->
          <param name="LevelMax" value="FATAL" />
          <!--只有等级在LevelMax和LevelMin之间(或等于LevelMax、LevelMin)的日志等级才会被记录-->
          <param name="LevelMin" value="INFO" />
        </filter>
      </appender>
      <!--定义输出到控制台命令行中 -->
      <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />-->
          <conversionPattern value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n "/>
        </layout>
      </appender>
      <!--定义输出到windows事件中-->
      <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
      </appender>
    
      <!--定义输出到数据库-->
      <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        <!--缓存区大小(缓冲区为n条日志的时候,开始写入数据库)调试时,建议写 1-->
        <bufferSize value="1" />
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <!--数据库连接字符串--> <connectionString value="data source=.;initial catalog=TestDataBase;integrated security=false;persist security info=True;User ID=sa;Password=123456" /> <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="2000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMax" value="FATAL" /> <!--只有等级在LevelMax和LevelMin之间(或等于LevelMax、LevelMin)的日志等级才会被记录--> <param name="LevelMin" value="INFO" /> </filter> </appender> <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。--> <root> <!--文件形式记录日志--> <appender-ref ref="LogFileAppender" /> <!--控制台控制显示日志--> <appender-ref ref="ConsoleAppender" /> <!--Windows事件日志--> <appender-ref ref="EventLogAppender" /> <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉--> <appender-ref ref="AdoNetAppender" /> </root> </log4net>

    创建数据库的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] [varchar] (255) NOT NULL,
        [Message] [varchar] (4000) NOT NULL,
        [Exception] [varchar] (2000) NULL
    )
    

      

    一、ASP.NET MVC中使用

    1)、添加程序包引用

    2)、 初始化配置文件

      在Global.asax文件中

    protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
    
                FileInfo fileInfo = new FileInfo(Server.MapPath("Config/log4net.config"));
                // 初始化配置配置文件
                log4net.Config.XmlConfigurator.Configure(fileInfo);
    
              
            }
    

    3)、使用(可封装一个 LogHelper 类 )

     public ActionResult Index()
            {
          ILog logWriter = LogManager.GetLogger("logger");//logger就相当于一个key标识,相同的key会返回相同的对象,反之 try { int a = 0; int b = 1; int c = b / a; } catch (Exception ex) {   logWriter.Error(ex.Message, ex);//写入日志    { }

     二、NetCore 中的使用

      1)、安装程序包  Microsoft.Extensions.Logging.Log4Net

     ·2)、注册log4net服务

      在Program类中

    public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureLogging((logging) =>
                    {
                        //作用是过滤掉System和Microsoft开头的命名空间下的组件产生的警告级别一下的日志,实际上主要就是一些框架性日志
                        logging.AddFilter("System", LogLevel.Warning);//忽略系统日志
                        logging.AddFilter("Microsoft", LogLevel.Warning);//忽略系统日志
    
                        logging.AddLog4Net("Config/log4net.config");//指定log4net配置文件(注册log4net中间件)
                    })
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
        }
    

      3)、使用

    public class HomeController : Controller
        {
            //通过构造函数依赖注入
            private readonly ILogger<HomeController> _logger;
    
            public HomeController(ILogger<HomeController> logger)
            {
                _logger = logger;
            }
    
            public JsonResult Test()
            {
                try
                {
                    int a = 0;
                    int b = 1;
                    int c = b / a;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);//写入日志
                }
                return new JsonResult(new
                {
                    status = true
                });
            }
      }

      

    在项目文件夹中,找到log文件夹,生成对应时间的 日志文件

    数据库

     

  • 相关阅读:
    sqhhb
    12333
    12

    今日份
    12
    彻底理解 Cookie、Session、Token
    https原理
    12312
    uiower
  • 原文地址:https://www.cnblogs.com/licm/p/11872229.html
Copyright © 2011-2022 走看看