#include "mylog.h"

namespace ai_matrix
{
    MyLog::~MyLog()
    {
        if (of_.is_open())
        {
            of_.close(); //关闭文件
        }
    }

    std::string MyLog::get_name() const
    {
        return name_;
    }

    void MyLog::open_file(std::string filename)
    {
        if (of_.is_open())
        {
            of_.close(); //关闭文件
        }

        of_.open(filename.c_str(), std::ios_base::out | std::ios_base::app);

        assert(of_.is_open() && "file create failed, please check the file's name and path.");

        name_ = filename;
    }

    void MyLog::close()
    {
        if (of_.is_open())
        {
            of_.close(); //关闭文件
        }
    }

    bool MyLog::is_open()
    {
        return of_.is_open();
    }

    void MyLog::write(std::string value)
    {
        if (of_.is_open() == false)
        {
            return;
        }

        long int usValue = 0;
        struct timeval time = {0, 0};
        gettimeofday(&time, nullptr);
        time_t timep = time.tv_sec;
        struct tm *ptm = gmtime(&timep); //返回tm结构的格林尼治时间（GMT）
        char timeString[32] = {0};
        //%F 年-月-日 %X 标准的时间串
        strftime(timeString, 32, "[%F %X:", ptm);
        usValue = time.tv_usec;

        //时间
        of_.fill('0');
        of_ << timeString << std::setw(3) << usValue / 1000 << "]";

        //位置
        std::string file = __FILE__;
        std::string fileName = file.substr(file.rfind('/') + 1);
        of_ << "[" << fileName << " " << __FUNCTION__ << ":" << __LINE__ << "] ";

        //内容
        of_ << value << std::endl;
    }
}
