修改一些发现的问题

1.发现问题

项目写了半个月了,一直没怎么自己去看。自己也清楚有非常多需要优化的问题,为了更快的发现问题,找了几个好朋友帮我找找,自己也再看了一下,确实是有不少问题,所以做了一部分的优化。

2.修改问题

①单例模式的错误

        写这个代码的时候,有一些想当然了,好朋友指出了单例模式的构造函数没有设为私有的问题,这里在XInclude/common/def.h定义了一个宏,把所有的单例模式的应用都做了修改。


/**********************************************************                                                                                                                                                                                      
 * Author        : 谢名聪
 * Email         : 869408604@qq.com
 * Last modified : 2022-04-21 11:44
 * Filename      : def.h
 * Description   : 一些通用的宏定义,类的定义放在这里.
 * *******************************************************/
#ifndef BASE_DEF_H
#define BASE_DEF_H
//------------------------------------------
//日志类型
#define LOG_ERROR 1
#define LOG_WARN 2
#define LOG_DEBUG 3

#define SYS_ERROR_LOG XLog::me().errorLog
#define SYS_WARN_LOG XLog::me().warnLog
#define SYS_DEBUG_LOG XLog::me().debugLog

//--------------------------------------------
//输出
#define SYS_ERROR_PRINT XPrint::me().errorPrint
#define SYS_WARN_PRINT XPrint::me().warnPrint
#define SYS_DEBUG_PRINT XPrint::me().debugPrint

//单例模式的宏
//将构造函数 拷贝构造函数设置为私有
#define CREATE_SINGLETON(CLASS_TYPE) \
private:\
    CLASS_TYPE(){}\
    CLASS_TYPE(const CLASS_TYPE & type){}\
public:\
    static CLASS_TYPE & me()\
    {\
        static CLASS_TYPE me;\
        return me;\
    }

#endif

②run.sh脚本的修改

    我再run.sh中加入了mkdir log命令,没有判断log目录是否存在,log路径作为配置文件,也没有用变量表示出来,这里做了一些修改。

log_path=log                                                                                                                                                                                                                                     

ulimit -c 10000

export LD_LIBRARY_PATH=../lib/

#判断是否有log目录
if [ ! -d $log_path ];then
       mkdir -p $log_path
fi

./process config.ini 

③在输出和日志里加入等级

    之前忽略了日志和输出应该需要加入等级控制,可以根据组合打印日志和输出,这里做了以下修改,在makefile中加入宏,当不需要输出和日志的时候,把对应的宏去掉就行。在代码中加入预编译判断。

    在Makefile中的修改

cc=g++                                                                                                                                                                                                                                           

cc_flags=\
         -std=c++11 \
         -I../include \
         -MMD

ln_flags=\
         -L../lib -lprotobuf \
         -L../lib -lmysqlclient \
         -lpthread \
         -lm \
         -ldl \

obj=\
    ../proto/src/User.pb.o \
    XInclude/XConfig/XConfig.o \
    XInclude/XMysql/XMysql.o \
    XInclude/XThread/XThread.o \
    XInclude/XLog/XLog.o \
    XInclude/XLog/XLogFun.o \
    XProcess/XProcess.o \
    Process.o \
    main.o \

#开放打印的类型 ERROR_P WARN_P DEBUG_P
print_def= \
          -D ERROR_P \
          -D WARN_P \
          -D DEBUG_P \

#开放日志类型 ERROR_L WARN_L DEBUG_L
log_def= \
         -D ERROR_L \
         -D WARN_L \
         -D DEBUG_L \
    
target=process

$(target) : $(obj)
        $(cc) $(ln_flags) $(obj) -o $(target)

%.o : %.cpp
        $(cc) $(print_def) $(log_def) $(cc_flags) -c $< -o $@

%.o: %.cc
        $(cc)  $(cc_flags) -c $< -o $@


-include $(obj:.o=.d)

clean:
        rm -f $(obj) $(obj:.o=.d) $(obj:.o=.d*) $(target) core.* log/*

在XLog.h中的修改

/**********************************************************
 * Author        : 谢名聪
 * Email         : 869408604@qq.com
 * Last modified : 2022-04-22 10:36
 * Filename      : XLog.h
 * Description   :将打印内容写入指定的文件,参数替代符为<>
 * 例如LOG_DEBUG("aaa<>",1) 则写入[DEBUG——时间] aaa1.
 * *******************************************************/
#include "XLogFun.h"
#include "../XThread/XThread.h"
#include "../common/def.h"
#include <fstream>
#include <queue>

struct LogData
{
    uint32_t logType;
    std::string logMsg;
};

class XLog:public XThread
{

    CREATE_SINGLETON(XLog);
    public:
        virtual bool exec() override;
    public:
        //配置文件目录
        bool init(std::string path);
    public:
        template<typename... Args>
        void errorLog(std::string str, Args... args) {
#ifdef ERROR_L
            insertLog(LOG_ERROR, str, args...);
#endif
        }
        template<typename... Args>
        void warnLog(std::string str, Args... args) {
#ifdef WARN_L
            insertLog(LOG_WARN, str, args...);
#endif
        }
        template<typename... Args>
        void debugLog(std::string str, Args... args) {
#ifdef DEBUG_L
            insertLog(LOG_DEBUG, str, args...);
#endif
        }
        template<typename... Args>
        void insertLog(uint32_t logType, std::string info, Args... args)
        {
            using namespace x_log_fun;
            LogData data;
            data.logType = logType;
            XLogFun::me().getLogInfo(info, args...);
            data.logMsg = info;
            m_queLogs.push(data);
        }
        void writeLog(LogData info);
    private:
        std::ofstream m_ofs;
        std::queue<LogData> m_queLogs;
};

在XPrint.h中的修改

/**********************************************************                                                                                                                                                                                      
 * Author        : 谢名聪
 * Email         : 869408604@qq.com
 * Last modified : 2022-04-23 08:07
 * Filename      : XPrint.h
 * Description   : 写一个自己的打印类,去替代cout,主要可以
 * 增加颜色的控制,用醒目的颜色来标出自己的打印,便于找问题
 * *******************************************************/

#ifndef X_PRINT_H
#define X_PRINT_H

#include "XLogFun.h"
#include<iostream>


class XPrint
{

    CREATE_SINGLETON(XPrint);

    public:
        //错误输出 红色
        template<typename... Args>
        void errorPrint(std::string str, Args... args) {
#ifdef ERROR_P
            using namespace x_log_fun;
            XLogFun::me().getLogInfo(str, args...);
            printf("\033[31m %s\n\033[0m",str.c_str());
#endif
        }
        //警告输出 黄色
        template<typename... Args>
        void warnPrint(std::string str, Args... args) {
#ifdef WARN_P
            using namespace x_log_fun;
            XLogFun::me().getLogInfo(str, args...);
            printf("\033[33m %s\n\033[0m",str.c_str());
#endif
        }
        //调试输出 绿色
        template<typename... Args>
        void debugPrint(std::string str, Args... args) {
#ifdef DEBUG_P
            using namespace x_log_fun;
            XLogFun::me().getLogInfo(str, args...);
            printf("\033[32m %s\n\033[0m",str.c_str());
#endif
        }
};


#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值