第一步:

通过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. 行为型模式 - 命令模式Command

    模式的定义与特点 命令模式(Command Pattern),是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化.命令模式是把发出命令的责任和执行命令的责任分割开,委派给不同的对象. ...

  2. Deep Learning-Based Monocular Depth Estimation Methods-A State-of-the-Art Review

    注:刚入门depth estimation,这也是以后的主要研究方向,欢迎同一个方向的加入QQ群(602708168)交流. 1. 论文简介 论文题目:Deep Learning-Based Mono ...

  3. hashlib加密、subprocess、logging日志模块

    1.hashlib加密模块 1.加密:将明文数据处理成密文数据,让人无法看懂 2.为什么加密:保证数据的安全 3.如何判断数据是否加密:如果是一长串没有规律的字符串(数字.字母.符号)那么数据被加密 ...

  4. Element-Ui表单移除校验clearValidate和resetFields

    添加和修改公用一个弹窗,点击添加弹窗后,如果没移除表单校验的话,再点击修改弹窗时校验就会被记住,所以需要移除校验,但在清空表单校验时会报如下错误: 那么,你只需要加上这段话即可 this.$nextT ...

  5. LeetCode HOT 100:乘积最大子数组(动态规划)

    题目:152. 乘积最大子数组 题目描述: 给你一个整数数组,在该数组的所有子数组中,找到一个子数组中所有元素相乘积最大,返回这个最大的积.子数组就是一个数组中,由一个或几个下标连续的元素,组成的小数 ...

  6. HGAME2023_WP_WEEK2

    Git Leakage Githack一波带走,下载得到flag v2board 搜索得知V2Board存在越权漏洞,随便注册个账号拿到authorization 访问/api/v1/admin/us ...

  7. Solon2 之基础:一、常用应用配置说明

    约定参考: //资源路径约定(不用配置:也不能配置) resources/app.yml( 或 app.properties ) #为应用配置文件 resources/WEB-INF/static/ ...

  8. JZOJ 2022.02.11【提高A组】模拟

    \(\text{Solution}\) 首先把 \(T2\) 给切了,\(T1\) 找半天规律找不到 然后打了个表算是暴力了 \(T3\) 也暴... 太暴了... \(T4\) 直接啥也不会 \(\ ...

  9. [SWPUCTF 2021 新生赛]jicao

    CTF web安全 阅读代码可知当传入一个post型的参数id与wllmNB相等并且传入一个get型的参数json: 但是这里有一个函数json_decode,上网搜索可知json_decode这个函 ...

  10. 02#Vue3 Transition 过渡:切换路由组件

    复习作用域插槽 组件可以被插入些许节点作为其子节点,插槽<slot>就是一个接口(或桥梁)引导这些节点进入组件.这些节点应该被渲染到组件里的具体哪个位置,就是具名插槽的作用. 就像是给手机 ...