【云备份|| 日志 day3】服务端配置信息模块

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【云备份|| 日志 day3】服务端配置信息模块

云备份day3


使用文件配置加载一些程序的运行关键信息可以让程序的运行更加灵活,且当需要修改部分内容时,不需要在代码上修改,只需要修改配置文件,然后重启服务器即可。

配置信息

热点判断时间

文件下载URL前缀路径

压缩包后缀名称

上传文件存放路径

压缩文件存放路径

服务端备份信息存放文件

服务器访问 IP 地址

服务器访问端口

采用json 格式将配置信息存放在Cloud.conf中,当启动服务器时,由服务器从.conf文件中读取关键数据。

Cloud.conf

{

“hot_time” : 30,

“server_port” : 9090,

“server_ip” : “1.1.1.1”,

“url_prefix” : “/download/”,

“arc_suffix” : “.lz”,

“pack_dir” : “./packdir/”,

“back_dir” : “./backdir/”,

“manager_file” : “./back.dat”

}

读取配置信息:

在服务器启动时,需要其自动化去加载数据,采取单例模式,在服务器启动时一起进行初始化。(懒汉模式)

#define CONFIG_FILE "./cloud.conf"
class Config{
private:
time_t _hot_time;
int _server_port;
std::string _server_ip;
std::string _url_prefix;
std::string _arc_suffix;
std::string _pack_dir;
std::string _back_dir;
std::string _manager_file;//备份信息的配置管理
private:
static std::mutex _mutex;
static Config *_instance;
Config();
public:
bool ReadConfig(const std::string &filename);
int GetHotTime();
int GetServerPort();
std::string GetServerIp();
std::string GetURLPrefix();
std::string GetArcSuffix();
std::string GetPackDir();
std::string GetBackDir();
std::string GetManagerFile();
public:
   static Config *GetInstance();
};

代码:

#define CONFIG_FILE "./cloud.conf"
  class Config{
    private:
      Config(){
        ReadConfigFile();
      }
      static Config *_instance;
      static std::mutex _mutex;
    private:
      int _hot_time;
      int _server_port;
      std::string _server_ip;
      std::string _download_prefix;
      std::string _packfile_suffix;
      std::string _pack_dir;
      std::string _back_dir;
      std::string _backup_file;
      bool ReadConfigFile() {
        FileUtil fu(CONFIG_FILE);
        std::string body;
        if(fu.GetContent(&body) == false){
          std::cout << "load config file failed!\n";
          return false;
        }
        Json::Value root;
        if (JsonUtil::UnSerialize(body, &root) == false){
          std::cout << "parse config file failed!\n";
          return false;
        }
        _hot_time = root["hot_time"].asInt();
        _server_port = root["server_port"].asInt();
        _server_ip = root["server_ip"].asString();
        _download_prefix = root["download_prefix"].asString();
        _packfile_suffix = root["packfile_suffix"].asString();
        _pack_dir = root["pack_dir"].asString();
        _back_dir = root["back_dir"].asString();
        _backup_file = root["backup_file"].asString();
        return true;
      }
    public:
      static Config *GetInstance() {
        if (_instance == NULL){
          _mutex.lock();
          if (_instance == NULL) {
            _instance = new Config();
          }
          _mutex.unlock();
        }
        return _instance;
      }
      int GetHotTime() {
        return _hot_time;
      }
      int GetServerPort() {
        return _server_port;
      }
      std::string GetServerIp() {
        return _server_ip;
      }
      std::string GetDownloadPrefix() {
        return _download_prefix;
      }
      std::string GetPackFileSuffix() {
        return _packfile_suffix;
      }
      std::string GetPackDir() {
        return _pack_dir;
      }
      std::string GetBackDir() {
        return _back_dir;
      }
      std::string GetBackupFile() {
        return _backup_file;
      }
  };
  Config *Config::_instance = NULL;
  std::mutex Config::_mutex;



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
14天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
123 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
网络协议 Linux Windows
Rsyslog配置不同端口收集不同设备日志
Rsyslog配置不同端口收集不同设备日志
|
1月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
44 1
|
1月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
38 1
|
1月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
133 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
2月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
53 3
Golang语言之Prometheus的日志模块使用案例
|
2月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
1月前
|
存储 缓存 网络协议
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
116 0
|
2月前
|
Shell Python
salt自定义模块内使用日志例子
salt自定义模块内使用日志例子
logging 日志 模块
logging 日志 模块