随笔 - 5  文章 - 0  评论 - 0  阅读 - 1959

浅说.NET log4net日志

一、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日志,还有很多不足,想要深入了解可以参考其他资深博主的博客

posted on   翟冰钗  阅读(164)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示