首页 > 其他分享 >log4net两分钟三步急速搭建日志框架教程(注意System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System

log4net两分钟三步急速搭建日志框架教程(注意System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System

时间:2022-12-10 08:55:05浏览次数:70  
标签:log4net startup System Configuration config 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,startup,System,Configuration,config,ConfigurationErrorsException
From: https://www.cnblogs.com/jyj666/p/16970749.html

相关文章