# CTsLogger -       

***CTsLogger*** -     ,          MQL5.   CTsLogger -                  .  ,          ""   ,      .



##  


- ** **:       
- ** **:             
- ** **:       
- ** **:         
- ****:        (    )
- ** **:       

##  

```mql5
//  
#include "CTsLogger.mqh"

//  
CTsLogger *Logger = new CTsLogger();

//       
Logger.Initialize("mylog.log", true);

//    
Logger.SetGlobalLogLevel(LOG_LEVEL_INFO);

//  
Logger.Info("MyModule", " ");

// :      
delete Logger;
Logger = NULL;
```

##  

CTsLogger  4  ,    :

1. `LOG_LEVEL_ERROR` -  
2. `LOG_LEVEL_WARNING` -   
3. `LOG_LEVEL_INFO` -  ,   
4. `LOG_LEVEL_DEBUG` -  ,  ,   

##   

CTsLogger    ,  ,       ::

```mql5
//     
Logger.EnableDebugMode("TradeModule");

//        
Logger.Debug("TradeModule.OrderExecution", "  ");
Logger.Debug("TradeModule.RiskControl", "   ");

//     
Logger.DisableDebugMode("TradeModule");

//        ,    
Logger.Debug("TradeModule", "   ");
Logger.Debug("TradeModule.OrderExecution", "    ");
```

     :
- "TradeModule"
- "TradeModule.OrderExecution"
- "TradeModule.OrderExecution.StopLoss"
- "TradeModule.RiskControl.Sizing"

##   

  CTsLogger -               .

```mql5
//     
Logger.EnableDebugMode("TradeModule.OrderExecution");

//          INFO
Logger.Debug("TradeModule.OrderExecution", " ...");

// ,    
if(Logger.IsInDebugMode("TradeModule.OrderExecution")) {
    //   
}

//   
Logger.DisableDebugMode("TradeModule.OrderExecution");
```

##     

CTsLogger        :

```mql5
//     
Logger.EnableDebugMode("TradeModule");
Logger.EnableDebugMode("RiskManager");
Logger.EnableDebugMode("Analytics");

//      
Logger.PauseDebugMode();

//        
Logger.Debug("TradeModule", "   ");
Logger.Debug("RiskManager", "   ");

//   
Logger.ResumeDebugMode();

//      
Logger.Debug("TradeModule", "  ");
Logger.Debug("RiskManager", "  ");
```

##  API

###   

- `CTsLogger()` - 
- `~CTsLogger()` - 
- `Initialize(string logFileName, bool logToTerminal = true)` -  
- `SetGlobalLogLevel(ENUM_LOG_LEVEL level)` -    

###  

- `Error(string moduleId, string message)` -  
- `Warning(string moduleId, string message)` -  
- `Info(string moduleId, string message)` -   
- `Debug(string moduleId, string message)` -   

###    

- `EnableDebugMode(string moduleId)` -     
- `DisableDebugMode(string moduleId)` -          
- `IsInDebugMode(string moduleId)` - ,    
- `EnableDebugModeAll()` -      
- `DisableDebugModeAll()` -        

###    

- `PauseDebugMode()` -       
- `ResumeDebugMode()` -       
- `IsDebugModePaused()` - ,      
- `ResetDebugModules()` -     
- `HasChildDebugModules(string parentModule)` -       

##  

###  

```mql5
//   
CTsLogger *Logger = new CTsLogger();
Logger.Initialize("system.log");
Logger.SetGlobalLogLevel(LOG_LEVEL_INFO);

// 
Logger.Info("System", " ");
Logger.Warning("Trade", "   ");
Logger.Error("DataFeed", "  ");
Logger.Debug("Strategy", " : RSI=70.2"); //     INFO

//  
delete Logger;
Logger = NULL;
```

###        

```mql5
CTsLogger *Logger = new CTsLogger();
Logger.Initialize("debug.log");

//      
Logger.EnableDebugMode("OrderManager");

//       
Logger.Debug("OrderManager.Market", "  ");
Logger.Debug("OrderManager.Pending", "  ");
Logger.Debug("OrderManager.StopLoss", "  -");

//       
Logger.DisableDebugMode("OrderManager.Market");

//   
Logger.Debug("OrderManager.Market", "  ");

//     
Logger.Debug("OrderManager.Pending", " ");
Logger.Debug("OrderManager.StopLoss", " ");

//         
Logger.DisableDebugMode("OrderManager");

//  
delete Logger;
Logger = NULL;
```

###   

```mql5
CTsLogger *Logger = new CTsLogger();
Logger.Initialize("debug.log");

//      
Logger.EnableDebugMode("TradeModule");
Logger.EnableDebugMode("RiskManager");
Logger.EnableDebugMode("Analytics");

//        
Logger.PauseDebugMode();

//      
ExecuteCriticalOperation();

//      
Logger.ResumeDebugMode();

//       
Logger.ResetDebugModules();

//  
delete Logger;
Logger = NULL;
```

###   

```mql5
//   
CTsLogger *Logger = NULL;

int OnInit()
{
    //   
    Logger = new CTsLogger();
    Logger.Initialize("ea_" + Symbol() + ".log");
    Logger.SetGlobalLogLevel(LOG_LEVEL_INFO);
    
    //     
    if(IsTesting())
    {
        Logger.EnableDebugMode("Signal");
        Logger.EnableDebugMode("OrderExecution");
    }
    
    Logger.Info("Expert", "   " + Symbol());
    return INIT_SUCCEEDED;
}

void OnDeinit(const int reason)
{
    if(Logger != NULL)
    {
        Logger.Info("Expert", " . : " + string(reason));
        
        //   
        delete Logger;
        Logger = NULL;
    }
}

void OnTick()
{
    if(Logger == NULL) return;
    
    Logger.Debug("Expert.OnTick", "  ");
    
    //   
    
    //     
    if(IsHighVolatilityPeriod())
    {
        Logger.PauseDebugMode();
        ExecuteHighPriorityOperations();
        Logger.ResumeDebugMode();
    }
}
```

##   

- **   **:
  -     
  -      (, "Trade.Open", "Trade.Close")
  -     2-3   

- **  **:
  -      
  -  PauseDebugMode()      
  -       

- ** **:
  -   ,  delete   
  -    NULL        
  -   NULL   

