第一步:

通过Nuget package 搜索Apache Log4net安装

第二步:

在项目Global.asax文件中添加读取 配置文件

第三步:

编写Loghelper 文件

 1 public class LogNetHelper
2 {
3 private static ILog iLog { get; set; }
4 //默认Info等级
5 public static void Write(string message)
6 {
7 SetLogLevel(LogLevel.Info, null).Info(message);
8 }
9 //自定义
10 public static ILog GetInstance(LogLevel level)
11 {
12 return SetLogLevel(level,null);
13 }
14 //是否需要重新加载配置文件使用
15 private static ILog GetIlog(string configPath,string typeStr)
16 {
17 if (string.IsNullOrEmpty(configPath))
18 {
19 iLog = log4net.LogManager.GetLogger(typeStr);
20 }
21 else
22 {
23 iLog = log4net.LogManager.GetLogger(typeStr);
24 log4net.Config.XmlConfigurator.Configure(new FileInfo(configPath));
25 }
26 return iLog;
27 }
28 //封装变化
29 private static ILog SetLogLevel(LogLevel level, string configPath)
30 {
31 ILog log;
32 switch (level)
33 {
34 case LogLevel.Fatal:
35 log = GetIlog(configPath, LogLevel.Fatal.ToString());
36 break;
37 case LogLevel.Error:
38 log = GetIlog(configPath, LogLevel.Error.ToString());
39 break;
40 case LogLevel.Warn:
41 log = GetIlog(configPath, LogLevel.Warn.ToString());
42 break;
43 case LogLevel.Debug:
44 log = GetIlog(configPath, LogLevel.Debug.ToString());
45 break;
46 case LogLevel.Info:
47 log = GetIlog(configPath, LogLevel.Info.ToString());
48 break;
49 default:
50 log = GetIlog(configPath, LogLevel.Info.ToString());
51 break;
52 }
53 return log;
54 }
55 56 }
57 //日志等级
58 public enum LogLevel
59 {
60 Fatal,
61 Error,
62 Warn,
63 Debug,
64 Info
65 }
66
67 }

第四步:

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <log4net debug="false">
3
4 <!--按日期分割日志文件 一天一个-->
5 <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" >
6
7 <!--是否续写-->
8 <param name="AppendToFile" value="true" />
9 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
10 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
11 <param name="StaticLogFileName" value="true" />
12 <!--保存路径-->
13 <param name="File" value="Logs\Error" />
14 <param name="DatePattern" value="yyyy-MM-dd.LOG" />
15 <param name="StaticLogFileName" value="false" />
16 <param name="RollingStyle" value="Date" />
17 <layout type="log4net.Layout.PatternLayout">
18 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
19 </layout>
20 </appender>
21
22 <!--按日志容量分割日志文件 10KB一个-->
23 <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" >
24 <!--是否续写-->
25 <param name="AppendToFile" value="true" />
26 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
27 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
28
29 <param name="StaticLogFileName" value="true" />
30
31 <!--按照文件的大小进行变换日志文件-->
32 <param name="RollingStyle" value="Size" />
33 <param name="File" value="log.txt" />
34 <!--单个文件最大数量 好像只有在 按Size分割时有效-->
35 <param name="MaximumFileSize" value="200KB"/>
36 <!--保留的log文件数量 超过此数量后 自动删除之前的 好像只有在 按Size分割时有效-->
37 <param name="MaxSizeRollBackups" value="2" />
38
39 <param name="StaticLogFileName" value="false" />
40 <layout type="log4net.Layout.PatternLayout">
41 <param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
42 </layout>
43 </appender>
44
45 <!--按等级文件夹日志文件 一天一个-->
46 <appender name="Fatal" type="log4net.Appender.RollingFileAppender" >
47
48 <!--是否续写-->
49 <param name="AppendToFile" value="true" />
50 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
51 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
52 <param name="StaticLogFileName" value="true" />
53 <!--保存路径-->
54 <param name="File" value="Logs\Fatal" />
55 <param name="DatePattern" value="yyyy-MM-dd.LOG" />
56 <param name="StaticLogFileName" value="false" />
57 <param name="RollingStyle" value="Date" />
58 <layout type="log4net.Layout.PatternLayout">
59 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
60 </layout>
61 <filter type="log4net.Filter.LoggerMatchFilter">
62 <loggerToMatch value="Fatal" />
63 </filter>
64 <filter type="log4net.Filter.DenyAllFilter" />
65 </appender>
66
67 <!--按等级文件夹日志文件 一天一个-->
68 <appender name="Error" type="log4net.Appender.RollingFileAppender" >
69
70 <!--是否续写-->
71 <param name="AppendToFile" value="true" />
72 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
73 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
74 <param name="StaticLogFileName" value="true" />
75 <!--保存路径-->
76 <param name="File" value="Logs\Error" />
77 <param name="DatePattern" value="yyyy-MM-dd.LOG" />
78 <param name="StaticLogFileName" value="false" />
79 <param name="RollingStyle" value="Date" />
80 <layout type="log4net.Layout.PatternLayout">
81 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
82 </layout>
83 <filter type="log4net.Filter.LoggerMatchFilter">
84 <loggerToMatch value="Error" />
85 </filter>
86 <filter type="log4net.Filter.DenyAllFilter" />
87 </appender>
88
89 <!--按等级文件夹日志文件 一天一个-->
90 <appender name="Warn" type="log4net.Appender.RollingFileAppender" >
91
92 <!--是否续写-->
93 <param name="AppendToFile" value="true" />
94 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
95 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
96 <param name="StaticLogFileName" value="true" />
97 <!--保存路径-->
98 <param name="File" value="Logs\Warn" />
99 <param name="DatePattern" value="yyyy-MM-dd.LOG" />
100 <param name="StaticLogFileName" value="false" />
101 <param name="RollingStyle" value="Date" />
102 <layout type="log4net.Layout.PatternLayout">
103 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
104 </layout>
105 <filter type="log4net.Filter.LoggerMatchFilter">
106 <loggerToMatch value="Warn" />
107 </filter>
108 <filter type="log4net.Filter.DenyAllFilter" />
109 </appender>
110
111 <!--按等级文件夹日志文件 一天一个-->
112 <appender name="Debug" type="log4net.Appender.RollingFileAppender" >
113
114 <!--是否续写-->
115 <param name="AppendToFile" value="true" />
116 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
117 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
118 <param name="StaticLogFileName" value="true" />
119 <!--保存路径-->
120 <param name="File" value="Logs\Debug" />
121 <param name="DatePattern" value="yyyy-MM-dd.LOG" />
122 <param name="StaticLogFileName" value="false" />
123 <param name="RollingStyle" value="Date" />
124 <layout type="log4net.Layout.PatternLayout">
125 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
126 </layout>
127 <filter type="log4net.Filter.LoggerMatchFilter">
128 <loggerToMatch value="Debug" />
129 </filter>
130 <filter type="log4net.Filter.DenyAllFilter" />
131 </appender>
132
133 <!--按等级文件夹日志文件 一天一个-->
134 <appender name="Info" type="log4net.Appender.RollingFileAppender" >
135
136 <!--是否续写-->
137 <param name="AppendToFile" value="true" />
138 <!--最小锁定模型以允许多个进程可以写入同一个文件-->
139 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
140 <param name="StaticLogFileName" value="true" />
141 <!--保存路径-->
142 <param name="File" value="Logs\Info" />
143 <param name="DatePattern" value="yyyy-MM-dd.LOG" />
144 <param name="StaticLogFileName" value="false" />
145 <param name="RollingStyle" value="Date" />
146 <layout type="log4net.Layout.PatternLayout">
147 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
148 </layout>
149 <filter type="log4net.Filter.LoggerMatchFilter">
150 <loggerToMatch value="Info" />
151 </filter>
152 <filter type="log4net.Filter.DenyAllFilter" />
153 </appender>
154
155
156
157
158
159
160
161 <root>
162 <level value="ALL" />
163 <!--启用按等级文件夹分割-->
164 <appender-ref ref="Fatal" />
165 <appender-ref ref="Error" />
166 <appender-ref ref="Warn" />
167 <appender-ref ref="Debug" />
168 <appender-ref ref="Info" />
169
170 <!--启用按日期分割-->
171 <!--<appender-ref ref="LogFileAppenderByDate" />-->
172
173 <!--启用按容量分割-->
174 <!--<appender-ref ref="LogFileAppenderBySize" />-->
175 <!--启用保存到数据库-->
176 <!--<appender-ref ref="AdoNetAppender" />-->
177 </root>
178
179 </log4net>

<root> 实际上就是一个根logger,所有其它logger都默认继承它,

  • appender-ref 零个或多个 需要引用的appender
  • level 记录级别

<appender> 定义日志的输出方式 name属性必须唯一,type属性必须指定

<layout> 日志布局,type属性必须指定

<filter> 过滤器,type属性必须指定

更多需要参考资料:

Apache Log4net 官方文档建议通读

csdn博友文章

Log4net使用探究的更多相关文章

  1. (六)Net Core项目使用Controller之一 c# log4net 不输出日志 .NET Standard库引用导致的FileNotFoundException探究 获取json串里的某个属性值 common.js 如何调用common.js js 筛选数据 Join 具体用法

    (六)Net Core项目使用Controller之一 一.简介 1.当前最流行的开发模式是前后端分离,Controller作为后端的核心输出,是开发人员使用最多的技术点. 2.个人所在的团队已经选择 ...

  2. 【框架学习与探究之日志组件--Log4Net与NLog】

    前言 本文欢迎转载,作者原创地址:http://www.cnblogs.com/DjlNet/p/7604340.html 序 近日,天气渐冷,懒惰的脑虫又开始作祟了,导致近日内功修炼迟迟未能进步,依 ...

  3. log4net 快速上手使用

    *本随笔仅限快速上手,如需深入探究,可查阅其它博友. 一.下载log4net.dll并添加引用; 二.添加配置文件 log4net.xml : <?xml version="1.0&q ...

  4. NLog日志框架使用探究-1

    目录 前言 为什么是NLog? 目的 配置 基本配置 日志等级 输出例子 目标 参数 规则 日志分发 日志收集 结语 参考文档 前言 日志是每个程序的基本模块.本文是为了探究如何通过NLog方便及记录 ...

  5. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  6. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  7. [原] KVM 虚拟化原理探究 —— 目录

    KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...

  8. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  9. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  10. [原] KVM 虚拟化原理探究(4)— 内存虚拟化

    KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...

随机推荐

  1. Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events

    前情提要 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置 概述 在分析 K8S 集 ...

  2. USACO 2023 January Contest, Bronze Problem 3. Moo Operations

    这道题目灰常简单,我们先从最简单的3个字符串开始 有以下几种情况: 可以看到,只有在中间是O的情况下才有可能变成MOO 辣么我们不妨在在s串中枚举这个中间 O 每枚举到一个就看看能不能用他的本身操作次 ...

  3. Nginx 安装perl

    1 安装包下载 https://www.cpan.org/src获取最新偶数版本下载链接并替换(偶数版本为稳定版) 2 上传到服务器解压 tar -zxvf perl-5.36.0.tar.gz 3 ...

  4. 亲测有效! Wondershare UniConverterV14.1.7 Wondershare PDFelement Professional V9.3.3 含(win/mac版)

    亲测有效!  Wondershare UniConverterV14.1.7  Wondershare PDFelement Professional V9.3.3 含(win/mac版) Wonde ...

  5. Fiddler V5.0 英文/汉化 Windows 抓包工具 【12月29日亲测有效】

    前言 Fiddlerr 功能强大的抓包工具,Web调试工具,HTTP协议抓包调试工具.它能够捕获浏览器和程序的所有http/https通信连接,可以针对访问请求,分析请求数据报文.设置断点.调试web ...

  6. python爬虫学习——列表

    namelist = [] #定义一个空的列表 namelist1 = ["小张","小红","小李"] print(namelist1[0 ...

  7. java7.14

  8. 调用后台接口实现Excel导出功能以及导出乱码问题解决

    实现效果 在导出表格数据的时候,通常分为两种情况 页面列表数据导出 接口返回数据导出 这里主要介绍接口返回数据导出,关于页面的列表数据导出,请看另一篇:vue3+element表格数据导出 接口返回数 ...

  9. Ansible 多机自动化工具 初学笔记

    此文档仅张聪明同学个人笔记:新负责KTH-RPL Cluster GPU的漫漫学习长路 English Docs: https://docs.ansible.com/ansible/latest/in ...

  10. JZOJ 2020.01.11【NOIP提高组】模拟B组

    2020.01.11[NOIP提高组]模拟B组 今天的题是不是和 \(C\) 组放错了? 呵呵 然,却只有 \(300\) 分 首先,\(T4\) 看错题了 后,一时想不到正解 讨论区,一看,三个字- ...