/* XMRig * Copyright 2010 Jeff Garzik * Copyright 2012-2014 pooler * Copyright 2014 Lucas Jones * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2016-2017 XMRig * * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #ifdef WIN32 # include # include # include "3rdparty/winansi.h" #endif #include "log/FileLog.h" FileLog::FileLog(const char *fileName) { uv_fs_t req; m_file = uv_fs_open(uv_default_loop(), &req, fileName, O_CREAT | O_APPEND, 0644, nullptr); uv_fs_req_cleanup(&req); } void FileLog::message(int level, const char* fmt, va_list args) { if (m_file < 0) { return; } time_t now = time(nullptr); tm stime; # ifdef _WIN32 localtime_s(&stime, &now); # else localtime_r(&now, &stime); # endif char *buf = static_cast(malloc(512)); int size = snprintf(buf, 23, "[%d-%02d-%02d %02d:%02d:%02d] ", stime.tm_year + 1900, stime.tm_mon + 1, stime.tm_mday, stime.tm_hour, stime.tm_min, stime.tm_sec); size = vsnprintf(buf + size, 512 - size - 1, fmt, args) + size; buf[size] = '\n'; write(buf, size + 1); } void FileLog::text(const char* fmt, va_list args) { message(0, fmt, args); } void FileLog::onWrite(uv_fs_t *req) { free(req->data); uv_fs_req_cleanup(req); free(req); } void FileLog::write(char *data, size_t size) { uv_buf_t buf = uv_buf_init(data, size); uv_fs_t *req = static_cast(malloc(sizeof(uv_fs_t))); req->data = buf.base; uv_fs_write(uv_default_loop(), req, m_file, &buf, 1, 0, FileLog::onWrite); }