2016-06-04 2 views
0

Я пытался настроить log4net с помощью кода, но я получаю следующее сообщение об ошибке, когда я использую его в качестве Logger.Info("new bar");:не может настроить log4net правильно

в NinjaTrader.Indicator.Logger.Info (МВП Object) в C: \ Users \ Documents \ NinjaTrader 7 \ bin \ Custom \ Indicator \ STSVer1.cs: строка 610
у NinjaTrader.Indicator.STSVer1.OnBarUpdate() в c: \ Users \ Documents \ NinjaTrader 7 \ bin \ Custom \ Indicator \ STSVer1 .cs: ​​строка 108
Ссылка на объект не установлена ​​в экземпляр объекта.

public static class Logger 
{ 
    private static log4net.ILog Log { get; set; } 

    static Logger() 
    { 
     Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 
     hierarchy.Root.RemoveAllAppenders(); /*Remove any other appenders*/ 

     FileAppender fileAppender = new FileAppender(); 
     fileAppender.AppendToFile = true; 
     fileAppender.LockingModel = new FileAppender.MinimalLock(); 
     fileAppender.File = @"c:\temp\logevents.txt"; 
     PatternLayout pl = new PatternLayout(); 
     pl.ConversionPattern = "%d [%2%t] %-5p [%-10c] %m%n%n"; 
     pl.ActivateOptions(); 
     fileAppender.Layout = pl; 
     fileAppender.ActivateOptions(); 

     log4net.Config.BasicConfigurator.Configure(fileAppender); 
     //Test logger 
     ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 


    //  Log = log4net.LogManager.GetLogger(typeof(Logger)); 
    } 

    public static void Error(object msg) 
    { 
     Log.Error(msg); 
    } 

    public static void Error(object msg, Exception ex) 
    { 
     Log.Error(msg, ex); 
    } 

    public static void Error(Exception ex) 
    { 
     Log.Error(ex.Message, ex); 
    } 

    public static void Info(object msg) 
    { 
     Log.Info(msg); 
    } 
} 

ответ

2

В Logger -класса статический конструктор, вы не инициализировать свойство Log, но новую локальную переменную с именем Log. Таким образом, свойство Log равно null, когда вы вызываете его из вашего метода Info.

Измените название типа ILog со следующей строки вашего кода.

ILog Log =LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

Кстати, линия чуть ниже, что вы закомментирована, правильно сделал - относительно правильной инициализации свойства.

Смежные вопросы