// 将通道里面的所有内容写入到文件中 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) }
func saveMessage(channel channelType.ChannelType, playerId, playerName, message string) { if configBLL.IfRecordMessage() == false { return } messageChan <- chatMessage.NewChatMessage(timeUtil.Format(time.Now(), "yyyy-MM-dd HH:mm:ss"), channel, playerId, playerName, message) }
// 记录未知错误日志 // 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)) }
// 记录日志 // 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)) }
// 执行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 }