最近接了个活,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,startup,System,Configuration,config,ConfigurationErrorsException From: https://www.cnblogs.com/jyj666/p/16970749.html