zoukankan      html  css  js  c++  java
  • Log4Net配置注意点

    log4Net的配置文章一搜一大把,配置使用还是有一些点花费了很多时间,这里整理一下,添上坑,让Developer走的更稳。

    编程式配置路径

    新建一个配置文件,通过写代码来动态加载log4Net的配置文件。

    class Program
    {
        static void Main(string[] args)
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Environment.CurrentDirectory + @"" + "Log4Net.config"));
            ILog logger = LogManager.GetLogger("loggerAX");
            //logger.IsDebugEnabled
           
    logger.Warn("Test Logger");
        }
    }

    两点:

    1. 就是在载入log的时候,路径需要小心,要么是将文件属性配置为复制到到编译路径(Copy always);如果不配置文件“copy always”,就需要调整加载的路径,使之能够加载到文件;Environment.CurrentDirectory 返回的是Debug或者release路径。

    image

    2.加载方式为:

    log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Environment.CurrentDirectory + @"" + "Log4Net.config"));

    系统配置文件配置

    所谓系统配置文件就是利用C#中固有的配置文件(web.config,app.config)来进行配置,而不是新建一个配置文件。

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler"></section>
      </configSections>
      <log4net>
        <root name="loggerAX">
    </configuration>
    

    代码如下:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    namespace MonitorTester
    {
        class Program
        {
            static void Main(string[] args)
            {
                ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
           logger.Error("Test Logger"); } } }

    两点需要注意一下:

    1.添加声明,如果没有这个声明,log对象返回的各个级别(DEBUG~OFF)都将是false;另外你在什么哪个类里面调用“LogManager.GetLogger()”,就在那个类的namespace上面添加这个声明。

         [assembly: log4net.Config.XmlConfigurator(Watch = true)]

    2.代码加载的方式

    ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

     Log4Net的输出模式

    1. log4X是可以打印出函数名称的,打印模式%M就是输出函数名称;这样其实就不需要自己封装底层函数来获取当前函数名称;但是有一点:不能对log4x进行封装了,因为log4x默认输出方法名称是调用ILog接口的第一层函数,封装一层(loggerMan)将会导致%M取得是loggerMan的函数名称;
    2. 在配置模式匹配的时候,如果想要添加单词,可以直接写,模式匹配是以%开始,空格结束的,所以%前面的字母会被原封不动的保留下来:%d %p [TID: %t] %c(Line:%L) - [%M]%n

    注:%d:日期;%p:优先级(INFO/debug/warning);%T:进程号;%L:打印发生时类文件的行数;%n:换行

    以上,是配置log4Net的关注点;但是为什么不使用Enterprise Library里面的logger呢?还有可视化工具帮助配置。log4Net的优势就是小巧,需要引入就是一个dll。但是对于EL而言,关联引用的dll就是一堆了。所以如果项目中成套使用EL,那么logger还是使用EL的,否则的化,使用小巧轻便的log4Net吧。

  • 相关阅读:
    SHELL变量
    LA 2797
    计算几何-圆 模板 训练指南267
    hdu 2553 八皇后问题 基础
    CodeForces 557C Arthur and Table STL的使用
    LA 3263 好看的一笔画 欧拉几何+计算几何模板
    UVA 11178 Morley's Theorem 计算几何模板
    poj 1113
    poj 2187 Beauty Contest 凸包模板+求最远点对
    hdu 1081 dp问题:最大子矩阵和
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/3660363.html
Copyright © 2011-2022 走看看