#ifndef RVC_VENDOR_LOG4LINK_H_ #define RVC_VENDOR_LOG4LINK_H_ #include #include "log4upload.h" typedef enum { VENDORLOG_TYPE_SYSTEM = 0/*系统日志*/, VENDORLOG_TYPE_USER = 1/*用户日志*/, VENDORLOG_TYPE_BUSINESS_SYSTEM = 2, VENDORLOG_TYPE_BUSINESS_USER = 3 } VENDORLOG_TYPE_E; typedef enum { VENDORLOG_LEVEL_DEBUG = 0, VENDORLOG_LEVEL_INFO = 1, VENDORLOG_LEVEL_WARN = 2, VENDORLOG_LEVEL_ERROR = 3, VENDORLOG_LEVEL_FATAL = 4 } VENDORLOG_LEVEL_E; typedef int vendorlog_producer_result; class log_link_private { public: VENDORLOG_LEVEL_E level; VENDORLOG_TYPE_E type; std::string result_code; std::string trace_id; std::string result_msg; std::string log_code; std::string apii; long begin_time; long end_time; long cost_time; std::string business_id; std::string tip_msg; std::string src_type; void* log_producer; bool do_log; log_link_private(VENDORLOG_LEVEL_E t_level, VENDORLOG_TYPE_E t_type) : level(t_level), type(t_type) , result_code("SUC0000"),trace_id(""), result_msg(""), log_code(""), apii("") , begin_time(0), end_time(0), cost_time(0) , business_id(""), tip_msg(""), src_type(""), log_producer(nullptr), do_log(true) { } bool IsAllowToRecord() { return (this->level >= VENDORLOG_LEVEL_INFO); } }; class log_link { public: log_link(VENDORLOG_LEVEL_E t_level, VENDORLOG_TYPE_E t_type); ~log_link(); //用户、系统日志均必填,交易处理结果代码,0表示处理成功,其他表示失败,可为系统本身的错误码,也可为后台系统返回的错误码 log_link& result_code(std::string value); //用户、系统日志均必填,业务跟踪ID, 32字节长度的字符串,唯一识别每笔请求 log_link& trace_id(std::string value); //用户、系统日志LOG_LEVEL_WARN以上必填 //交易处理结果信息,包括成功与失败信息,可为系统本身的成功/失败信息,也可为后台系统返回的成功/失败信息. log_link& result_msg(std::string value); //用户日志必填,日志码 //终端中标识各个交易如读卡、读取身份证等。如果终端由于客观原因无法识别交易场景,则可字段由上游传入。 log_link& log_code(std::string value); log_link& api(std::string value);//用户日志必填,请求路径/接口名称. log_link& business_id(std::string value);//用户日志必填,请求业务ID log_link& tip_msg(std::string value);//用户日志LOG_LEVEL_WARN以上必填,直接向客户展示的报错信息. log_link& src_type(std::string value);//系统日志LOG_LEVEL_FATAL必填,异常来源类型 log_link& begin_time(long value);//用户日志必填, 请求发送/接收时间 log_link& end_time(long value);//用户日志必填, 响应接收 / 应答时间 log_link& cost_time(long value);//消耗时间,自定义字段,单位ms log_link& log_producer(void* producer); log_link& with_extend_log_or_not(bool value);//是否log到文件中,并行阶段需要log到文件 void operator () () const; void fetch_log_item(log_item& log); private: log_link_private* const m_private; private: log_link(const log_link&) : m_private(nullptr) {}; const log_link& operator=(const log_link&) { return *this; }; }; #endif //RVC_VENDOR_LOG4LINK_H_