Commit 4476e21c by chenjinjing

no message

parent 0917a6f1
<config>
<port>40026</port>
</config>
\ No newline at end of file
<port>40005</port>
<dbPort>40002</dbPort>
<dbHost>192.168.0.71</dbHost>
<sign>xxx90909082fsdahfjosadjfpoiwausjorip2hjklrhn1ioud0u124rx0qwejfokasjfolksaujfoas</sign>
</config>
/**创业团队 */
import { CreateTeamConfig } from "../../config/eccParamConfig";
import { DEGREE, OPERATIONALDATATYPE, RALENTTYPE, TABLENAME } from "../../config/enum";
import { operationalData } from "../../data/db/operationalData";
import { eccEnumValue } from "../../tools/eccEnum";
import { eccFormParam } from "../../tools/eccParam";
import { generateSystemId, getFileType, getMySqlMs } from "../../tools/systemTools";
/**
* 添加人才信息
* @param userInfo
* @param param
* @returns
*/
export async function addTeamTalent(userInfo, param) {
const FuncName = "添加创业团队人才信息";
eccFormParam(FuncName, CreateTeamConfig, param);
eccEnumValue(FuncName, "degree", DEGREE, param.degree);
eccEnumValue(FuncName, "talentType", RALENTTYPE, param.talentType);
param.tId = generateSystemId(TABLENAME.创业团队, userInfo.userId);
param.uploadTime = getMySqlMs();
param.dataMonth = getMySqlMs(param.dataMonth);
param.fileType = getFileType(param.fileName);
param.fileName = JSON.stringify(param.fileName);
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.创业团队, param, {} );
return {isSuccess:true};
}
export async function updateTeamTalentInfo() {
}
import { zhyyTableData } from '../data/table/zhyyData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../dataPackage/out';
import { zhyyTableData } from '../../data/table/zhyyData';
import { doubleYBarCharPackage, keyValuePackage, onceYBarChartPackage, rankPackage, tablePackage } from '../../dataPackage/inFrontOut';
import { getDoubleYBarChartOut, getKeyValueOut, getOnceYBarChartOut, getTableOut } from '../../dataPackage/out';
/* 智慧运营 */
......
/**
* 创业团队【添加人才信息】
*/
export const CreateTeamConfig = {
teamName:{type:"String"}, //姓名
sex:{type:"Number"}, //性别
birth:{type:"Number"}, //出生年月
degree:{type:"Number"}, //最高学历
graduationSchool:{type:"String"}, //毕业院校
talentType:{type:"Number"}, //人才类型
des:{type:"String"} //履历描述
}
export enum INTERFACErEQUESTTYPEENUM {
即时更新 = 1,
定时更新
}
\ No newline at end of file
}
/**
* 请求数据中心类型
*/
export enum OPERATIONALDATATYPE {
增加='/yuyi/dataserver/mysql/table/add',
修改='/yuyi/dataserver/mysql/table/update',
删除='/yuyi/dataserver/mysql/table/delete',
查询单个='/yuyi/dataserver/mysql/table/find/one',
查询多个='/yuyi/dataserver/mysql/table/find/many',
分页查询='/yuyi/dataserver/mysql/table/find/manytopage',
查询数据量='/yuyi/dataserver/mysql/table/find/count',
多表联查='/yuyi/dataserver/mysql/table/find/aggragate',
多表分页='/yuyi/dataserver/mysql/table/find/aggragatetopage',
多表单个='/yuyi/dataserver/mysql/table/find/aggragateone'
}
/**
* 表名
*/
export enum TABLENAME {
企业孵化信息='enterprise_fuhua',
租赁信息='enterprise_lease',
企业用户表='enterprise_user',
企业融资='enterprise_financing',
企业荣誉='enterprise_honor',
企业经营信息='enterprise_manage',
企业资质='enterprise_qualification',
参保记录='enterprise_canbao',
创业团队='enterprise_team',
知识产权='enterprise_ipr',
法人信息表='enterprise_legal_person',
企业专利表='enterprise_patent',
企业基础信息表='enterprise'
}
/**上传文件类型 */
export enum FILETYPE {
word = 1,
pdf,
图片,
视频,
多类型
}
/**性别 */
export enum SEX {
= 1,
}
/**文化程度 */
export enum DEGREE {
初中 = 1,
高中,
大专,
本科,
硕士,
博士
}
/**人才类型 */
export enum RALENTTYPE {
国内一流人才 = 1,
}
export enum ERRORENUM {
不存在表 = 1,
身份验证失败,
缺少必要参数_表名,
数据表不存在,
参数错误,
添加时数据对象为空,
修改时数据对象为空,
该方法仅可进行数据操作,
数据操作失败,
该方法仅可进行查询操作,
分页请设置当前页数,
数据查询失败,
该方法仅可进行联合查询操作,
数据联合查询失败
}
/**
* 只用做code码定义
*/
export enum ERRORCODEENUM {
身份验证失败 = 5001,
缺少必要参数_表名 = 5002,
数据表不存在,
}
let bizErrorMsgMap = {};
for (let key in ERRORENUM) {
bizErrorMsgMap[ERRORENUM[key]] = key;
}
export function getBizMsg(param) {
return bizErrorMsgMap[param];
}
\ No newline at end of file
......@@ -2,8 +2,9 @@ const path = require('path');
import * as fs from "fs";
import { BizError } from "../util/bizError";
import { analysisXml } from "../util/myXML";
import { ServerConfig } from "../config/systemClass";
export let port = Number(process.env.PORT) || Number(process.argv[3]) || 7576; //如果xml里面没有配置 就会使用到这里的端口
export let systemConfig = new ServerConfig;
const ConfigName = "serverConfig.xml";
export async function initConfig() {
......@@ -11,14 +12,27 @@ export async function initConfig() {
let buff = fs.readFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), ConfigName));
let configStr = buff.toString();
let configInfo:any = await analysisXml(configStr);
if (!configInfo || !configInfo.config) console.log("xml中无配置加载");
if (!configInfo || !configInfo.config) throw new BizError('xml中无配置');
else {
let config = configInfo.config;
port = config.port[0] || port;
let {port, dbHost, dbPort, sign } = configInfo.config;
systemConfig.port = parseInt(port[0]);
systemConfig.dbPath = analysisDBPathStr(dbHost[0], dbPort[0]);
systemConfig.sign = sign[0];
}
console.log("config init success");
} catch(err) {
console.log('ERROR => 服务器配置解析错误 请检查根目录下 serverConfig.xml 文件是否正确');
console.log(err);
throw new BizError("服务器配置解析错误 请检查根目录下 serverConfig.xml 文件是否正确");
}
}
function analysisDBPathStr(host, port) {
let str = `http://${host}:${port}`;
console.log("请确认,数据中心地址:", str);
return str;
}
/**
* 系统配置类
*
*/
export class ServerConfig {
/**系统配置 */
port:number;
dbPath:string;
sign:string;
}
\ No newline at end of file
import { OPERATIONALDATATYPE, TABLENAME } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { systemConfig } from "../../config/serverConfig";
import { BizError } from "../../util/bizError";
import { post } from "../../util/request";
/**
* 操作数据库 新增 修改 删除
* @param url url地址 根据枚举获取值
* @param tableName 表名
* @param data 数据
* @param param 条件
*/
export async function operationalData(url:string, tableName:string, data, param) {
let header = {table:tableName, sign:systemConfig.sign};
let queray:any = {};
if (url == OPERATIONALDATATYPE.增加) {
queray.data = data;
} else if (url == OPERATIONALDATATYPE.修改) {
queray.data = data;
queray.param = param;
} else if (url == OPERATIONALDATATYPE.删除) {
queray.param = param;
} else {
throw new BizError(ERRORENUM.该方法仅可进行数据操作, '使用操作数据库的方法进行查询调用');
}
let result:any = await post(`${systemConfig.dbPath}${url}`, queray, header );
if (result.code != 200) throw new BizError(ERRORENUM.数据操作失败, result.code);
if (!result.data || !result.data.isSuccess) throw new BizError(ERRORENUM.数据操作失败, JSON.stringify(result.data));
return true;
}
/**
* 查询
* @param url url地址 根据枚举获取值
* @param tableName 表名
* @param param 条件
* @param pageNumber 分页传入的页数 非分页可不传
* @param pageSize 分页传入的单页大小 非分页可不传
*/
export async function selectData(url, tableName, param, column, pageNumber?, pageSize?) {
if (url != OPERATIONALDATATYPE.查询单个 && url != OPERATIONALDATATYPE.查询多个 && url != OPERATIONALDATATYPE.查询数据量 && url != OPERATIONALDATATYPE.分页查询) {
throw new BizError(ERRORENUM.该方法仅可进行查询操作, '该方法仅可进行查询操作');
}
let header = {table:tableName, sign:systemConfig.sign};
let queray:any = {param};
if (column && column.length) {
queray.column = column;
}
if (url == OPERATIONALDATATYPE.分页查询) {
if (!pageNumber) throw new BizError(ERRORENUM.分页请设置当前页数, `pageNumber:${pageNumber};pageSize:${pageSize}`);
queray.pageNumber = pageNumber;
queray.pageSize = pageSize || 10;
}
let result:any = await post(`${systemConfig.dbPath}${url}`, queray, header );
if (result.code != 200) throw new BizError(ERRORENUM.数据查询失败, result.code);
if (!result.data || result.data.data == null || result.data.data == undefined) throw new BizError(ERRORENUM.数据查询失败, JSON.stringify(result.data));
return result.data.data;
}
/**
* 多表联查
* @param url
* @param tableName
* @param param
* @param column
* @param includeConf
* @param pageNumber
* @param pageSize
* @returns
*/
export async function selectManyTableData(url, tableName, param, column, includeConf, pageNumber?, pageSize?) {
if (url != OPERATIONALDATATYPE.多表联查 && url != OPERATIONALDATATYPE.多表分页 && url != OPERATIONALDATATYPE.多表单个) {
throw new BizError(ERRORENUM.该方法仅可进行联合查询操作, '该方法仅可进行联合查询操作');
}
let header = {table:tableName, sign:systemConfig.sign};
let queray:any = {param, includeConf};
if (column && column.length) {
queray.column = column;
}
if (url == OPERATIONALDATATYPE.多表分页) {
if (!pageNumber) throw new BizError(ERRORENUM.分页请设置当前页数, `pageNumber:${pageNumber};pageSize:${pageSize}`);
queray.pageNumber = pageNumber;
queray.pageSize = pageSize || 10;
}
let result:any = await post(`${systemConfig.dbPath}${url}`, queray, header );
if (result.code != 200) throw new BizError(ERRORENUM.数据联合查询失败, result.code);
if (!result.data || !result.data.data) throw new BizError(ERRORENUM.数据联合查询失败, JSON.stringify(result.data));
return result.data.data;
}
\ No newline at end of file
import * as asyncHandler from 'express-async-handler'
import * as wmkqyszhxBiz from '../biz/qyszhx';
import * as wmkqyszhxBiz from '../biz/largeScreen/qyszhx';
import * as jxgljscBiz from '../biz/jxgljsc';
import * as jxgljscBiz from '../biz/largeScreen/jxgljsc';
import * as qyfwBiz from '../biz/qyfw';
import * as qyfwBiz from '../biz/largeScreen/qyfw';
import * as zhyyBiz from '../biz/zhyy';
import * as zhyyBiz from '../biz/largeScreen/zhyy';
export function setRouter(httpServer){
......
import { ERRORENUM } from "../config/enum/errorEnum";
import { BizError } from "../util/bizError";
/**
* 校验value是否符合传入的枚举
* @param name 被掉用名称 用于输出异常日志
* @param key 目标字段 用于输出异常日志
* @param enumConf 目标枚举
* @param value 目标值
* 无返回 有异常直接报错
*/
export function eccEnumValue(name:string, key:string, enumConf, value:any) {
let eccSuccess = true;
if ( typeof value == 'number' ) {
if (!enumConf[value] ) eccSuccess = false;
} else if (Array.isArray(value)) {
value.forEach(item => {
if ( !enumConf[item] ) eccSuccess = false;
});
}
if (!eccSuccess) throw new BizError(ERRORENUM.请完善信息, `${name} 下的 ${key} 字段值为 ${value} 不满足枚举范围`);
}
/**
* 将枚举值转换成对应的枚举名(key)
* @param enumConf 目标枚举
* @param value 目标值
* @returns string 返回字符串 如果传入多个枚举值,就拼接字符串
*/
export function changeEnumValue(enumConf, value:any) {
if (!value) return '';
if ( typeof value == 'number' ) {
let str = enumConf[value];
/**特化处理 */
if(/_dou/.test(str)) str = str.replace(/_dou/gm, ",");
if(/_zyh/.test(str)) str = str.replace(/_zyh/gm, "“");
if(/_yyh/.test(str)) str = str.replace(/_yyh/gm, "”");
if(/_dun/.test(str)) str = str.replace(/_dun/gm, "、");
if(/_ju/.test(str)) str = str.replace(/_ju/gm, "。");
return str
} else if (typeof value == 'string') {
try {//兼容数据库 '[1,2,3]'
value = JSON.parse(value);
}catch(err) {
return enumConf[parseInt(value)];
}
}
let str = "";
value.forEach((item, index) => {
let subStr = enumConf[item];
/**特化处理 */
if(/_dou/.test(subStr)) subStr = subStr.replace(/_dou/gm, ",");
if(/_zyh/.test(subStr)) subStr = subStr.replace(/_zyh/gm, "“");
if(/_yyh/.test(subStr)) subStr = subStr.replace(/_yyh/gm, "”");
if(/_dun/.test(subStr)) subStr = subStr.replace(/_dun/gm, "、");
if(/_ju/.test(subStr)) subStr = subStr.replace(/_ju/gm, "。");
str += subStr;
if (index == value.length-1) str+="";
else str += ","
});
return str;
}
\ No newline at end of file
/**
* 校验参数工具
*
*/
import { ERRORENUM } from "../config/enum/errorEnum";
import { BizError } from "../util/bizError";
/**
* 通过config校验表单参数param
* 包括类型 String, Number, Boolean, [Number], [Object]
* 参数是必填
* 方法会校验表单中存在的多余字段
* @param name 被调用的方法名
* @param config 校验配置
* @param param 需要校验的参数
* @returns true 无需关注返回
*/
export function eccFormParam(name:string, keyTypeConf:object, param:object) {
/**校验多余字段 */
for (let key in param) {
if (!keyTypeConf[key]) throw new BizError(ERRORENUM.参数错误, name, `多余${key}字段`);
}
/**校验已填参数 */
for (let key in keyTypeConf ) {
let {type, notMustHave} = keyTypeConf[key];
let isError = false; //校验是否异常
let errorStr = "";//异常说明
let value = param[key];
let valueType = typeof value;
if ( value == null || value == undefined ) {
if (!notMustHave) throw new BizError(ERRORENUM.参数错误, name, `缺失${key}字段`);
} else {
switch(type) {
case 'Number':
if ( type.toLowerCase() != valueType ) {
isError = true;
} else {
if ((""+param[key]).indexOf('.') > -1) {
param[key] = parseInt(`${param[key] *1000}`)/1000;
}
}
break;
case 'String':
case 'Boolean':
if ( type.toLowerCase() != valueType ) isError = true;
break;
case '[Number]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'number' ) {
isError = true;
errorStr = `${key}应是number型数组其中下标${i}${typeof item}`;
}
}
break;
case '[String]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是String型数组其中下标${i}${typeof item}`;
}
}
break;
case '[Object]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'object' ) {
isError = true;
errorStr = `${key}应是object型数组其中下标${i}${typeof item}`;
}
}
break;
case 'Address':
/**地址类型 基本数据类型为数组字符串但是要判断层级关系 */
if ( !Array.isArray(param[key]) ) {
isError = true;
errorStr = `${key}应是数组形`;
}
if ( param[key].length != 4) {
isError = true;
errorStr = `${key}超过特定长度4 目前长度 ${param[key].length}`;
}
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
/** 不符合规则的 */
let nullIndex = -1;
for (let i = 0; i < param[key].length; i++) {
if (nullIndex != -1) {//出现过空 第一次出现后的位置 都不能有值
if (param[key]) {
//做一个特化
throw new BizError(ERRORENUM.地址数据不完整, name, `${key} 下标 ${nullIndex} 为空 `);
}
}
if (nullIndex == -1 && !param[key][i]) {
/**按顺序第一次赋值 */
nullIndex = i;
}
}
break;
}
errorStr = isError && errorStr == "" ? `${key}应该是${type}型 而不是${valueType}`: errorStr;
if ( isError ) throw new BizError(ERRORENUM.请完善信息, name, errorStr);
}
}
return true;
}
/**
* 根据conf配置校验请求参数
* @param conf 配置
* @param param 表单
* @param skipKeys []不必填的字段
*/
export function eccReqParamater(conf:object, param, skipKeys?) {
skipKeys = skipKeys || [];
let skipMap = {};
skipKeys.forEach(keyName => {
skipMap[keyName] = 1;
});
/**校验多余字段 */
for (let key in param) {
if (!conf[key]) throw new BizError(ERRORENUM.参数错误, `多余${key}字段`);
}
/**校验必填和缺失字段 */
for (let key in conf) {
let confType = conf[key];
let value = param[key];
let valueType = typeof value;
if ( value == null || value == undefined ) {
if (!skipMap[key]) throw new BizError(ERRORENUM.参数错误, `缺失${key}字段`);
} else {
let isError = false;
let errorStr = "";
switch(confType) {
case 'Number':
if ( confType.toLowerCase() != valueType ) isError = true;
else {
if ((""+param[key]).indexOf('.') > -1) {
param[key] = parseInt(`${param[key] *100}`)/100;
}
}
break;
case 'String':
case 'Boolean':
if ( confType.toLowerCase() != valueType ) isError = true;
break;
case '[Number]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'number' ) {
isError = true;
errorStr = `${key}应是number型数组其中下标${i}${typeof item}`;
}
}
break;
case '[String]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是String型数组其中下标${i}${typeof item}`;
}
}
break;
case '[Object]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'object' ) {
isError = true;
errorStr = `${key}应是object型数组其中下标${i}${typeof item}`;
}
}
break;
case 'Address':
/**地址类型 基本数据类型为数组字符串但是要判断层级关系 */
if ( !Array.isArray(param[key]) ) {
isError = true;
errorStr = `${key}应是数组形`;
}
if ( param[key].length != 4) {
isError = true;
errorStr = `${key}超过特定长度4 目前长度 ${param[key].length}`;
}
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
/** 不符合规则的 */
let nullIndex = -1;
for (let i = 0; i < param[key].length; i++) {
if (nullIndex != -1) {//出现过空 第一次出现后的位置 都不能有值
if (param[key]) {
//做一个特化
throw new BizError(ERRORENUM.地址数据不完整, `${key} 下标 ${nullIndex} 为空 `);
}
}
if (nullIndex == -1 && !param[key][i]) {
/**按顺序第一次赋值 */
nullIndex = i;
}
}
break;
}
errorStr = isError && errorStr == "" ? `${key}应该是${confType}型 而不是${valueType}`: errorStr;
if (isError) throw new BizError(ERRORENUM.参数错误, errorStr);
}
}
return param;
}
\ No newline at end of file
import moment = require("moment");
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "../util/bizError";
import { FILETYPE } from "../config/enum";
const md5 = require("md5");
/**
* 生成系统id
* @param tableName
* @param userId
* @returns
*/
export function generateSystemId(tableName:string, userId:string) {
return md5(`${tableName}${Math.floor(Math.random() * 10000)}${userId}${new Date().valueOf()}${Math.floor(Math.random() * 100)}`);
}
/**
* 生成token
* @param userId
* @returns
*/
export function generateToken(userId:string) {
return md5(`${userId}${Math.floor(Math.random() * 10000)}${new Date().valueOf()}${Math.floor(Math.random() * 100)}`);
}
/**
* 生成userid
*/
export function generateUserId(phone?) {
let str = `${Math.random() * 100}${new Date().valueOf()}${Math.floor(Math.random() * 10000)}`;
if (phone) str += phone;
return md5(str);
}
/**
* 生成密码
* @param userId
* @returns
*/
export function generatePwd(userId:string, pwd:string) {
return md5(`${userId}${pwd}`);
}
/**
* 返回编辑正确的结果
* @returns
*/
export function successResult() {
return {success:true}
}
/**
* 抛出错误信息
* @returns
*/
export function successErrorResult(msg) {
return {code:500, success:false, msg};
}
export function getUserToken(loginId:string) {
return md5(`${loginId}_${Math.ceil(Math.random()*1000)}${new Date().valueOf()}`);
}
export function getMySqlMs(time?) {
time = time || new Date().valueOf();
// time += (8*3600*1000);
return moment(time).format("YYYY-MM-DD HH:mm:ss");
}
export function getClientMs(time) {
if (!time) return new Date().valueOf();
return new Date(time).valueOf();
}
export function getPartyMemberId(param) {
return md5(`${param}-${new Date().valueOf()}-${Math.ceil(Math.random() * 10000)}`);
}
export function getDefPwd(phone:string) {
return md5(`${phone.slice(5, 11)}`);
}
export function getFileType(fileName) {
let fileType = 0;
fileName.forEach(info => {
let repList = info.split(".");
let type = repList[repList.length-1];
if (!type) throw new BizError(ERRORENUM.文件不存在, `文件名 ${info}`);
let typeNum = 0;
switch(type) {
case 'pdf': typeNum = FILETYPE.pdf; break;
case 'doc':
case 'docx': typeNum = FILETYPE.word; break;
case 'jpg':
case 'png': typeNum = FILETYPE.图片; break;
};
if (typeNum) {
if (!fileType) fileType = typeNum;
else if (fileType != typeNum) fileType = FILETYPE.多类型;
}
});
return fileType;
}
/**
* 异常类
* 需要和log4js共同使用
*/
import { getBizMsg } from "../config/errorEnum";
import { logError } from "./log";
export class BizError extends Error {
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg = getBizMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
logErrorMsg += ` | ${msgs[i]} `;
}
}
}
\ No newline at end of file
logError(logErrorMsg);
super(reqErrorMsg);
}
}
\ No newline at end of file
/**
* 日志类
* 包括错误日志 普通日志
* 日志存放在根目录的logs内
*/
let log4js = require('log4js');
let path = require('path');
//log路径
export const systemLogPath = {
errorLogFile:"error",
errorLogDir:"error",
handleLogFile:"handle",
handleLogDir:"handle"
}
//日志根目录
// let baseLogPath = path.resolve(__dirname.substring(0, __dirname.indexOf("out")), 'logs');
let baseLogPath = path.resolve('./', 'logs');
let errFile = path.resolve(baseLogPath, systemLogPath.errorLogDir, systemLogPath.errorLogFile);
let handFile =path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile);
let config = {
appenders:
{
"rule-console": {"type": "console"},
"errorLogger": {
"type": "dateFile", // 日志类型
"filename": errFile, // 输出文件名
"pattern": "yyyy-MM-dd.log", // 后缀
"alwaysIncludePattern": true, // 上面两个参数是否合并
"encoding": "utf-8", // 编码格式
"maxLogSize": 1000, // 最大存储内容
"numBackups": 3, // 当文件内容超过文件存储空间时,备份文件的数量
"path": `/${systemLogPath.errorLogDir}`
},
"handleLogger": {
"type": "dateFile",
"filename": handFile,
"pattern": "yyyy-MM-dd.log",
"alwaysIncludePattern": true,
"encoding": "utf-8",
"maxLogSize": 1000,
"numBackups": 3,
"path": `/${systemLogPath.handleLogDir}`
}
},
categories: {
"default": {"appenders": ["rule-console"], "level": "all"}, //这个配置一定要有
"errorLogger": {"appenders": ["errorLogger"], "level": "error"},
"handleLogger": {"appenders": ["handleLogger"], "level": "all"}
},
"baseLogPath": path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile)
};
log4js.configure(config); //加载配置文件
//调用预先定义的日志名称
let errorLogger = log4js.getLogger("errorLogger");
let handleLogger = log4js.getLogger("handleLogger");
let consoleLogger = log4js.getLogger("rule-console");
//错误日志
export function logError(...errStrs) {
let str = "";
errStrs.forEach(item => {
str += item + " | ";
});
errorLogger.error(`errorInfo => ${str}`);
}
//普通日志
export function logHandle(msgStr:string) {
handleLogger.info(`logInfo => ${msgStr}`);
}
//输出日志
export function logConsole(logStr:string) {
consoleLogger.info(`logInfo => ${logStr}`);
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment