LogUtil.cpp 3.8 KB
Newer Older
G
groot 已提交
1 2 3 4 5 6
////////////////////////////////////////////////////////////////////////////////
// Copyright 上海赜睿信息科技有限公司(Zilliz) - All Rights Reserved
// Unauthorized copying of this file, via any medium is strictly prohibited.
// Proprietary and confidential.
////////////////////////////////////////////////////////////////////////////////
#include "LogUtil.h"
G
groot 已提交
7
#include "server/ServerConfig.h"
G
groot 已提交
8 9

#include <easylogging++.h>
G
groot 已提交
10
#include <ctype.h>
G
groot 已提交
11

12 13 14
#include <string>
#include <libgen.h>

G
groot 已提交
15
namespace zilliz {
J
jinhai 已提交
16
namespace milvus {
G
groot 已提交
17 18
namespace server {

G
groot 已提交
19
int32_t InitLog(const std::string& log_config_file) {
G
groot 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
#if 0
    ServerConfig &config = ServerConfig::GetInstance();
    ConfigNode log_config = config.GetConfig(CONFIG_LOG);
    const std::map<std::string, ConfigNode>& settings = log_config.GetChildren();

    std::string str_config;
    for(auto iter : settings) {
        str_config += "* ";
        str_config += iter.first;
        str_config += ":";
        str_config.append("\n");

        auto sub_configs = iter.second.GetConfig();
        for(auto it_sub : sub_configs) {
            str_config += "    ";
            str_config += it_sub.first;
            str_config += " = ";
            std::string temp = it_sub.first;
            std::transform(temp.begin(), temp.end(), temp.begin(), ::tolower);
            bool is_text = (temp == "format" || temp == "filename");
            if(is_text){
                str_config += "\"";
            }
            str_config += it_sub.second;
            if(is_text){
                str_config += "\"";
            }
            str_config.append("\n");
        }
    }

    el::Configurations conf;
    conf.parseFromText(str_config);
#else
G
groot 已提交
54
    el::Configurations conf(log_config_file);
G
groot 已提交
55 56
#endif
    el::Loggers::reconfigureAllLoggers(conf);
57 58 59

    el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck);
    el::Helpers::installPreRollOutCallback(rolloutHandler);
G
groot 已提交
60 61 62
    return 0;
}

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
// TODO(yzb) : change the easylogging library to get the log level from parameter rather than filename
void rolloutHandler(const char* filename, std::size_t size){
    char *dirc = strdup(filename);
    char *basec = strdup(filename);
    char *dir = dirname(dirc);
    char *base = basename(basec);

    std::string s(base);
    std::stringstream ss;
    std::string list[] = {"\\", " ", "\'", "\"", "*", "\?", "{", "}", ";", "<", ">", "|", "^", "&", "$", "#", "!", "`", "~"};
    std::string::size_type position;
    for(auto substr : list){
         position = 0;
        while((position = s.find_first_of(substr, position)) != std::string::npos){
            s.insert(position, "\\");
            position += 2;
        }
    }
    if((position = s.find("global")) != std::string::npos){
        ss << "mv " << dir << "/" << s << " " << dir << "/" << s << "." << ++global_idx;
    }
    else if((position = s.find("debug")) != std::string::npos){
        ss << "mv " << dir << "/" << s << " " << dir << "/" << s << "." << ++debug_idx;
    }
    else if((position = s.find("warning")) != std::string::npos){
        ss << "mv " << dir << "/" << s << " " << dir << "/" << s << "." << ++warning_idx;
    }
    else if((position = s.find("trace")) != std::string::npos){
        ss << "mv " << dir << "/" << s << " " << dir << "/" << s << "." << ++trace_idx;
    }
    else if((position = s.find("error")) != std::string::npos){
        ss << "mv " << dir << "/" << s << " " << dir << "/" << s << "." << ++error_idx;
    }
    else if((position = s.find("fatal")) != std::string::npos){
        ss << "mv " << dir << "/" << s << " " << dir << "/" << s << "." << ++fatal_idx;
    }
    else{
        ss << "mv " << dir << "/" << s << " " << dir << "/" << s << "." << ++global_idx;
    }
//    std::cout << ss.str() << std::endl;
    system(ss.str().c_str());
}
G
groot 已提交
105 106

}   // server
J
jinhai 已提交
107
}   // milvus
G
groot 已提交
108
}   // zilliz