首页 > 其他分享 >浅说.NET log4net日志

浅说.NET log4net日志

时间:2022-10-16 17:44:53浏览次数:36  
标签:log4net 输出 Filter 语句 NET 级别 日志

一、log4net 有四种主要的组件:
1、Logger(记录器)
2、Repository(库)
3、Appender(附着器)
4、Layout(布局)

*Logger:

主要用于记录日志的分类和控制日志的级别.它可以以多种格式输出日志信息,同吋它也可以控制日志的输出级别.

*Appender :

这里我们简单称之为“附着器"。意思就是说日志的输出必须依赖于它,更确切的说以文本形式输出,还是控制台格式输出都必须要依靠它来控制。Log4net定义了多种附着器:

(1) AdoNetAppender将日志记录到数据库中.可以采用SQL和存储过程两种方式。

(2) AnsiColorTerminalAppender 在ANSI 窗口终端写下高亮度的日志时间。

(3) AspNetTraceAppender 能用asp.net中Trace的方式查看记录的日志。

(4) BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。

(5) ConsoleAppender 将日志输出到控制台。

(6) EventLogAppender 将日志写到Windows Event Log。

(7) FileAppender 将日志写到邮件中。

(8) MemoryAppender将日志存到内存缓冲区.

(9) NetSendAppender 将日志输出到Windows Messenger service , 这些日志信息将在用户终端的对话框中显示

(10) RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service.

(11) RemotingAppender 通过.NET Remoting将日志写到远程接收端。

(12) RollingFileAppender 将日志以回滚文件的形式写到文件中

(13) SmtpAppender 将日志写到邮件中

(14) TraceAppender 将日志写到.NET trace 系统

(15) UdpAppender 将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播

*Filter:

Appender是将日志以缺省值的方式输出,意思就是按照默认值的方式输出。而Filter 意思就是过滤器,使用Filter可以将日志以不同格式来输出。

*Layout:

这个用于控制日志输出显示格式。

Log4net的日志对象管理器LogManager : LogManager是用于来管理所有的Logger对象的,GetLogger()可以用来查找已经存在的Logger对象,如果对
象不存在它会自动创建一个Logger对象,并且管理它。

PatternLayout ,用户自定义格式,
内置参数如下
%m(message),输出的日志消息
%n(newline),换行
%d(datetime),输出当前语句运行的时刻
%r(runtime),输出程序从运行到当前语句时消耗的毫秒数
%t(thread id),输出当前语句运行的线程ID
%p(priority): 日志的当前日志级别
%c(class),输出当前语句所在的对象名称
%M(method),输出当前语句所在的方法名称
%f(file),输出当前语句所在的文件名称
%L(line),输出当前语句位于所在的文件中的行号
%l(location),输出当前语句位于的全限定类名,以及源文件和行号
%数字,表示该项的最小长度,如果不够则在左边用空格填充。如:%5p,表示输出日志级别,且长度最小为5个字符
%-数字,表示该项的最小长度,如果不够则在右边用空格填充。如:%-5p,表示输出日志级别,且长度最小为5个字符
%.数字,表示该项的最大长度,如果超出则截断
%数字.数字,表示该项的必须位于最小和最大长度之间,如果超出则截断, 不够则用空格填充
最佳实践: %-d{yyyy-MM-dd HH:mm:ss} [%L] [%c]-[%p] %m%n

Appender Filter
作用:默认情况下Appender对象会将所有日志信息都输出到相应的介质中,通过Appender Filter对象(命令空间:log4net.Filter)可以按照不同的标准过滤日志事件或内容。
内置的Filter组件:
DenyAllFilter ,阻止所有的日志事件被记录
LevelMatchFilter ,只有指定等级的日志事件才被记录
LevelRangeFilter ,日志等级在指定范围内的事件才被记录
LoggerMatchFilter , Logger名称匹配才被记录
PropertyFilter ,消息匹配指定的属性值才被记录
StringMatchFilter ,消息匹配指定的字符串才被记录


二、log4net日志在项目中的使用:

1.通过Nuget安装Log4net程序包

(根据自己的需求选择版本)

2.添加配置文件,配置日志记录的格式等信息

log4net.config配置信息如下:

 这个是我最近做的短视频项目的log4net.config配置信息

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <log4net>
    <!--数据日志-->
    <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <param name="File" value="Log\Info\" />
      <param name="AppendToFile" value="true" />
      <param name="rollingStyle" value="Date" />
      <param name="datePattern" value="yyyy-MM-dd.'Info.log'" />
      <param name="staticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="记录时间:%date %n日志级别:%-5level %n记录类:%logger%n记录描述:%message%n%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>
    <!--错误日志-->
    <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <param name="File" value="Log\Error\" />
      <param name="AppendToFile" value="true" />
      <param name="rollingStyle" value="Date" />
      <param name="datePattern" value="yyyy-MM-dd.'error.log'" />
      <param name="staticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="记录时间:%date %n日志级别:%-5level %n出错类:%logger%n错误描述:%message%n%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      </filter>
    </appender>
    <!--调试日志-->
    <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <param name="File" value="Log\Debug\" />
      <param name="AppendToFile" value="true" />
      <param name="rollingStyle" value="Date" />
      <param name="datePattern" value="yyyy-MM-dd.'debug.log'" />
      <param name="staticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="记录时间:%date %n日志级别:%-5level %n调试类:%logger%n日志描述:%message%n%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      </filter>
    </appender>
    <root>
      <level value="DEBUG" />
      <!--文件形式记录日志-->
      <appender-ref ref="ErrorRollingFileAppender" />
      <appender-ref ref="DebugRollingFileAppender" />
      <appender-ref ref="InfoRollingFileAppender" />
    </root>
  </log4net>
</configuration>

3.封装自定义字段传值所需要的方法

首先在项目中创建App_Code文件夹,用于存放相关帮助类的代码。

在SyncVideosJob.cs 中调用

using引用:

 

namespace Log4net
{
class Program
{
static void Main(string[] args)
{
InitLog4Net();

}

}

}

4、 Log4Net日志级别
Log4net分为如下几个级别:
FATAL  毁灭级别
ERROR  错误级别
WARN    警告级别
INFO    消息级别
DEBUG     调试级别

这几种日志级别高低: FATAL> ERROR> WARN > INFO > DEBUG.

只有日志输出级别大于或等于配置的级别才能输出日志信息。

比如我的日志配置级别为INFO ,那么只有log.Info(), log.Warm(), log.Error(), log.Fatal()才 能输出日志信息, Debug方式就不能输出。

Log4net中还有两种特殊的配置级别: ALL -允许所q有的日志级别输出,OFF -拒绝所有的日志级别输出。

以上是我了解的log4net日志,还有很多不足,想要深入了解可以参考其他资深博主的博客

标签:log4net,输出,Filter,语句,NET,级别,日志
From: https://www.cnblogs.com/zhaibingchai/p/16796649.html

相关文章

  • 管理名称空间资源(Kubernetes)
    管理名称空间资源名称空间(Namespace)是Kubernetes集群级别的资源,用于将集群分隔为多个隔离的逻辑分区以配置给不同的用户、租户、环境或项目使用。例如,可以为development......
  • Netty概述
    Netty概述1.*原生NIO存在的问题NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要具备其他的额外技能:要熟......
  • UltraGCN: Ultra Simplification of Graph Convolutional Networks for Recommendatio
    目录概符号说明Motivation本文方法代码MaoK.,ZhuJ.,XiaoX.,LuB.,WangZ.andHeX.UltraGCN:ultrasimplificationofgraphconvolutionalnetworksforreco......
  • kubernetes学习笔记4-pod
    Pod资源定义​自主式pod资源,很少用到,手动创建的资源,用kubectldelete后不会自动创建,而使用pod控制器管理的才会按照用户期望的重新创建;​资源清单:一级字段(apiVersion|kind|m......
  • 【解决】Intellij IDEA打开报错Caused by: java.net.BindException: Address already
    jetbrainsPyCharmWebStormcom.intellij.ide.plugins.StartupAbortedException:Cannotstartapp原因是IDEA需要在端口6942~6991间找到一个可用端口并绑定但目前这个......
  • 清除SQL Server数据库日志(ldf文件)的几种方法
      随着系统运行时间的推移,数据库日志文件会变得越来越大,这时我们需要对日志文件进行备份或清理。  解决方案1-直接删除本地ldf日志文件:(比较靠谱方案!)  1.......
  • 清除SQL Server数据库日志(ldf文件)的几种方法
      随着系统运行时间的推移,数据库日志文件会变得越来越大,这时我们需要对日志文件进行备份或清理。  解决方案1-直接删除本地ldf日志文件:(比较靠谱方案!)  1.......
  • 【ASP.NET Core Swagger】3、注释(Swashbuckle.AspNetCore.Annotations)
    Swashbuckle.AspNetCore.Annotations包括一组可应用于Controller、Action和Model的自定义属性,以丰富生成的Swagger安装Nugetinstall-packageSwashbuckle.AspNetCore.An......
  • 【ASP.NET Core Swagger】2、多文档(Group)
    生成器将在单个Swagger文档中包含所有API操作。但是,如有必要,您可以创建多个文档。例如,您可能希望每个API版本都有一个单独的文档。案例添加服务、中间件(v1、v2)b......
  • 【ASP.NET Core Swagger】1、介绍
    介绍:Swagger是为帮助我们生成webapi文档的工具,可以直接从您的路由、控制器和模型生成漂亮的API文档相关Nuget包Swashbuckle.AspNetCore.Swagger:一个Swagger对象模......