Log4mql(mini) – light header-only version of Log4mql that provides standardized logging.
Installation/Usage
- Add log4mqlm.mqh to your Include folder.
- View the sample code to get an overview of the usage.
Inputs
Log4mql(mini) requires only one input field. There is no logging to files.
- Loglevel, supports Trace, Debug, Info, Warn, Error and Fatal
Message Pattern
The message pattern will have a fixed format which corresponds to its appropriate severity level, according to below table.
 Severity | Format |
 Sample output |
---|---|---|
 Info (the commonly used default) | %func: %msg |
OnInit:Â Log level: TRACE |
 Debug, Trace |
%func(%file:%line): %msg |
OnInit(log4mqlm_sample.mq4:72): initializing |
 Warn |
WARN %func(%file:%line): %msg |
WARN SomeFunction(log4mqlm_sample.mq4:64): stoploss too tight |
 Error |
ERROR %func(%file:%line): %msg optionally followed by: [, error %lasterr – %lasterrdesc] |
ERROR OnDeinit(log4mqlm_sample.mq4:85): open ‘some file’ failed, error 5004 – Cannot open file |
 Fatal | FATAL … as above |
FATALÂ … |
Functions
Log4mql(mini) provides functions and preprocessor macros for logging, all macros are to be used like functions.
Return type |
Function name |
Description |
---|---|---|
 bool |
 PRINT (…) |
 Prints its message if log level is set at least to INFO (= normal logging behavior).  Supports up to 9 arguments – PRINT(“1”,2,etc) – if you need more, expand the templates.  Returns true if message was logged, else false. |
 bool |
 PRINTF (string format,…) |
 Like PRINT but prints a formatted message. Same rules as known from PrintFormat apply. |
 bool |
 WARN (…)  WARNF (string format,…) |
 Prints its message if log level is set at least to WARN. |
 bool |
 ERROR (…)  ERRORF (string format,…) |
 Prints its message if log level is at least ERROR. Adds _LastError description if set. |
 bool |
 FATAL (…)  FATALF (string format,…) |
 Like ERROR, but with termination. You should call ExpertRemove() or exit immediately otherwise after this.  Example:   if(step<MinStep) { FATALF(“invalid step size: %f”,step); ExpertRemove(); return; } |
 bool |
 DEBUG (…)  DEBUGF (string format,…) |
 Messages for DEBUG level. |
 bool |
 TRACE (…)  TRACEF (string format,…) |
 Messages for TRACE (more verbose than DEBUG, for function entries, calculations etc). |
 string |  L4mq.LastMessage() |  Get the last message that has been logged. |
 int |  L4mq.LastLevel() |  Get the severity level of the last logging event. |
 int |  L4mq.Level() |  Get the severity level of the logger. |
 string |  L4mq.LevelAsString() |  Get the severity level of the logger as string. |
 void |  L4mq.SetLevel(int) |  Set the severity level for the logger. |
 ulong |  L4mq.SeqNr() |  Get the sequence number of the last logged event. |
 bool |  L4mq.logged |  true if the last event was logged. |
 |  |  |
 string |  Log4mql::GetErrorDescription(int err) |  Get the description of an error code like _LastError. |
 string |
 Log4mql::GetUninitReason(int reason) |  Get the description of the uninit reason. |
 string |  Log4mql::LoglevelToString(int level) |  Convert a log level to a descriptive string. |
Notes
- As the functionality strives to be as simple as possible, there is no logging to files. You could implement some on your own if you want.
- You are free to use this code in your work, however, if you share the source code you must not remove the copyright and license notice.
- The full functionality of Log4mql is available here: https://www.mql5.com/en/code/31425 (MT4) or here: https://www.mql5.com/en/code/31452 (MT5)