Skip to content

Commit

Permalink
logging: move to an internal rolling log buffer
Browse files Browse the repository at this point in the history
disables logging to the logfile by default
  • Loading branch information
vaxerski committed Nov 14, 2023
1 parent e8469f8 commit e195e51
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 23 deletions.
2 changes: 2 additions & 0 deletions hyprctl/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,8 @@ int main(int argc, char** argv) {
request(fullRequest);
else if (fullRequest.contains("/globalshortcuts"))
request(fullRequest);
else if (fullRequest.contains("/rollinglog"))
request(fullRequest);
else if (fullRequest.contains("/instances"))
instancesRequest(json);
else if (fullRequest.contains("/switchxkblayout"))
Expand Down
2 changes: 1 addition & 1 deletion src/config/ConfigManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ void CConfigManager::setDefaultVars() {
configValues["debug:log_damage"].intValue = 0;
configValues["debug:overlay"].intValue = 0;
configValues["debug:damage_blink"].intValue = 0;
configValues["debug:disable_logs"].intValue = 0;
configValues["debug:disable_logs"].intValue = 1;
configValues["debug:disable_time"].intValue = 1;
configValues["debug:enable_stdout_logs"].intValue = 0;
configValues["debug:damage_tracking"].intValue = DAMAGE_TRACKING_FULL;
Expand Down
2 changes: 1 addition & 1 deletion src/debug/CrashReporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ void CrashReporter::createAndSaveCrash(int sig) {

finalCrashReport += "\n\nLog tail:\n";

finalCrashReport += execAndGet(("cat \"" + Debug::logFile + "\" | tail -n 50").c_str());
finalCrashReport += Debug::rollingLog;

const auto HOME = getenv("HOME");
const auto CACHE_HOME = getenv("XDG_CACHE_HOME");
Expand Down
16 changes: 16 additions & 0 deletions src/debug/HyprCtl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,20 @@ std::string animationsRequest(HyprCtl::eHyprCtlOutputFormat format) {
return ret;
}

std::string rollinglogRequest(HyprCtl::eHyprCtlOutputFormat format) {
std::string result = "";

if (format == HyprCtl::FORMAT_JSON) {
result += "[\n\"log\":\"";
result += escapeJSONStrings(Debug::rollingLog);
result += "\"]";
} else {
result = Debug::rollingLog;
}

return result;
}

std::string globalShortcutsRequest(HyprCtl::eHyprCtlOutputFormat format) {
std::string ret = "";
const auto SHORTCUTS = g_pProtocolManager->m_pGlobalShortcutsProtocolManager->getAllShortcuts();
Expand Down Expand Up @@ -1351,6 +1365,8 @@ std::string getReply(std::string request) {
return globalShortcutsRequest(format);
else if (request == "animations")
return animationsRequest(format);
else if (request == "rollinglog")
return rollinglogRequest(format);
else if (request.starts_with("plugin"))
return dispatchPlugin(request);
else if (request.starts_with("notify"))
Expand Down
3 changes: 2 additions & 1 deletion src/debug/HyprCtl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ namespace HyprCtl {

inline int iSocketFD = -1;

enum eHyprCtlOutputFormat {
enum eHyprCtlOutputFormat
{
FORMAT_NORMAL = 0,
FORMAT_JSON
};
Expand Down
17 changes: 8 additions & 9 deletions src/debug/Log.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,24 @@ void Debug::init(const std::string& IS) {
}

void Debug::wlrLog(wlr_log_importance level, const char* fmt, va_list args) {
if (disableLogs && *disableLogs)
return;

if (level > wlr_log_get_verbosity())
return;

char* outputStr = nullptr;

std::ofstream ofs;
ofs.open(logFile, std::ios::out | std::ios::app);
char* outputStr = nullptr;

vasprintf(&outputStr, fmt, args);

std::string output = std::string(outputStr);
free(outputStr);

ofs << "[wlr] " << output << "\n";
rollingLog += output + "\n";

ofs.close();
if (!disableLogs || !*disableLogs) {
std::ofstream ofs;
ofs.open(logFile, std::ios::out | std::ios::app);
ofs << "[wlr] " << output << "\n";
ofs.close();
}

if (!disableStdout)
std::cout << output << "\n";
Expand Down
28 changes: 17 additions & 11 deletions src/debug/Log.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
#include "../includes.hpp"
#include "../helpers/MiscFunctions.hpp"

#define LOGMESSAGESIZE 1024
#define LOGMESSAGESIZE 1024
#define ROLLING_LOG_SIZE 4096

enum LogLevel {
enum LogLevel
{
NONE = -1,
LOG = 0,
WARN,
Expand All @@ -26,12 +28,11 @@ namespace Debug {
inline bool disableStdout = false;
inline bool trace = false;

inline std::string rollingLog = ""; // rolling log contains the ROLLING_LOG_SIZE tail of the log

void init(const std::string& IS);
template <typename... Args>
void log(LogLevel level, std::format_string<Args...> fmt, Args&&... args) {
if (disableLogs && *disableLogs)
return;

if (level == TRACE && !trace)
return;

Expand All @@ -47,10 +48,6 @@ namespace Debug {
default: break;
}

// log to a file
std::ofstream ofs;
ofs.open(logFile, std::ios::out | std::ios::app);

// print date and time to the ofs
if (disableTime && !*disableTime) {
#ifndef _LIBCPP_VERSION
Expand All @@ -69,9 +66,18 @@ namespace Debug {
// 3. this is actually what std::format in stdlib does
logMsg += std::vformat(fmt.get(), std::make_format_args(args...));

ofs << logMsg << "\n";
rollingLog += logMsg + "\n";
if (rollingLog.size() > ROLLING_LOG_SIZE)
rollingLog = rollingLog.substr(rollingLog.size() - ROLLING_LOG_SIZE);

if (!disableLogs || !*disableLogs) {
// log to a file
std::ofstream ofs;
ofs.open(logFile, std::ios::out | std::ios::app);
ofs << logMsg << "\n";

ofs.close();
ofs.close();
}

// log it to the stdout too.
if (!disableStdout)
Expand Down

0 comments on commit e195e51

Please sign in to comment.