log4net两分钟三步急速搭建日志框架教程(注意System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System.Configuration.ConfigurationErrorsException: )
最近接了个活,winform的帮人做几个页面,这里就以winform项目为例了,之前log4net都是项目中继承好了的,这次自己研究从0到1搭建了一个,发现其实也蛮简单的,主要分为以下三步和一个注意事项。
第一步
nuget上拉去log4net,或者从别的项目中引用一下(就是把log4net的包拖过来),这个很简单就略过了。
第二步
配置log4net的config文件,这里网上主要有两种方式
一种是自己再添加一个log4net.config(这种我不推荐,太麻烦了,建议使用第二种)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 1. 添加 log4net 配置的节点声明代码-->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler"/>
</configSections> <!--2. log4net 配置的核心代码-->
<log4net>
<!--日志输出级别-->
<root>
<level value="ALL"/>
<appender-ref ref="DebugLogFileAppender"/>
<appender-ref ref="ErrorLogFileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</root> <!--调试日志输出-->
<appender name="DebugLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<StaticLogFileName value="false"/> <!--动态生成文件名-->
<file value="Logs\Log4NetDemo_"/> <!--文件名(带路径)的固定部分-->
<DatePattern value="yyyy-MM-dd'.log'"/> <!--文件名(带路径)的动态部分-->
<Encoding value="utf-8"/> <!--文件编码-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <!--使用最小锁定模型,以允许多个进程可以写入同一个文件 -->
<appendToFile value="true"/> <!--内容是否追加到文件末尾(如果为 False 则覆盖)-->
<RollingStyle value="Composite"/>
<MaximumFileSize value="10MB"/> <!--单个文件最大大小-->
<MaxSizeRollBackups value="10"/> <!--备份文件的个数(保留10个最近的日志,会循环覆盖)-->
<layout type="log4net.Layout.PatternLayout"> <!--输出格式-->
<ConversionPattern value="Level: %-5p
%nThread ID: %t
%nTime: %d
%nClass: %c
%nFile: %F Line: %L
%nMessage: %m
%n%exception
%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
</appender> <!--错误日志输出-->
<appender name="ErrorLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<StaticLogFileName value="false"/> <!--动态生成文件名-->
<file value="Logs\Error Logs\Log4NetDemo_Error_"/> <!--文件名(带路径)的固定部分-->
<DatePattern value="yyyy-MM-dd'.log'"/> <!--文件名(带路径)的动态部分-->
<Encoding value="utf-8"/> <!--文件编码-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <!--使用最小锁定模型,以允许多个进程可以写入同一个文件 -->
<appendToFile value="true"/> <!--内容是否追加到文件末尾(如果为 False 则覆盖)-->
<RollingStyle value="Composite"/>
<MaximumFileSize value="10MB"/> <!--单个文件最大大小-->
<MaxSizeRollBackups value="10"/> <!--备份文件的个数(保留10个最近的日志,会循环覆盖)-->
<layout type="log4net.Layout.PatternLayout"> <!--输出格式-->
<ConversionPattern value="Level: %-5p
%nThread ID: %t
%nTime: %d
%nClass: %c
%nFile: %F Line: %L
%nMessage: %m
%n%exception
%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender> <!--控制台输出-->
<appender name="ConsoleAppender"
type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="ERROR"/>
<foreColor value ="white"/>
<backColor value ="Red,HighIntensity"/>
</mapping>
<mapping>
<level value="DEBUG"/>
<backColor value ="Green"/>
</mapping>
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="Log Level: %-5level%n%date thread[%t] %c%nMessage: %m%n%exception%n"/>
</layout>
</appender> </log4net>
</configuration>
第二种就是我自己用的直接写在项目的config文件里:

不过这里有一个细节要注意:
就是log4net的节点必须放在第一个!!!
就是log4net的节点必须放在第一个!!!
就是log4net的节点必须放在第一个!!!

这里startup放最上面是会报错的:

config文件(这个文件网上有很多,根据自己所需要的格式网上随便拉一个即可):
<?xml version="1.0" encoding="utf-8" ?>
<configuration> <configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections> <connectionStrings />
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="RollingLogFileAppender_DateFormat" />
</root> <logger name="MyLogger.Logging"> <level value="DEBUG" />
</logger> <appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="Log\\" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<param name="MaxSizeRollBackups" value="100" />
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末尾的文字说明-->
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="%记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n所在类:%logger property: [%property{NDC}] - %n描述信息:%message%newline %n" />
</layout>
</appender>
</log4net> </configuration>
第三步
在program.cs(就是应用程序启动的入口函数,如果是asp.net程序就是startup类,更高版本的没有startup类的自己找一下入口函数即可)中加入:
log4net.Config.XmlConfigurator.Configure();

然后再需要打日志的类上面加入(这是我的测试demo,正式开发别写这,否则肯定会被同事喷脑残):

最后如果你是按照我第二种方式操作的,在你bin的debug下应该会多一个log文件夹。

至此,完工,全程两分钟搞完(网上有些其他教程要配AssemblyInfo.cs和搞什么package.config的如果你是从nuget上拉的不需要管这些!如果你是从本地或者其他项目考的不管这些也能正常运行!亲测。。。)
第二步的第一种方法参考自: https://www.cnblogs.com/dhqy/p/13820600.html
log4net两分钟三步急速搭建日志框架教程(注意System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System.Configuration.ConfigurationErrorsException: )的更多相关文章
- 【运维技术】redis(一主两从三哨兵模式搭建)记录
redis(一主两从三哨兵模式搭建)记录 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也包含我自己,能够节省对应的时间. 软件架构: 生产环境使用三台 ...
- 三步快速搭建Typora图床(SM.MS+PicGo)
三步快速搭建Typora图床(基于SM.MS+PicGo) 前言 在有些同学使用Typora的过程中,会发现Typora不像Word一样,在文档脱离本机后依然正常显示图片,自己的tyopora文件在发 ...
- redis(一主两从三哨兵模式搭建)记录
转自:http://www.cnblogs.com/fly-piglet/p/9836314.html 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也 ...
- ABP架构学习系列三:手工搭建ABP框架
由于公司的项目才接触到ABP这个框架,当时就觉得高大上,什么IOC.AOP.ddd各种专业词汇让人激情 澎湃,但在使用过程中碰到了许多坑,可能也许是没有去看源码导致的,但工作确实没有那么多时间让人去慢 ...
- 第三步:搭建JAVA项目
创建一个JAVA项目,如图: 然后给项目起一个名字,直接点击完成. 下载lucene包解压后放到JDK安装后的lib文件夹里,如图: 首先要导入lucene包,对准项目名右击>构建路径>配 ...
- Java日志框架-Logback手册中文版以及官方配置文档教程
Logback手册中文版:(链接: https://pan.baidu.com/s/1bpMyasR 密码: 6u5c),虽然版本有点旧,但是大体意思差不多,先用中文版了解个大概,然后一切最新的配置以 ...
- 实践 - 搭建Redis一主两从三哨兵
实践 - 搭建Redis一主两从三哨兵 原因: 最近在复习Redis的时候,学习到了为了提高Redis集群的高可用性,有一个模式为哨兵模式.哨兵模式的作用是为了在主节点出现阻塞或者错误,无法接收数据的 ...
- Spring Boot Starter自定义实现三步曲
实现自定义的spring boot starter,只需要三步: 1.一个Bean 2.一个自动配置类 3.一个META-INF/spring.factories配置文件 下面用代码演示这三步. 项目 ...
- 三、Spring Boot 日志
1.日志框架 小张:开发一个大型系统: 1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件? 2.框架来记录系统的一些运行时信息:日志框架 ...
- 后端——框架——日志框架——logback——《官网》阅读笔记——第一章节
第一章节搭建了logback日志框架的环境,演示了Hello World的示例,并详细分析了示例. 搭建日志框架的过程非常简单,只需要在项目的classpath上添加以下三个jar包,logback- ...
随机推荐
- VUE assets里的scss没有引用会被打包进代码里,本地代码和打包后的代码样式不一致解决办法
1.打包部署后,发现样式和本地运行时候代码不一致 经过排查发现 这个路径的文件被打包进去了,但是我并没有引用这个文件啊啊啊啊啊a~~~~ src\assets\webgl-assets\scss\st ...
- 华为云发布冷启动加速解决方案:助力Serverless计算速度提升90%+
摘要:本文介绍了华为云对冷启动优化这一业界难题的探索之路,创新提出了基于进程级快照的优化方案. 作者信息-- 子游:华为元戎高级工程师 平山:华为云中间件 Serverless 负责人 琪君:华为元戎 ...
- 【学习笔记】C++ 常量折叠原理和验证
以下的代码很有意思,在相同时刻,相同的内存地址,数据居然会不一样. #include <iostream> int main(void) { const int const_val = 3 ...
- 朋友圈那串神秘字符背后的开源项目「GitHub 热点速览」
如果你这周没刷到类似 "npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237..." 的一串字符,那就说明本期 GitHub T ...
- MySQL 如何实现数据更新
一般在更新时会遇到以下场景:1.所有字段全部更新:2.根据条件更新字段中的某部分内容:3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法. 一.方法分类 二.具体用法 (1)根据条 ...
- Fiddler抓手机APP包
*手机和电脑连接在同一wifi下 *fiddler设置 *启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开"Fiddler Options&qu ...
- 一个容器,但是一整个k8s集群
你可能需要一个快速启动和销毁的 k8s 集群:你可能在资源受限的环境中运行 k8s 集群:你可能是一个完全的初学者,觉得搭建完整的 k8s 套件太难.那么这篇短文可能可以帮到你. 各种丐版 k8s 集 ...
- windows环境下安装es和kibana
1 ES安装 1.1 下载地址 https://www.elastic.co/cn/downloads/elasticsearch 1.2 版本选择 注意选择合适的版本,ES依赖于JDK,需要有对应的 ...
- Nginx06 Rewrite
1 简介 rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块.rewrite模块会根据PCRE正则匹配重写URI,然后发起内部 ...
- java_web案例文件下载案例
目的:完成javaweb的文件下载 <!--如果想要一个a标签点击后不论文件类型,都需要弹出下载,保存框:--><!--我们就需要创建一个servlet,让这个a标签指向servle ...