工具日志接入

接口功能概述

第三方可以直接通过调用该接口,将工具日志发送到服务云。

接口说明

正式:https://zenith.fdcyun.com/v20/api/metrics/transfer/tool-log.svc
测试:https://planet-test.fdcyun.com/v20/api/metrics/transfer/tool-log.svc
批量上传正式地址:https://zenith.fdcyun.com/v20/api/metrics/transfer/tool-log-list.svc
使用批量上传是body是下列实例的对象数组(建议使用批量上传,记录数不能超过1000条)
  • 调用方式: POST
  • 请求头信息(header)
x-token:xxxxx //调用服务云[认证接口]得到的token,未传输此头的请求无法获取数据
x-custid:xxxx //客户主数据GUID 
Content-Type: application/json; charset=utf-8
  • 请求体(body)
{
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value",
  "key": "value"
}
Response Body

成功返回,http状态码为 200

返回0 :表示成功接收到数据并加入队列

失败返回,http状态码为 500

{
    "Message": "应用ID不存在",
    "ExceptionType":"System.Exception",
    "xxx": "xxx" //后续扩展
}

其他http状态码说明

代码 说明 附加说明
200 请求成功
403 未授权
500 具体错误信息

更新说明

  1. 20310430 初版

推荐参考下面的结构

namespace TianXiang.Common.Data
{
    /// <summary>
    /// 日志记录的数据结构
    /// </summary>
#if LOGSERVICE
    [Nest.ElasticsearchType(IdProperty = nameof(OprId))]
#endif
    public sealed class OprLog
    {
        /// <summary>
        /// 操作类别,例如:httpin,consumer
        /// </summary>
        public string OprKind { get; set; }

        /// <summary>
        /// 操作ID,例如: RequestId or MessageId
        /// </summary>
        public string OprId { get; set; }

        /// <summary>
        /// 操作名称,例如:ExecuteNonQuery  or  StringSet
        /// </summary>
        public string OprName { get; set; }


        /// <summary>
        /// parent OprId
        /// </summary>
        public string ParentId { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string RootId { get; set; }


        /// <summary>
        /// 开始执行时间
        /// </summary>
#if LOGSERVICE
        [Nest.Date(Format = "yyyy-MM-dd HH:mm:ss.ffff")]
#endif
        public DateTime StartTime { get; set; }
        /// <summary>
        /// 本次操作的持续执行时间,单位:毫秒
        /// </summary>
        public long Duration { get; set; }

        /// <summary>
        /// 操作的执行状态。
        /// 对于HTTP请求,就用响应的状态码来填充,非WEB类的操作,200成功,500失败
        /// </summary>
        public int Status { get; set; }

        /// <summary>
        /// 指示当前操作是否超出性能阀值。
        /// </summary>
        public int IsSlow { get; set; }

        /// <summary>
        /// 指示当前操作是否出现异常,属于冗余字段,方便查询。
        /// </summary>
        public int HasError { get; set; }


        /// <summary>
        /// 
        /// </summary>
        public string TenantId { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string UserId { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string UserCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string UserName { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string UserRole { get; set; }

        /// <summary>
        /// 业务ID,例如:工作流的流程ID
        /// </summary>
        public string BizId { get; set; }
        /// <summary>
        /// 业务操作名称,例如:某个工作流的节点名称
        /// </summary>
        public string BizName { get; set; }
        /// <summary>
        /// 请求对应的业务功能描述,例如:销售系统>交易管理>交易台账>交易列表页面
        /// </summary>
        public string BizFuncs { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string HttpMethod { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string Url { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string UserAgent { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string HttpRef { get; set; }

        /// <summary>
        /// HTTP响应 的ContentType
        /// </summary>
        public string RespContType { get; set; }


        /// <summary>
        /// 一级模块名称
        /// </summary>
        public string Module { get; set; }
        /// <summary>
        /// 二级模块名称
        /// </summary>
        public string Controller { get; set; }
        /// <summary>
        /// 三级模块名称
        /// </summary>
        public string Action { get; set; }

        /// <summary>
        /// 异常类型
        /// </summary>
        public string ExType { get; set; }
        /// <summary>
        /// 异常消息
        /// </summary>
        public string ExMessage { get; set; }
        /// <summary>
        /// 可理解为 ex.ToString()
        /// </summary>
        public string ExAll { get; set; }



        /// <summary>
        /// 在性能日志中记录所有耗时的操作
        /// </summary>
        public string OprDetails { get; set; }
        /// <summary>
        /// 引发当前操作执行的数据, 
        /// 例如:HttpRequest, Message
        /// </summary>
        public string CtxData { get; set; }
        /// <summary>
        /// 附加信息
        /// </summary>
        public string Addition { get; set; }


        /// <summary>
        /// 应用程序名称
        /// </summary>
        public string AppName { get; set; }

        /// <summary>
        /// 应用程序路径
        /// </summary>
        public string AppPath { get; set; }

        /// <summary>
        /// 应用程序版本
        /// </summary>
        public string AppVersion { get; set; }

        /// <summary>
        /// 机器名称
        /// </summary>
        public string HostName { get; set; }
        /// <summary>
        /// 环境名称
        /// </summary>
        public string EnvName { get; set; }
    }
}