log4net 配置文件相对路径配置

本写主要方向为对配置文件放在相对位置,并非程序(项目)根目录下的的配置方法。


一、关于配置方法

关于log4net的使用我想大家都知道,配置也是有很多的方案,在这里给出一些索引地址: 
实例地址:http://blog.csdn.net/pfe_nova/article/details/12225349 
官方配置地址:http://logging.apache.org/log4net/release/config-examples.html

二、我配置时的问题

因为我是做的一个WinFrom的项目,所以自己写了一个单独的log操作程序集(Project),将配置也写在了这个项目中并放到了Config目录下,结构如下图 
配置文件目录结构 
根据网上的配置方法,在AssemblyInfo.cs文件中做了如下配置:

修改前: 
[assembly: log4net.Config.DOMConfigurator(Watch = true, ConfigFile =Log4net.config”)] 
修改后: 
[assembly: log4net.Config.DOMConfigurator(Watch = true, ConfigFile =@”Config\Log4net.config”)]

经过在网上找资料和尝试的过程后,日志一直没有写到文件,后来根据调试,在程序中找到了LogManger类中找到了取配置文件的路径后发现修改前取到的路径不正确后想到使用相对路径进行配置(这是多么低级的问题!!),发现问题后修改成相对路径后正常输出日志,为此贴出配置文件和代码文件部分如下: 
配置文件:

  <log4net>
    <!--跟踪日志配置-->
    <appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" type=""  value="App_log\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyy-MM-dd'.log'" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d  [%5p] %c: %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter,log4net">
        <levelMin value="DEBUG" />
        <levelMax value="WARN" />
      </filter>
    </appender>
    <!--错误日志配置-->
    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
      <file value="App_log\\Error\\" />
      <MaxSizeRollBackups value="20" />
      <StaticLogFileName value="false" />
      <DatePattern value="yyyy-MM-dd'.log'" />
      <RollingStyle value="Size" />
      <MaximumFileSize  value="10MB"/>
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
        <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
        <ConversionPattern value="%d [%t] %-5p %c : [行号:%-5L] %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter,log4net">
        <levelMin value="ERROR" />
        <levelMax value="FATAL" />
      </filter>
    </appender>
    <root>
      <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <level value="ALL" />
      <appender-ref ref="ErrorLogFileAppender" />
      <appender-ref ref="TraceLogFileAppender" />
    </root>
    <logger name="ALL" >
      <!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="ALL" />
      <appender-ref ref="ErrorLogFileAppender"></appender-ref>
      <appender-ref ref="TraceLogFileAppender"></appender-ref>
    </logger>
  </log4net>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

代码文件:

/// <summary>
        /// log对象
        /// </summary>
        private log4net.ILog _log = null;

        private log4net.ILog Log
        {
            get
            {
                if (_log == null)
                {
                    Type type = MethodBase.GetCurrentMethod().DeclaringType;
                    _log = LogManager.GetLogger(type);
                }
                return _log;
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

三、总结

对于写单独配置文件的可以使用如下的方式来加载配置文件: 
1.在AssemblyInfo.cs文件中加入如下代码

[assembly: log4net.Config.DOMConfigurator(Watch = true, ConfigFile = @"Config\Log4net.config")]
  • 1

2.在生成LOG对象之前初始化Log配置文件,代码如下:

/// <summary>
        /// log对象
        /// </summary>
        private log4net.ILog _log = null;

        private log4net.ILog Log
        {
            get
            {
                if (_log == null)
                {
                XmlConfigurator.Configure(@"Config\Log4net.config");
                    Type type = MethodBase.GetCurrentMethod().DeclaringType;
                    _log = LogManager.GetLogger(type);
                }
                return _log;
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

知识需要灵活运用,敬!

猜你喜欢

转载自blog.csdn.net/binnygoal/article/details/79564486
今日推荐