第一步:

通过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. 【新晋开源项目】内网穿透神器[中微子代理] 加入 Dromara 开源社区

    1.关于作者 dromara开源组织成员,dromara/neutrino-proxy项目作者 名称:傲世孤尘.雨韵诗泽 名言: 扎根土壤,心向太阳.积蓄能量,绽放微光. 拘浊酒邀明月,借赤日暖苍穹. ...

  2. 文盘Rust -- rust 连接云上数仓 starwift

    作者:京东云 贾世闻 最近想看看 rust 如何集成 clickhouse,又犯了好吃懒做的心理(不想自己建环境),刚好京东云发布了兼容ck 的云原生数仓 Starwfit,于是搞了个实例折腾一番. ...

  3. Containers feature is disabled. Enable it using the PowerShell script (in an administrative PowerShe

    1.问题如题如下图 2.解决办法 以管理员身份运行Window Terminal(Windows PowerShell),输入图上下方所示命令 Enable-WindowsOptionalFeatur ...

  4. SpringCloud Sleuth链路追踪

    1.概要 一般的,一个分布式服务跟踪系统,主要有三部分: 数据收集 数据存储 数据展示 然而这三个部分其实不都是由SpringCloud Sleuth(下面我简称为Sleuth)完成的,Sleuth负 ...

  5. 1.初识 Django

    设计模式 定义 # mysite/news/models.py from django.db import models class Reporter(models.Model): full_name ...

  6. SQL性能优化的47个小技巧,你了解多少?

    大家好,我是哪吒. 1.先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化. 客户端发送一条查询语句到服务器: 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中 ...

  7. 微信小程序项目中使用icon图标

    效果: 步骤: 1.先让ui负责人把你的账号加入到项目中,加入到项目中后就可以在icon图标库中看到该项目 2.在小程序中使用 新建一个view,在上面加一个class,复制icon名字上去即可,注意 ...

  8. 把Excel自动转换Json格式

    Excel表格转JSON      在实际工作中,我们常常使用Excel记录各种数据,但在各种应用系统传输数据却使用JSON格式,这就需要把Excel转为JSON.如果能把数据转换传输过程自动化就更完 ...

  9. 00-DLL劫持&C语言远程加载shellcode

    0x01 杀软拦截检测规则引导-DLL劫持上线 准备工具 cs vs2019 dll劫持工具:https://bbs.pediy.com/thread-224408.htm 极速PDF:https:/ ...

  10. Vue框架:9,Vue3的用法,setup函数,ref和reactive,计算属性和监听属性,生命周期,toRefs,script setup的作用和lang,Vue后台管理模板

    目录 前端开发之Vue框架 一.Vue3 1.Vue3创建项目 2.setup函数 3.ref和reactive 4.计算属性和监听属性 5.生命周期 6.toRefs 7.script setup的 ...