Beispiel #1
0
// 记录未知错误日志
// r:recover对象
// 返回值:无
func LogUnknownError(r interface{}, args ...string) {
	// 获取当前时间
	now := time.Now()

	// 组装所有需要写入的内容
	logInfo := fmt.Sprintf("%s---->", timeUtil.Format(now, "yyyy-MM-dd HH:mm:ss"))
	logInfo += stringUtil.GetNewLineString()
	logInfo += fmt.Sprintf("通过recover捕捉到的未处理异常:%v", r)
	logInfo += stringUtil.GetNewLineString()

	// 获取附加信息
	if len(args) > 0 {
		logInfo += fmt.Sprintf("附加信息:%s", strings.Join(args, "-"))
		logInfo += stringUtil.GetNewLineString()
	}

	// 获取堆栈信息
	for skip := con_MIN_SKIP; skip <= con_MAX_SKIP; skip++ {
		_, file, line, ok := runtime.Caller(skip)
		if !ok {
			break
		}
		logInfo += fmt.Sprintf("skip = %d, file = %s, line = %d", skip, file, line)
		logInfo += stringUtil.GetNewLineString()
	}

	// 加上最后的分隔符
	logInfo += con_SEPERATOR
	logInfo += stringUtil.GetNewLineString()

	// 构造对象并添加到队列中
	writeLog(newLogObject(logInfo, Error, true))
}
Beispiel #2
0
// 将通道里面的所有内容写入到文件中
func SaveToFile() {
	logUtil.Log(fmt.Sprintf("通道中尚未被处理的数据量为:%d", len(dataChannel)), logUtil.Debug, true)

	// 组装数据到dataSlice中,并保存到日志文件
	dataSlice := make([]string, 0, 1024)

	logUtil.Log("开始取通道中的数据", logUtil.Debug, true)
	if len(dataChannel) > 0 {
	Outer:
		for {
			select {
			case data := <-dataChannel:
				dataSlice = append(dataSlice, data)
				dataSlice = append(dataSlice, stringUtil.GetNewLineString())
			default:
				break Outer
			}
		}
	}
	logUtil.Log("取通道中的数据结束", logUtil.Debug, true)

	logUtil.Log("开始保存数据到文件", logUtil.Debug, true)
	if len(dataSlice) > 0 {
		fileUtil.WriteFile(config.SAVE_DATA_PATH, fmt.Sprintf("%s.sql", timeUtil.Format(time.Now(), "yyyy-MM-dd")), true, dataSlice...)
	}
	logUtil.Log("保存数据到文件结束", logUtil.Debug, true)
}
Beispiel #3
0
// 记录日志
// logInfo:需要记录的日志信息
// level:日志级别
// ifIncludeHour:日志文件名称是否包含小时
// 返回值:无
func Log(logInfo string, level logType, ifIncludeHour bool) {
	// 判断路径是否为空
	if logPath == "" {
		panic(errors.New("日志存放路径不能为空,请先设置"))
	}

	// 获取当前时间
	now := time.Now()

	// 组装所有需要写入的内容
	newLogInfo := fmt.Sprintf("%s---->", timeUtil.Format(now, "yyyy-MM-dd HH:mm:ss"))
	newLogInfo += stringUtil.GetNewLineString()
	newLogInfo += fmt.Sprintf("%s", logInfo)
	newLogInfo += stringUtil.GetNewLineString()

	// 加上最后的分隔符
	newLogInfo += con_SEPERATOR
	newLogInfo += stringUtil.GetNewLineString()

	// 构造对象并添加到队列中
	writeLog(newLogObject(newLogInfo, level, ifIncludeHour))
}
func saveMessageToFile(file *os.File, message *chatMessage.ChatMessage) (ifAchieveMaxSize bool, err error) {
	// 写入消息
	info := fmt.Sprintf("%s||%s||%s(%s)||||%s%s", message.Time, message.ChannelType, message.PlayerName, message.PlayerId, message.Message, stringUtil.GetNewLineString())
	_, err = file.WriteString(info)
	if err != nil {
		return
	}

	// 判断是否到达大小上限
	fi, err := file.Stat()
	if err != nil {
		logUtil.Log(fmt.Sprintf("获取文件信息错误,错误信息为:%s", err), logUtil.Error, true)
		return
	}

	if fi.Size() >= configBLL.MaxFileSize()*1024*1024 {
		ifAchieveMaxSize = true
	}

	return
}
Beispiel #5
0
// 执行sql语句
// sql:sql语句
// 返回值:无
func ExecuteSql(sql string) (errorList []error) {
	sqlSlice := strings.Split(sql, ";")

	for _, item := range sqlSlice {
		// 由于sql语句的长度不可能小于10,所以据此进行过滤
		if len(item) < 10 {
			continue
		}

		err := executeSql(item)
		if err != nil {
			fileUtil.WriteFile(config.FAIL_DATA_PATH, timeUtil.Format(time.Now(), "yyyy-MM-dd"), true, item, ";", stringUtil.GetNewLineString())
			errorList = append(errorList, err)
		}
	}

	// 如果整个过程当中出现过错误,则将整句sql记录下来
	if len(errorList) > 0 {
		logUtil.Log(fmt.Sprintf("出现Error的sql语句为:%s", sql), logUtil.Error, true)
	}

	return
}