NetCore 之 log4net 配置

本文旨在介绍log4net相关节点的配置项,下一章会会详细讲解log4net在Asp.Net core中使用。

log4net 是Apache下的一个开源项目,可以控制日志信息的输出介质并定义了多种日志信息输出模式,可以根据需要将信息输出到控制台、文本文件、windows日志数据库、邮件等。

log4net的核心组件:Logger、Appender、Filter、Layout

  • Logger配置日志的输出介质,日志级别

              节点配置:
                 name: required, loggger名称,在service通过指定logger name调用相应logger,如果配置多个Logger还可以使用Logger继承机制,比如parrent logger <Logger name="base"/>,sub logger inherit parent logger <Logger name="base.sub"/> 或者parent logger设置为<Root/> ,sub logger指定具体<Logger name="sub"/>
                 additivity: option, 默认true,设置false表示当前logger信息不会被记录到父logger中。

             子元素:
                 level: OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

                 appender-ref: 0或者多个,要引用appender的名字,一个logger可以配置多个appender可以将日志信息输出到不同的介质中,比如consol,file

                 param: 0或多个设置一些配置

  • Appender 提供日志的输出介质

           节点配置:

              name: required, 与Logger 中appender-ref 相对应

              type: appender 输出类型:

                         AdoNetAppender              将日志记录到数据库中。可以采用SQL和存储过程两种方式。
                         AnsiColorTerminalAppender   将日志高亮输出到ANSI终端。
                         AspNetTraceAppender         能用asp.net中Trace的方式查看记录的日志。
                         BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。
                         ConsoleAppender             将日志输出到应用程序控制台。
                         EventLogAppender            将日志写到Windows Event Log。
                         FileAppender                将日志输出到文件。
                         ForwardingAppender          发送日志事件到子Appenders。
                         LocalSyslogAppender         将日志写到local syslog service (仅用于UNIX环境下)。
                         MemoryAppender              将日志存到内存缓冲区。
                         NetSendAppender             将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
                         OutputDebugStringAppender   将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。
                         RemoteSyslogAppender        通过UDP网络协议将日志写到Remote syslog service。
                         RemotingAppender            通过.NET Remoting将日志写到远程接收端。
                         RollingFileAppender         将日志以回滚文件的形式写到文件中。
                         SmtpAppender                将日志写到邮件中。
                         SmtpPickupDirAppender       将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。
                         TelnetAppender              客户端通过Telnet来接受日志事件。
                          TraceAppender               将日志写到.NET trace 系统。
                          UdpAppender                 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。
  • Filter 过滤日志信息

              节点配置:

                  type: 表示filter的类型                    

                          DenyAllFilter       阻止所有的日志事件被记录
                           LevelMatchFilter    只有指定等级的日志事件才被记录
                           LevelRangeFilter    日志等级在指定范围内的事件才被记录
                           LoggerMatchFilter   Logger名称匹配,才记录
                           PropertyFilter      消息匹配指定的属性值时才被记录
                           StringMathFilter    消息匹配指定的字符串才被记录
                           MdcFilter
                           NdcFilter
              Filter的工作原理:Filter是按顺序执行,如果满足上一个Filter,日志会输出; 如果不满足上一个filter则会继续匹配下一个Filter。
  • Layout 用于控制Appender的输出格式,最常用应该是用户自定义的PatternLayout

                Layout节点type属性:

                         ExceptionLayout         只呈现日志事件中异常的文本信息
                         PatternLayout           可以通过类型字符串来配置的布局
                         RawPropertyLayout       从日志事件中提取属性值
                         RawTimeStampLayout      从日志事件中提取日期
                         RawUtcTimeStampLayout   从日志事件中提取UTC日期
                         SimpleLayout            很简单的布局
                         XmlLayout               把日志事件格式化为XML元素的布局
 
                 PatternLayout的格式化字符串:
                        %m、%message         输出的日志消息
                         %d、%datetime        输出当前语句运行的时刻,格式%date{yyyy-MM-dd HH:mm:ss,fff}
                         %r、%timestamp       输出程序从运行到执行到当前语句时消耗的毫秒数
                         %p、%level           日志的当前优先级别
                         %c、%logger          当前日志对象的名称
                         %L、%line            输出语句所在的行号
                         %F、%file            输出语句所在的文件名,警告:只在调试的时候有效,调用本地信息会影响性能
                         %a、%appdomain       引发日志事件的应用程序域的名称。
                         %C、%class、%type    引发日志请求的类的全名,警告:会影响性能
                         %exception           异常信息
                         %u、%identity        当前活动用户的名字,我测试的时候%identity返回都是空的。警告:会影响性能
                         %l、%location        引发日志事件的名空间、类名、方法、行号。警告:会影响性能,依赖pdb文件
                         %M、%method          发生日志请求的方法名,警告:会影响性能
                         %n、%newline         换行符
                         %x、%ndc             NDC(nested diagnostic context)
                         %X、%mdc、%P、%properties  等介于 %property
                         %property           输出{log4net:Identity=, log4net:UserName=, log4net:HostName=} 
                         %t、%thread         引发日志事件的线程,如果没有线程名就使用线程号。
                         %w、%username       当前用户的WindowsIdentity,类似:HostName/Username。警告:会影响性能
                         %utcdate            发生日志事件的UTC时间。例如:%utcdate{HH:mm:ss,fff}
                         %%                  输出一个百分号
posted @ 2023-09-13 11:23  云霄宇霁  阅读(506)  评论(0编辑  收藏  举报