//+------------------------------------------------------------------+
//|                                                          log.mq4 |
//|                                      Copyright © 2006, komposter |
//|                                      mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, komposter"
#property link      "mailto:komposterius@mail.ru"

int log_handle = -1;

//+------------------------------------------------------------------+
// void log_open( string ExpertName = "Expert" )
//
// Функция, открывающая личный лог файл эксперта.
// Директория, в которой будет создан файл:
// "...\MetaTrader 4\experts\files\logs\ExpertName\"
// Имя файла - дата записи файла в формате "гггг.мм.дд"
//+------------------------------------------------------------------+
void log_open( string ExpertName = "Expert" )
{
	string log_name = "logs\\" + ExpertName + " (" + Symbol() + ", " + strPeriod( Period() ) + 
							")\\" + TimeToStr( LocalTime(), TIME_DATE ) + ".txt";
	log_handle = FileOpen ( log_name, FILE_READ | FILE_WRITE, " " );
	
	if ( log_handle < 0 )
	{
		int _GetLastError = GetLastError();
		Print( "FileOpen( ", log_name, ", FILE_READ | FILE_WRITE, \" \" ) - Error #", 
																								_GetLastError );
		return(-1);
	}
}
string strPeriod( int intPeriod )
{
	switch ( intPeriod )
	{
		case PERIOD_MN1: return("Monthly");
		case PERIOD_W1:  return("Weekly");
		case PERIOD_D1:  return("Daily");
		case PERIOD_H4:  return("H4");
		case PERIOD_H1:  return("H1");
		case PERIOD_M30: return("M30");
		case PERIOD_M15: return("M15");
		case PERIOD_M5:  return("M5");
		case PERIOD_M1:  return("M1");
		default:		     return("UnknownPeriod");
	}
}

//+------------------------------------------------------------------+
// log_close()
//
// Функция, закрывающая личный лог файл эксперта.
//+------------------------------------------------------------------+
void log_close()
{
	if ( log_handle > 0 ) FileClose( log_handle );
}

//+------------------------------------------------------------------+
// log( string text )
//
// Функция, записывающая строку text в личный лог файл эксперта.
//+------------------------------------------------------------------+
void log( string text )
{
	int _GetLastError = 0;
	
	if ( log_handle < 0 )
	{
		Print( "Log write error! Text: ", text );
		return(-1);
	}
	
	//---- Перемещаем файловый указатель в конец файла
	if ( !FileSeek ( log_handle, 0, SEEK_END ) )
	{
		_GetLastError = GetLastError();
		Print( "FileSeek ( " + log_handle + ", 0, SEEK_END ) - Error #", _GetLastError );
		return(-1);
	}

	//---- Если строка, которую хочет записать эксперт, это не символ переноса строки, 
	//---- добавляем в начало строки время записи
	if ( text != "\n" && text != "\r\n" )
		text = StringConcatenate( TimeToStr( LocalTime(), TIME_SECONDS ), " - - - ", text );

	if ( FileWrite ( log_handle, text ) < 0 )
	{
		_GetLastError = GetLastError();
		Print( "FileWrite ( ", log_handle, ", ", text, " ) - Error #", _GetLastError );
		return(-1);
	}
	
	//---- Сбрасываем записанный тест на диск
	FileFlush( log_handle );
}

