2013-10-14 28 views
0

我遇到了1.2.12 我的日志文件创建成功没有问题,反正也是一个(空)文件总是在创造log4net的最新版本一个奇怪的问题Exe文件的相同目录。log4net的1.2.12控制台应用程序(空)

这是我的XML配置文件:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net> 
    <appender name="Console" type="log4net.Appender.ConsoleAppender"> 
     <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="DEBUG"/> 
     <acceptOnMatch value="false"/> 
     </filter> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%-5.5level] %logger - %message%newline"/> 
     </layout> 
    </appender> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
     <threshold value="ALL"/> 
     <File type="log4net.Util.PatternString" value="%property{LogFileName}"/> 
     <param name="appendToFile" value="false"/> 
     <param name="maximumFileSize" value="20000KB"/> 
     <param name="maxSizeRollBackups" value="200"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%-5.5level] %logger - %message%newline"/> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL"/> 
     <appender-ref ref="RollingFile"/> 
    </root> 
    </log4net> 
</configuration> 

,这是我如何把它从我的主:

class Program 
{ 
    /// <summary> 
    /// The logger 
    /// </summary> 
    private static ILog logger = LogManager.GetLogger(typeof(Program)); 

    /// <summary> 
    /// The CMD line args 
    /// </summary> 
    public static Arguments CmdLineArgs = null; 

    /// <summary> 
    /// Main. 
    /// </summary> 
    /// <param name="args">The arguments.</param> 
    /// <returns></returns> 
    static int Main(string[] args) 
    { 
     try 
     { 
      CmdLineArgs = new Arguments(); 

      Parser CmdLineParser = new Parser(); 

      if (CmdLineParser.ParseArguments(args, CmdLineArgs)) 
      { 
       log4net.GlobalContext.Properties["LogFileName"] = CmdLineArgs.LogFile; 
       log4net.Config.XmlConfigurator.Configure(); 

       CmdLineArgs.PrintArguments(args); 
       CmdLineArgs.Check(); 
       CmdLineArgs.PrintArguments(); 
      } 
      else 
      { 
       CmdLineArgs.PrintArguments(args); 
       Console.WriteLine(CmdLineArgs.GetUsage()); 
       Console.WriteLine(string.Format("Return Code: {0}", 2)); 

       return 2; 
      } 

      logger.Info("Execution Terminated"); 
      logger.Info(string.Format("Return Code: {0}", 0)); 

      return 0; 
     } 
     catch (Exception ex) 
     { 
      if (logger.IsInfoEnabled) 
      { 
       logger.Fatal("Fatal Error:", ex); 
      } 
      else 
      { 
       Console.WriteLine(ex.ToString()); 
       Console.WriteLine(string.Format("Return Code: {0}", 8)); 
      } 

      logger.Info(string.Format("Return Code: {0}", 8)); 

      return 8; 
     } 
    } 
} 

这完全符合log4net的1.2.11和以前的作品,但与log4net的1.2.12创建一个(空)文件。

我使用VS2012和.net 4.0框架。

回答

2

你可能有这样

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 
在你的AssemblyInfo.cs

线。

这将初始化log4net的,并且当第一log4net的DLL访问发生,这在你的例子是,当它执行线

private static ILog logger = LogManager.GetLogger(typeof(Program)); 

会发生这种情况被称为Main方法之前创建(空)日志文件并且在设置Logfile属性之前。

+0

这解决了这个问题。谢谢! –

0

尝试改变

<File type="log4net.Util.PatternString" value="%property{LogFileName}"/> 

成为

<param name="file" type="log4net.Util.PatternString" value="%property{LogFileName}"/> 
+0

我试过了你的建议,但我遇到过同样的问题。 –

1

我怀疑这是因为你在一个静态字段获得ILog一个实例:该配置代码运行之前静态字段将创建并且日志文件名已被设置,因此创建空文件为LogFileName为空。

然后,当您设置日志文件名并调用Configure()时,会创建第二个文件。

相关问题