mirror of
https://github.com/xmrig/xmrig.git
synced 2025-03-16 16:42:14 +00:00
Optimize file log.
This commit is contained in:
parent
031e09fede
commit
ead441f5db
5 changed files with 123 additions and 34 deletions
|
@ -6,6 +6,7 @@ set(HEADERS_BASE
|
||||||
src/base/io/json/JsonRequest.h
|
src/base/io/json/JsonRequest.h
|
||||||
src/base/io/log/backends/ConsoleLog.h
|
src/base/io/log/backends/ConsoleLog.h
|
||||||
src/base/io/log/backends/FileLog.h
|
src/base/io/log/backends/FileLog.h
|
||||||
|
src/base/io/log/FileLogWriter.h
|
||||||
src/base/io/log/Log.h
|
src/base/io/log/Log.h
|
||||||
src/base/io/Watcher.h
|
src/base/io/Watcher.h
|
||||||
src/base/kernel/Base.h
|
src/base/kernel/Base.h
|
||||||
|
@ -66,6 +67,7 @@ set(SOURCES_BASE
|
||||||
src/base/io/json/JsonRequest.cpp
|
src/base/io/json/JsonRequest.cpp
|
||||||
src/base/io/log/backends/ConsoleLog.cpp
|
src/base/io/log/backends/ConsoleLog.cpp
|
||||||
src/base/io/log/backends/FileLog.cpp
|
src/base/io/log/backends/FileLog.cpp
|
||||||
|
src/base/io/log/FileLogWriter.cpp
|
||||||
src/base/io/log/Log.cpp
|
src/base/io/log/Log.cpp
|
||||||
src/base/io/Watcher.cpp
|
src/base/io/Watcher.cpp
|
||||||
src/base/kernel/Base.cpp
|
src/base/kernel/Base.cpp
|
||||||
|
|
63
src/base/io/log/FileLogWriter.cpp
Normal file
63
src/base/io/log/FileLogWriter.cpp
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/* XMRig
|
||||||
|
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "base/io/log/FileLogWriter.h"
|
||||||
|
#include "base/kernel/Env.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <uv.h>
|
||||||
|
|
||||||
|
|
||||||
|
bool xmrig::FileLogWriter::open(const char *fileName)
|
||||||
|
{
|
||||||
|
assert(fileName != nullptr);
|
||||||
|
if (!fileName) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uv_fs_t req;
|
||||||
|
m_file = uv_fs_open(uv_default_loop(), &req, Env::expand(fileName), O_CREAT | O_APPEND | O_WRONLY, 0644, nullptr);
|
||||||
|
uv_fs_req_cleanup(&req);
|
||||||
|
|
||||||
|
return isOpen();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool xmrig::FileLogWriter::write(const char *data, size_t size)
|
||||||
|
{
|
||||||
|
if (!isOpen()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uv_buf_t buf = uv_buf_init(new char[size], size);
|
||||||
|
memcpy(buf.base, data, size);
|
||||||
|
|
||||||
|
auto req = new uv_fs_t;
|
||||||
|
req->data = buf.base;
|
||||||
|
|
||||||
|
uv_fs_write(uv_default_loop(), req, m_file, &buf, 1, -1, [](uv_fs_t *req) {
|
||||||
|
delete [] static_cast<char *>(req->data);
|
||||||
|
|
||||||
|
uv_fs_req_cleanup(req);
|
||||||
|
delete req;
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
48
src/base/io/log/FileLogWriter.h
Normal file
48
src/base/io/log/FileLogWriter.h
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/* XMRig
|
||||||
|
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XMRIG_FILELOGWRITER_H
|
||||||
|
#define XMRIG_FILELOGWRITER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
|
class FileLogWriter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FileLogWriter() = default;
|
||||||
|
FileLogWriter(const char *fileName) { open(fileName); }
|
||||||
|
|
||||||
|
inline bool isOpen() const { return m_file >= 0; }
|
||||||
|
|
||||||
|
bool open(const char *fileName);
|
||||||
|
bool write(const char *data, size_t size);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_file = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} /* namespace xmrig */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* XMRIG_FILELOGWRITER_H */
|
|
@ -6,8 +6,8 @@
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
* Copyright 2019 Spudz76 <https://github.com/Spudz76>
|
* Copyright 2019 Spudz76 <https://github.com/Spudz76>
|
||||||
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -25,44 +25,25 @@
|
||||||
|
|
||||||
|
|
||||||
#include "base/io/log/backends/FileLog.h"
|
#include "base/io/log/backends/FileLog.h"
|
||||||
#include "base/kernel/Env.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <uv.h>
|
|
||||||
|
|
||||||
|
|
||||||
xmrig::FileLog::FileLog(const char *fileName)
|
xmrig::FileLog::FileLog(const char *fileName) :
|
||||||
|
m_writer(fileName)
|
||||||
{
|
{
|
||||||
uv_fs_t req;
|
|
||||||
m_file = uv_fs_open(uv_default_loop(), &req, Env::expand(fileName), O_CREAT | O_APPEND | O_WRONLY, 0644, nullptr);
|
|
||||||
uv_fs_req_cleanup(&req);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::FileLog::print(int, const char *line, size_t, size_t size, bool colors)
|
void xmrig::FileLog::print(int, const char *line, size_t, size_t size, bool colors)
|
||||||
{
|
{
|
||||||
if (m_file < 0 || colors) {
|
if (!m_writer.isOpen() || colors) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(strlen(line) == size);
|
assert(strlen(line) == size);
|
||||||
|
|
||||||
uv_buf_t buf = uv_buf_init(new char[size], size);
|
m_writer.write(line, size);
|
||||||
memcpy(buf.base, line, size);
|
|
||||||
|
|
||||||
auto req = new uv_fs_t;
|
|
||||||
req->data = buf.base;
|
|
||||||
|
|
||||||
uv_fs_write(uv_default_loop(), req, m_file, &buf, 1, -1, FileLog::onWrite);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void xmrig::FileLog::onWrite(uv_fs_t *req)
|
|
||||||
{
|
|
||||||
delete [] static_cast<char *>(req->data);
|
|
||||||
|
|
||||||
uv_fs_req_cleanup(req);
|
|
||||||
delete req;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
* Copyright 2019 Spudz76 <https://github.com/Spudz76>
|
* Copyright 2019 Spudz76 <https://github.com/Spudz76>
|
||||||
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -27,9 +27,7 @@
|
||||||
#define XMRIG_FILELOG_H
|
#define XMRIG_FILELOG_H
|
||||||
|
|
||||||
|
|
||||||
typedef struct uv_fs_s uv_fs_t;
|
#include "base/io/log/FileLogWriter.h"
|
||||||
|
|
||||||
|
|
||||||
#include "base/kernel/interfaces/ILogBackend.h"
|
#include "base/kernel/interfaces/ILogBackend.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,14 +39,11 @@ class FileLog : public ILogBackend
|
||||||
public:
|
public:
|
||||||
FileLog(const char *fileName);
|
FileLog(const char *fileName);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void print(int level, const char *line, size_t offset, size_t size, bool colors) override;
|
void print(int level, const char *line, size_t offset, size_t size, bool colors) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void onWrite(uv_fs_t *req);
|
FileLogWriter m_writer;
|
||||||
|
|
||||||
int m_file;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue