最近接了个活,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: )的更多相关文章

  1. 【运维技术】redis(一主两从三哨兵模式搭建)记录

    redis(一主两从三哨兵模式搭建)记录 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也包含我自己,能够节省对应的时间. 软件架构: 生产环境使用三台 ...

  2. 三步快速搭建Typora图床(SM.MS+PicGo)

    三步快速搭建Typora图床(基于SM.MS+PicGo) 前言 在有些同学使用Typora的过程中,会发现Typora不像Word一样,在文档脱离本机后依然正常显示图片,自己的tyopora文件在发 ...

  3. redis(一主两从三哨兵模式搭建)记录

    转自:http://www.cnblogs.com/fly-piglet/p/9836314.html 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也 ...

  4. ABP架构学习系列三:手工搭建ABP框架

    由于公司的项目才接触到ABP这个框架,当时就觉得高大上,什么IOC.AOP.ddd各种专业词汇让人激情 澎湃,但在使用过程中碰到了许多坑,可能也许是没有去看源码导致的,但工作确实没有那么多时间让人去慢 ...

  5. 第三步:搭建JAVA项目

    创建一个JAVA项目,如图: 然后给项目起一个名字,直接点击完成. 下载lucene包解压后放到JDK安装后的lib文件夹里,如图: 首先要导入lucene包,对准项目名右击>构建路径>配 ...

  6. Java日志框架-Logback手册中文版以及官方配置文档教程

    Logback手册中文版:(链接: https://pan.baidu.com/s/1bpMyasR 密码: 6u5c),虽然版本有点旧,但是大体意思差不多,先用中文版了解个大概,然后一切最新的配置以 ...

  7. 实践 - 搭建Redis一主两从三哨兵

    实践 - 搭建Redis一主两从三哨兵 原因: 最近在复习Redis的时候,学习到了为了提高Redis集群的高可用性,有一个模式为哨兵模式.哨兵模式的作用是为了在主节点出现阻塞或者错误,无法接收数据的 ...

  8. Spring Boot Starter自定义实现三步曲

    实现自定义的spring boot starter,只需要三步: 1.一个Bean 2.一个自动配置类 3.一个META-INF/spring.factories配置文件 下面用代码演示这三步. 项目 ...

  9. 三、Spring Boot 日志

    1.日志框架 小张:开发一个大型系统: 1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件? 2.框架来记录系统的一些运行时信息:日志框架 ...

  10. 后端——框架——日志框架——logback——《官网》阅读笔记——第一章节

    第一章节搭建了logback日志框架的环境,演示了Hello World的示例,并详细分析了示例. 搭建日志框架的过程非常简单,只需要在项目的classpath上添加以下三个jar包,logback- ...

随机推荐

  1. Stream流的特点_只能用一次-Stream流中的常用方法_map

    Stream流的特点_只能用一次 Stream流属于管道流,只能被消费(使用)一次 第一个stream流调用完毕方法,数据就会流转到下一个stream上 而这时第一个stream流已经使用完毕,就会关 ...

  2. mysql查询逗号,分隔的多个id连表查询

    先来几个SQL看看效果 SELECT i.*,n.*FROM iLEFT JOIN n on FIND_IN_SET(n.id, i.n_id)GROUP BY n.id效果图: 想把信息都放一行里面 ...

  3. Grafana 系列文章(十):为什么应该使用 Loki

    ️URL: https://grafana.com/blog/2020/09/09/all-the-non-technical-advantages-of-loki-reduce-costs-stre ...

  4. 在日报、读后感、小说、公文模版、编程等场景体验了一把chatGPT

    总结/朱季谦 在日报.读后感.小说.公文模版.编程等场景体验了一把chatGPT,说下体会. 昨天经过一顿操作猛如虎的捣鼓,终于在Mac笔记本上将chatGPT的访问环境搭建了起来,忍不住立马开始玩起 ...

  5. SpringCloud GateWay网关(入门)

    1.介绍 强烈推荐,看官网文档 Spring Cloud Gateway ①简介 Cloud全家桶里有个重要组件:网关 SpringCloud Gateway基于WebFlux框架 WebFlux底层 ...

  6. Ubuntu下的FTP Servers搭建与连接

    1.安装FTP:vsftod sudo apt-get install vsftpd   sudo: 使用sudo(super user do)给普通用户赋予权限 不是所有命令都能用sudo执行的,比 ...

  7. 【KAWAKO】TVM-在ubuntu服务器上的安装

    目录 下载源码 安装依赖库 修改config.cmake文件 编译 安装python库 添加tophub 简单验证 官方的安装教程在这里 下载源码 从Download Page中下载下来的源码是0.8 ...

  8. DomDom

    DomDom 目录 DomDom 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 GetShell 2.1 尝试命令执行 2.2 nc反弹shell失败 2.3 PHP ...

  9. CF845F - Guards In The Storehouse

    题意:在 \((x,y)\) 放一个哨兵,可以监视本行后面的所有格子直到障碍.本列后面所有的格子直到障碍.求使全盘最多一个位置不被监视的方案总数. 我们发现,因为 \(nm\le 250\),所以 \ ...

  10. Java第二讲动手动脑

    1. 运行结果 上述代码方法名相同,但是数据类型不同,体现了Java重载的特点(1)方法名相同(2)参数类型不同,参数个数不同,或者是参数类型的顺序不同.也体现了Java中,当函数名相同时,会通过 参 ...