最近接了个活,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

最新文章

  1. iOS-----写一个规范的单例---&gt;
  2. zigbee学习之路(十四):基于协议栈的无线数据传输
  3. try-catch
  4. PHP命名空间的作用、为什么使用命名空间?
  5. 命令行导入SQL文件
  6. 剑指架构师系列-tomcat6通过伪异步实现connector
  7. ArcGIS Engine 中 Geometric Network 显示流向代码
  8. Proud Merchants
  9. 如何用boost::serialization去序列化派生模板类(续)
  10. Tomcat 7 Connector 精读(2) 协议处理器 Http11Protocol(待续)
  11. 盘点六大在中国复制失败的O2O案例
  12. 使用libcurl提交POST请求
  13. Python+Requests接口测试教程(1):Fiddler抓包工具
  14. UVALive 3942 Remember the Word
  15. Android 消息异步处理之AsyncTask
  16. Python学习之旅(二十九)
  17. C# 13位时间戳转换成标准时间C#代码
  18. nginx命令大全
  19. 夜神模拟器调试android studio项目
  20. 关于Gradle2.0的翻译说明

热门文章

  1. 【力扣】反转链表I和II(迭代和递归)
  2. 保姆级手把手图文并茂教你配置MAC系统Flutter环境
  3. BBS登录与注册功能的总结
  4. shell基础命令知识持续更新
  5. 【MRTK】HoloLens开发基础项目设置
  6. Selenium中的option用法实例
  7. 【TS】联合类型--类型断言--类型推断
  8. FCoE简单介绍
  9. 云小课|MRS数据分析-通过Spark Streaming作业消费Kafka数据
  10. Eureka高可用集群服务端和客户端配置