Verified Commit 1ad8f4e4 authored by Tommaso Tocci's avatar Tommaso Tocci
Browse files

makes logs configurable at exec time

loggers can be now configured at execution time, by using environment
variables for both server and client.

Server:
 - ADAFS_LOG_LEVEL
 - ADAFS_DAEMON_LOG_PATH

Client:
 - ADAFS_LOG_LEVEL
 - ADAFS_PRELOAD_LOG_PATH
parent b0df6709
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -6,18 +6,6 @@
#ifndef FS_CONFIGURE_PUBLIC_H
#define FS_CONFIGURE_PUBLIC_H

// To enabled logging for daemon
#define LOG_INFO
//#define LOG_DEBUG
//#define LOG_TRACE
#define LOG_DAEMON_PATH "/tmp/adafs_daemon.log"

// Enable logging for preload
#define LOG_PRELOAD_INFO
//#define LOG_PRELOAD_DEBUG
//#define LOG_PRELOAD_TRACE
#define LOG_PRELOAD_PATH "/tmp/adafs_preload.log"

// Set a hostname suffix when a connection is built. E.g., "-ib" to use Infiniband
#define HOSTNAME_SUFFIX ""
//#define MARGODIAG // enables diagnostics of margo (printed after shutting down
+10 −0
Original line number Diff line number Diff line
@@ -74,4 +74,14 @@
// Debug configurations
//#define RPC_TEST //unused

// environment prefixes
#define ENV_PREFIX "ADAFS_"

// Log
#define DEFAULT_PRELOAD_LOG_PATH "/tmp/adafs_preload.log"
#define DEFAULT_DAEMON_LOG_PATH "/tmp/adafs_daemon.log"

#define DEFAULT_PRELOAD_LOG_LEVEL 4 // info
#define DEFAULT_DAEMON_LOG_LEVEL 4 // info

#endif //FS_CONFIGURE_H
+13 −0
Original line number Diff line number Diff line
#ifndef IFS_LOG_UITIL_HPP
#define IFS_LOG_UITIL_HPP


#include "extern/spdlog/spdlog.h"

spdlog::level::level_enum get_spdlog_level(const std::string& level_str);
spdlog::level::level_enum get_spdlog_level(unsigned int level);
void setup_loggers(const std::vector<std::string>& loggers,
        spdlog::level::level_enum level, const std::string& path);


#endif
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ target_link_libraries(adafs_daemon
    metadata_db
    storage
    distributor
    log_util
    # margo libs
    ${ABT_LIBRARIES}
    ${ABT_SNOOZER_LIBRARIES}
+20 −28
Original line number Diff line number Diff line

#include <daemon/adafs_daemon.hpp>
#include <global/log_util.hpp>
#include <global/rpc/ipc_types.hpp>
#include <global/rpc/rpc_types.hpp>
#include <global/rpc/distributor.hpp>
@@ -344,40 +345,31 @@ void shutdown_handler(int dummy) {
}

void initialize_loggers() {
    std::string path = DEFAULT_DAEMON_LOG_PATH;
    // Try to get log path from env variable
    std::string env_path_key = ENV_PREFIX;
    env_path_key += "DAEMON_LOG_PATH";
    char* env_path = getenv(env_path_key.c_str());
    if (env_path != nullptr) {
        path = env_path;
    }

    spdlog::level::level_enum level = get_spdlog_level(DEFAULT_DAEMON_LOG_LEVEL);
    // Try to get log path from env variable
    std::string env_level_key = ENV_PREFIX;
    env_level_key += "LOG_LEVEL";
    char* env_level = getenv(env_level_key.c_str());
    if (env_level != nullptr) {
        level = get_spdlog_level(env_level);
    }

    auto logger_names = std::vector<std::string>{
        "main",
        "MetadataDB",
        "ChunkStorage",
    };

    /* Create common sink */
    auto file_sink = std::make_shared<spdlog::sinks::simple_file_sink_mt>(LOG_DAEMON_PATH);

    /* Create and configure loggers */
    auto loggers = std::list<std::shared_ptr<spdlog::logger>>();
    for(const auto& name: logger_names){
        auto logger = std::make_shared<spdlog::logger>(name, file_sink);
        logger->flush_on(spdlog::level::trace);
        loggers.push_back(logger);
    }

    /* register loggers */
    for(const auto& logger: loggers){
        spdlog::register_logger(logger);
    }

    // set logger format
    spdlog::set_pattern("[%C-%m-%d %H:%M:%S.%f] %P [%L][%n] %v");

#if defined(LOG_TRACE)
        spdlog::set_level(spdlog::level::trace);
#elif defined(LOG_DEBUG)
        spdlog::set_level(spdlog::level::debug);
#elif defined(LOG_INFO)
        spdlog::set_level(spdlog::level::info);
#else
        spdlog::set_level(spdlog::level::off);
#endif
    setup_loggers(logger_names, level, path);
}

int main(int argc, const char* argv[]) {
Loading