Log4net比Console的main()更早运行?

时间:2021-03-10 21:26:31
配置了下log4net,把debug和info的日志路径设为一样,以日期的形式记录。 
这样配置会引起错误,开始后console上显示文件被另一进程使用,可以问题是main()函数尚未执行,那么这个错误是从哪跑出来的?? 
  
ps:比main更早运行的有其他的函数和事件吗? 

8 个解决方案

#1


该回复于2010-12-02 12:29:59被版主删除

#2


AssemblyInfo.cs 里。

#3


请贴出代码和log4net的配置还有异常信息。

#4


应该是一些Initialize 的动作把。

#5


该回复于2010-12-02 12:32:28被版主删除

#6


一个console程序,随便什么内容都行,之后做的改动如下: 
using log4net.Repository.Hierarchy;     //改动一,加上了这三行,using和attribute 
using log4net;// 
[assembly: log4net.Config.XmlConfigurator(Watch = true)] // 
namespace Monitor 

    class Program 
    { 
         
        static void Main(string[] args) 
        { 
        } 
    } 
}



//改动二,加了个app.config,如下,注意fatal和error的文件地址是一样的,为了让它出错

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <!--日志管理-->
  <log4net>
    <appender name="Fatal" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\Error\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyy-MM-dd'.txt'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d  %-3L %-5p  - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="levelMin" value="FATAl"/>
        <param name="levelMax" value="FATAL"/>
        <param name="AcceptOnMatch" value="true"/>
      </filter>
    </appender>
    <appender name="Error" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\Error\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyy-MM-dd'.txt'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d  %-3L %-5p  - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="levelMin" value="WARN"/>
        <param name="levelMax" value="ERROR"/>
        <param name="AcceptOnMatch" value="true"/>
      </filter>
    </appender>
<root>
      <appender-ref ref="Fatal"/>
      <appender-ref ref="Error"/>
      <!--appender-ref ref="Debug"/-->
      <appender-ref ref="Info"/>

    </root>
  </log4net>
</configuration>

把断点设在“  static void Main(string[] args)”上面,然后运行,发现在main函数执行前,console上就有了“log4net:error[RollingFileAppender] Unable to acquire lock on file "C:Users\**\Desktop\project……………….text" 正由另一进程使用,因此该进程无法访问该文件”。这个异常是预料之中的,但是为什么异常会出现在main函数之前呢,我还没运行自己的代码呀

#7


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

#8


配置系统初始化的时刻,
XmlConfigurator 只是配置的一种方式,

#1


该回复于2010-12-02 12:29:59被版主删除

#2


AssemblyInfo.cs 里。

#3


请贴出代码和log4net的配置还有异常信息。

#4


应该是一些Initialize 的动作把。

#5


该回复于2010-12-02 12:32:28被版主删除

#6


一个console程序,随便什么内容都行,之后做的改动如下: 
using log4net.Repository.Hierarchy;     //改动一,加上了这三行,using和attribute 
using log4net;// 
[assembly: log4net.Config.XmlConfigurator(Watch = true)] // 
namespace Monitor 

    class Program 
    { 
         
        static void Main(string[] args) 
        { 
        } 
    } 
}



//改动二,加了个app.config,如下,注意fatal和error的文件地址是一样的,为了让它出错

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <!--日志管理-->
  <log4net>
    <appender name="Fatal" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\Error\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyy-MM-dd'.txt'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d  %-3L %-5p  - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="levelMin" value="FATAl"/>
        <param name="levelMax" value="FATAL"/>
        <param name="AcceptOnMatch" value="true"/>
      </filter>
    </appender>
    <appender name="Error" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\Error\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyy-MM-dd'.txt'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d  %-3L %-5p  - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="levelMin" value="WARN"/>
        <param name="levelMax" value="ERROR"/>
        <param name="AcceptOnMatch" value="true"/>
      </filter>
    </appender>
<root>
      <appender-ref ref="Fatal"/>
      <appender-ref ref="Error"/>
      <!--appender-ref ref="Debug"/-->
      <appender-ref ref="Info"/>

    </root>
  </log4net>
</configuration>

把断点设在“  static void Main(string[] args)”上面,然后运行,发现在main函数执行前,console上就有了“log4net:error[RollingFileAppender] Unable to acquire lock on file "C:Users\**\Desktop\project……………….text" 正由另一进程使用,因此该进程无法访问该文件”。这个异常是预料之中的,但是为什么异常会出现在main函数之前呢,我还没运行自己的代码呀

#7


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

#8


配置系统初始化的时刻,
XmlConfigurator 只是配置的一种方式,