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- ...
随机推荐
- 聚合查询、分组查询、ORM中如何给表再次添加新的字段、F与Q查询、ORM查询优化、ORM事务操作、ORM常用字段类型、ORM常用字段参数、Ajax、数据编码格式(Content-Type)、ajax携带文件数据
今日内容 聚合查询 在ORM中支持单独使用聚合函数,需要使用aggregate方法. 聚合函数:Max最大.Min最小.Sum总和.Avg平均.count统计 from django.db.model ...
- try catch finally,try里有return,finally还执行么?
执行,并且finally的执行早于try里面的return: 结论: 1.不管有木有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: ...
- 默认方法:negate-集合信息筛选
默认方法:negate "与"."或"已经了解了,剩下的"非"(取反)也会简单.默认方法negate的JDK源代码为︰ 集合信息筛选 数组当 ...
- Java 进阶P-7.4+P-7.5
JTable 用JTbale类可以以表格的形式显示和编辑数据. JTable类的对象并不存储数据,他只是数据的表现. 表格是 Swing 新增加的组件,主要功能是把数据以二维表格的形式显示出来,并且允 ...
- MySQL优化六,锁
一,MySQL中的锁 InnoDB中锁非常多,总的来说,可以如下分类: 这些锁都是做什么的?具体含义是什么?我们现在来一一学习. 1.2,解决并发事务问题 我们已经知道事务并发执行时可能带来的各种问题 ...
- 分布式事务 | 使用DTM 的Saga 模式
DTM 简介 前面章节提及的MassTransit.dotnetcore/CAP都提供了分布式事务的处理能力,但也仅局限于Saga和本地消息表模式的实现.那有没有一个独立的分布式事务解决方案,涵盖多种 ...
- C# 编写Windows Service Windows服务程序
一.新建项目--选择Windows 服务,输入新的项目名称,点击确定. 二.服务名称的设置.服务添加安装程序.服务程序代码 1.服务名称的设置:视图 - 解决方案资源管理器 - 你创建的服务项目 默认 ...
- 聊一聊HTTPS双向认证的简单应用
目录 背景 准备工作 ASP.NET Core nginx 反向代理 IIS 部署 总结 参考资料 背景 在三方接口对接中,偶尔会遇到需要传递证书的情况,这种方式其实是在SSL握手过程中会同时验证客户 ...
- LM算法详解
1. 高斯牛顿法 残差函数f(x)为非线性函数,对其一阶泰勒近似有: 这里的J是残差函数f的雅可比矩阵,带入损失函数的: 令其一阶导等于0,得: 这就是论文里常看到的normal equation. ...
- 工控领域上云实践-Zstack和软赢
工业以太网常见五大协议对比 大规模电机控制的方案选择-电机和驱动器篇 大规模电机控制的方案选择-控制器篇 工控领域有各种各样的总线来通讯以控制设备,很小众的接口规范慢慢的更小众了,最常见的接口规范就是 ...