• 配置Log4net,IsDebugEnabled = false, IsErrorEnabled = false, IsFatalEnabled = false, IsInfoEnabled = false, IsTraceEnabled = false, IsWarnEnabled = false都是false


    在学习log4net之后,想搭建一个简单的向控制台程序输入日志的log4net配置。没有创建新的config或xml配置Log4net,而是使用控制台生成的App.config中进行配置。配置信息如下:

    <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
        </configSections>
        <log4net>
            <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
                </layout>
            </appender>
            <!-- Set default logging level to DEBUG -->
            <root>
                <level value="DEBUG" />
                <appender-ref ref="ConsoleAppender" />
            </root>
            <!-- Set logging for Spring to INFO.  Logger names in Spring correspond to the namespace -->
            <logger name="Spring">
                <level value="INFO" />
            </logger>
        </log4net>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    </configuration>

    如贴图代码,我在configSections节点中,添加了一个section节点,名字是log4net.,来配置Logger.同时在下面配置了对应的log4net节点。为了将配置数据嵌入到.config文件中,必须使用configSectins元素将节点名称标识到.NET配置文件解析器中。该部分必须指定log4net.Config.Log4NetConfigurationSectionHandler 将用于解析配置部分。此类型必须完全符合组装要求,因为它是由.NET配置文件解析器而不是log4net加载的。必须为log4net程序集指定正确的程序集名称。根据以上配置,我在Main中直接加载配置,获取一个logger日志写入器。但是,就出现了标题所说的问题,查阅很多资料,和查看log4net 网站,始终无法解决。

    public static void Main(string[] args)
            {
    
                    XmlConfigurator.Configure();
                    ILog log = LogManager.GetLogger(typeof(Program));
                    IApplicationContext context = ContextRegistry.GetContext();
                    Person per = (Person)context.GetObject("MyFirstNetIOC");
                    per.setMethod("");
                    MovieLister ls = (MovieLister)context.GetObject("MyMoveList");
                    log.Debug("开始");
                    ls.GetMoves(1);
             }

    于是我决定换一种写法,重新写入一个log4net.config配置。在原app.config文件中,使用应用程序文件配置文件的appSettings部分的设置,来覆盖程序集属性中给出的值。带有键log.Config的设置将覆盖配置文件名(并且被认为是相对于应用程序的基本目录)。带有log.Config.Watch的设置,确定是否监视文件的修改。看代码:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <appSettings>
            <add key="log4net.Config" value="Config/log4net.config"/>
            <add key="log4net.Config.Watch" value="True"/>
        </appSettings>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    </configuration>

    显然,带有键log4net.Config覆盖了程序集属性中给出的值,value值覆盖了配置文件名。新的Log4net配置文件是:Config目录下的log4net.config文件。看log4net.config文件中的代码。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
        </configSections>
        <log4net>
            <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
                </layout>
            </appender>
            <root>
                <level value="DEBUG"/>
                <appender-ref ref="ConsoleAppender" />
            </root>
        </log4net>
    </configuration>

    上述代码中。使用configSectins元素将节点名称标识到.NET配置文件解析器中。该部分必须指定log4net.Config.Log4NetConfigurationSectionHandler 将用于解析配置部分。此类型必须完全符合组装要求,因为它是由.NET配置文件解析器而不是log4net加载的。实现了简单的向控制台打印日志功能,

    控制台应用程序:

    namespace SpringNetIOC
    {
        class Program
        {
            private readonly static ILog log = LogManager.GetLogger(typeof(Program));
            public static void Main(string[] args)
            {
                log.Debug("测试");
                Console.ReadKey();
            }
        }
    }

    运行结果:

        2020-07-08 11:39:51,661 [1] DEBUG SpringNetIOC.Program - 测试

    总结:

      坑点一:新添加的lof4net.config的属性如果没有做设置,使用的默认的运行,也会出现IsErrorEnabled = false等情况。设置如下:

      默认情况如图一:

      

      需要将不复制修改成如下图,否在出现标题所述情况。

      

  • 相关阅读:
    angular-ui-bootstrap插件API
    简易富文本编辑器bootstrap-wysiwyg源码注释
    deployd使用归纳
    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助
    COCOS2D-JS入门-官网template源码解析
    COCOS2D-JS入门-web端项目部署
    jQuery 插件格式
    react native 使用 native-echarts 在安卓上无法显示解决办法
    springboot项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde
    Mac 上 Class JavaLaunchHelper is implemented in both 报错
  • 原文地址:https://www.cnblogs.com/king-tao/p/13266092.html
Copyright © 2020-2023  润新知