第一步:

通过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. 【学习笔记】C/C++ 设计模式 - 观察者模式

    前言 估计 2020 年写应用程序的机会比较多,之前一直在做嵌入式驱动程序和Android系统定制方面的工作,在应用程序方面积累的不是很多,因此迫切需要多学学应用编程这方面的知识. 之前在写小的应用程 ...

  2. SQL Case条件判断SQL

    问题描述:在表中取到一些值做出判断,配合监控监测一些表中的数据.使用select case when if 来做条件查询判断 CASE 表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-th ...

  3. ASP.NET Core - 入口文件

    1. 入口文件   一个应用程序总有一个入口文件,是应用启动代码开始执行的地方,这里往往也会涉及到应用的各种配置.当我们接触到一个新框架的时候,可以从入口文件入手,了解入口文件,能够帮助我们更好地理解 ...

  4. SpringMVC的表单组件、国际化

    spring mvc 的表单标签库 1.Student实体类 package com.southwind.POJO; import lombok.Data; @Data public class St ...

  5. vue中央事件

    详情请看这个链接https://blog.csdn.net/sinat_17775997/article/details/59025563

  6. BUUCTF-[强网杯2019]随便注

    强网杯2019随便注 它说随便注,它可不是随便注入的哈 首先测试闭合环境,因为有回显,所以很快即知道了是一个单引号闭合 接下来常规操作,得到列数大概为2 1';select 2; 返回了过滤信息 于是 ...

  7. 3D模型在线查看工具

    3D场景工具推荐:NSDT场景编辑器. glTF Viewer 2.0是一个可以在线查看GLTF格式3D模型的,可以对模型进行显示设置.灯光设置来查看模型效果,除此之外还可以对模型进行性能分析和模型验 ...

  8. vue还可以这样写

    1.这两种写法都可以: var vm = new Vue({ data(){ return { scaleFlag:'big', } }, //data:{}, created: function ( ...

  9. CF825F - String Compression

    题意:压缩字符串,把字符串分成若干个子串,每个子串可以被压缩成"循环次数 \(+\) 循环节"的形式,求最小长度. dp 求 lcp 先 \(O(n^2)\) dp 求出所有后缀对 ...

  10. CF884E - Binary Matrix

    题意:对于一个使用十六进制读入的 \(01\) 矩阵,求其中 \(1\) 的连通块个数,空间限制 16MB .\(n\le 2^{12},m\le2^{14}\) 我们认为如何读入是比较基础的内容,不 ...