第一点:权限问题,一定要给要写入日志文件的目录宽松的权限。
本人就是因为权限问题浪费了很多时间。(因为iis user 的权限是相对低的,log4net又需要创建文件,所以权限一定要给足,后面可以用应用程序池配置)

本人想用单独配置文件,所以基本步骤如下:
1:下载net4log,
具体地址就不贴了,给一个官网的配置说明页:

http://logging.apache.org/log4net/release/manual/configuration.html

2:使用对应版本的dll,

       一定要使用对应版本的,我就因为使用的版本不对应,浪费了时间2.0就是选2.0,4.0就选4.0

3:在项目中引入dll

4:使用单独的配置文件,这样做的好处–修改log4net的配置不会影响到整个应用重启。我的路径是:
Configure目录下,log4netConfig.xml文件
Configure\log4netConfig.xml
具体内容:自己可看相应的说明

<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /></configSections><!--日志记录组建配置--><log4net><!-- Console部分log输出格式的设定 --><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" /></layout></appender><!-- 日志文件部分log输出格式的设定 --><appender name="errorAppender" type="log4net.Appender.RollingFileAppender"><filter type="log4net.Filter.LevelMatchFilter"><levelToMatch value="ERROR" /></filter><filter type="log4net.Filter.DenyAllFilter" /><File value="Logs\\err.log" /><PreserveLogFileNameExtension value="true" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><appender name="infoAppender" type="log4net.Appender.RollingFileAppender"><filter type="log4net.Filter.LevelMatchFilter"><levelToMatch value="INFO" /></filter><filter type="log4net.Filter.DenyAllFilter" /><File value="Logs\\info.log" /><PreserveLogFileNameExtension value="true" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><appender name="debugAppender" type="log4net.Appender.RollingFileAppender"><filter type="log4net.Filter.LevelMatchFilter"><levelToMatch value="DEBUG" /></filter><filter type="log4net.Filter.DenyAllFilter" /><File value="Logs\debug.log" /><PreserveLogFileNameExtension value="true" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><appender name="perfAppender" type="log4net.Appender.RollingFileAppender"><filter type="log4net.Filter.LevelMatchFilter"><levelToMatch value="INFO" /></filter><filter type="log4net.Filter.DenyAllFilter" /><File value="Logs\perf.log" /><PreserveLogFileNameExtension value="true" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date %logger - %message%newline" /></layout></appender><appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"><file value="Logs\Log_" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd'.txt'" /><staticLogFileName value="false" /><layout type="log4net.Layout.PatternLayout"><header value="------------------------------------------------------------
" /><ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /></layout></appender><!-- Setup the root category, add the appenders and set the default level --><root><level value="ALL" /><appender-ref ref="errorAppender" /><appender-ref ref="infoAppender" /><appender-ref ref="debugAppender" /></root><!-- Setup the perfAppender category, add the appenders and set the default level 因为root与logger是父与子的关系,所以不应将:perfAppender在root中显示,避免重复 --><logger name="Performance" additivity="false"><level value="ALL" /><appender-ref ref="perfAppender" /></logger></log4net></configuration>

5:修改AssemblyInfo.cs
用于log4net能够读取配置文件。指定配置文件的路径

 //定义log4net配置文件路径
//[assembly: log4net.Config.DOMConfigurator(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]
//也可用上面的语句,上面的是老的方式
[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]

6:新建存放配置文件的目录,**

并授权可写很重要

**

7:在代码中使用:
首先要定义在类体内:

//DataHandler 是类名,用于反射,多查查就知道了,用的时候替换掉;logger也是可以更改的,后面用的时候记住就好。private static readonly ILog logger = LogManager.GetLogger(typeof(DataHandler));
//在想要用的位置就可以使用了。具体的后面的是和配置文件对应的,如括号内的是要输出的字符串。其中的Debug是日志级别,以标明该日志记录是什么级别的日志,再在配置文件中appender内配置相应的级别就可以将内容写入到相应的文件中。logger.Debug("Debug test");

结束,看对应目录下是否有文件。

log4net的架构分为四个要素:logger;appender;layout;filter。
logger是负责日志的记录者
appender提供记录的介质
layout负责把记入的内容格式化
filter负责把内容进行筛选
可以说,整个过程就是一个日志流水线,每个成员负责其中的一个环节
logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化
log4net具体思路:通过配置文件实例化对象Logger(产生)->appender(接收)->过滤日志(filter)->layout序列化输出 appender的记录介质

log4net配置经验教训相关推荐

  1. 2018 react 大会_React Conf 2018的经验教训

    2018 react 大会 by Yangshun Tay 阳顺泰 React Conf 2018的经验教训 (Lessons Learned at React Conf 2018) I was fo ...

  2. 下拉多选择框 实现方式_物体检测之旅(三)|设计选择,经验教训和物体检测的趋势...

    作者:Jonathan Hui编译:ronghuaiyang 物体检测器,像基于区域的检测或者一阶段的检测器,从不同的起点起步,最后越来越相似,都是朝着更快更准的目的地在前进.事实上,有些性能的差距可 ...

  3. 系统在此应用程序堆栈溢出_从部署我的第一个完整堆栈Web应用程序中学到的经验教训...

    系统在此应用程序堆栈溢出 by Will Abramson 威尔·艾布拉姆森(Will Abramson) 从部署我的第一个完整堆栈Web应用程序中学到的经验教训 (Lessons learned f ...

  4. 硬核软件开发者 30 多年的 11 条经验教训

    从非专业编程到专业的开发者,从 BASIC.C++ 到 Rust,在本篇文章中,已在软件开发行业摸爬滚打 30 年的老兵将带来自己最为深刻的 11 个经验教训. 作者 | Dean Roddey 译者 ...

  5. 软件构造实验一问题解决方法及经验教训

    软件构造实验一问题解决方法及经验教训 一:实验目标概述 1.本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求 ...

  6. MINIX 30年经验教训

    作者: Andrew S. Tanenbaum,阿姆斯特丹自由大学科学学院计算机科学系名誉教授. 译者:孙薇 责编:钱曙光 本文为<程序员>文章,未经允许不得转载,更多精彩文章请订阅201 ...

  7. 【翻译】Google在构建静态代码分析工具方面的经验教训

    软件bug耗费开发者和软件公司大量的时间和金钱. 以2014年为例,被广泛使用的SSL协议实现中的一个("goto fail")bug导致可接受无效的SSL证书,另外一个与日期格式 ...

  8. 经验教训 软件开发_软件可靠性的教训

    经验教训 软件开发 构建可靠和稳定的企业软件需要什么? 首先,停止编写糟糕的代码 不幸的是,很少有开发人员熟悉MITER Corporation的常见软件问题的Common Weakness Enum ...

  9. 入门级第二年:不断增加的痛苦和经验教训

    It's the end of the year, when you have to suffer through all of the "Best of 200x" posts ...

最新文章

  1. 认认真真推荐几个机器学习、深度学习公众号
  2. Verilog中的条件编译语句 `ifdef、`else、`endif 等
  3. es6模块与 commonJS规范的区别
  4. Java多线程之线程并发库原子性操作类
  5. Dataset:数据集集合(NLP方向数据集)——常见的自然语言处理数据集大集合(建议收藏,持续更新)
  6. linux-02-常用的命令-必须掌握
  7. 【英语学习】【Level 07】U06 First Time L3 Subway everyday
  8. Apache PIO 操作Excel
  9. C语言常用8种排序方法耗时测试
  10. STM32—雨滴检测传感器
  11. win10系统迁移后系统重装_怎样将Win10系统转移到SSD固态硬盘
  12. chrome误删书签恢复
  13. 国外开放知识图谱_什么是开放知识,如何传播?
  14. latex特殊字体咋打?+下标打在左边
  15. 北斗系统基础知识2(北斗一代定位原理详述)
  16. Seq2Seq and NMT(基于cs224n的最全综述神经机器翻译技术)
  17. 开源俄版三轴云台软硬件、调参软件调试可用,代码开源,入门说明
  18. python opencv压缩图片_OpenCV Python 缩放图片
  19. C++从1~m数字中任取k个元素,求所有组合算法
  20. 如何选择IT人才外包服务商?

热门文章

  1. java boolean 包_JAVA之包装Boolean详解
  2. Power BI——Filter函数
  3. Python以一定的概率生成某个数
  4. Spring Web 学习 -- DeferredResult 长连接异步返回
  5. ALERT! UUID=xxxxxxxxx does not exist. Dropping to a shell!
  6. 开水果店的技巧,小区开水果店怎么样
  7. Android Manager之Vibrator(振动器)
  8. 虚幻4漏光问题解决方法
  9. JavaScript与垃圾回收(GC)---实现篇
  10. Windows常用消息大全