本文整理匯總了Golang中github.com/Jordanzuo/goutil/logUtil.Log函數的典型用法代碼示例。如果您正苦於以下問題:Golang Log函數的具體用法?Golang Log怎麽用?Golang Log使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Log函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: StartServer
// 啟動服務器
// wg:WaitGroup
// serverAddress:服務器監聽地址
// getPlayerFunc:獲取玩家對象的方法
func StartServer(wg *sync.WaitGroup, serverAddress string, getPlayerFunc func(*Client, string) (*player.Player, ResultStatus)) {
defer func() {
wg.Done()
}()
// 設置配置參數
SetRPCParam(serverAddress, getPlayerFunc)
logUtil.Log("Socket服務器開始監聽...", logUtil.Info, true)
// 監聽指定的端口
listener, err := net.Listen("tcp", ServerAddress())
if err != nil {
panic(fmt.Errorf("Listen Error: %s", err))
} else {
msg := fmt.Sprintf("Got listener for client. (local address: %s)", listener.Addr())
// 記錄和顯示日誌,並且判斷是否需要退出
logUtil.Log(msg, logUtil.Info, true)
fmt.Println(msg)
}
for {
// 阻塞直至新連接到來
conn, err := listener.Accept()
if err != nil {
logUtil.Log(fmt.Sprintf("Accept Error: %s", err), logUtil.Error, true)
continue
}
// 啟動一個新協程來處理鏈接(每個客戶端對應一個協程)
go handleConn(conn)
}
}
示例2: StartServer
// 啟動服務器
// wg:WaitGroup
func StartServer(wg *sync.WaitGroup) {
defer func() {
wg.Done()
}()
logUtil.Log("Socket服務器開始監聽...", logUtil.Info, true)
// 監聽指定的端口
msg := ""
listener, err := net.Listen("tcp", ServerAddress())
if err != nil {
msg = fmt.Sprintf("Listen Error: %s", err)
} else {
msg = fmt.Sprintf("Got listener for the server. (local address: %s)", listener.Addr())
}
// 記錄和顯示日誌,並且判斷是否需要退出
logUtil.Log(msg, logUtil.Info, true)
fmt.Println(msg)
if err != nil {
return
}
for {
// 阻塞直至新連接到來
conn, err := listener.Accept()
if err != nil {
logUtil.Log(fmt.Sprintf("Accept Error: %s", err), logUtil.Error, true)
continue
}
// 啟動一個新協程來處理鏈接
go handleConn(conn)
}
}
示例3: SaveToFile
// 將通道裏麵的所有內容寫入到文件中
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)
}
示例4: startClient
// 啟動客戶端
func startClient(ch chan int, loginSucceedCh chan int, currId int) {
// 處理內部未處理的異常,以免導致主線程退出,從而導致係統崩潰
defer func() {
if r := recover(); r != nil {
logUtil.Log(fmt.Sprintf("通過recover捕捉到的未處理異常:%v", r), logUtil.Error, true)
}
}()
conn, err := net.DialTimeout("tcp", ServerAddress, 5*time.Second)
if err != nil {
fmt.Printf("第%d個客戶端啟動失敗,請檢查\n", currId)
ch <- currId
return
}
defer func() {
conn.Close()
ch <- currId
}()
// 創建客戶端對象,並添加到列表中
clientObj := client.NewClient(&conn, conn)
ClientList[clientObj.Id] = false
// 登陸
go login(clientObj, currId)
// 發送心跳包
go heartBeat(clientObj, loginSucceedCh)
// 死循環,不斷地讀取數據,解析數據,發送數據
for {
// 先讀取數據,每次讀取1024個字節
readBytes := make([]byte, 1024)
n, err := conn.Read(readBytes)
if err != nil {
var errMsg string
// 判斷是連接關閉錯誤,還是普通錯誤
if err == io.EOF {
errMsg = fmt.Sprintf("另一端關閉了連接:%s", err)
} else {
errMsg = fmt.Sprintf("讀取數據錯誤:%s", err)
}
logUtil.Log(errMsg, logUtil.Error, true)
break
}
// 將讀取到的數據追加到已獲得的數據的末尾
clientObj.AppendContent(readBytes[:n])
// 已經包含有效的數據,處理該數據
handleClient(clientObj, loginSucceedCh)
}
}
示例5: startClient
// 啟動客戶端
func startClient(ch chan int, clientCh chan *client.Client, loginSucceedCh chan int) {
// 處理內部未處理的異常,以免導致主線程退出,從而導致係統崩潰
defer func() {
if r := recover(); r != nil {
logUtil.Log(fmt.Sprintf("通過recover捕捉到的未處理異常:%v", r), logUtil.Error, true)
}
}()
conn, err := net.DialTimeout(SERVER_NETWORK, ServerAddress, 2*time.Second)
if err != nil {
fmt.Printf("Dial Error: %s\n", err)
ch <- 0
return
}
defer func() {
conn.Close()
ch <- 1
}()
// 創建客戶端對象
clientObj := client.NewClient(&conn, conn)
// 打印日誌
fmt.Printf("Connected to server. (remote address: %s, local address: %s)\n", conn.RemoteAddr(), conn.LocalAddr())
// 寫入1表示啟動成功,則main線程可以繼續往下進行
ch <- 1
clientCh <- clientObj
// 死循環,不斷地讀取數據,解析數據,發送數據
for {
// 先讀取數據,每次讀取1024個字節
readBytes := make([]byte, 1024)
n, err := conn.Read(readBytes)
if err != nil {
var errMsg string
// 判斷是連接關閉錯誤,還是普通錯誤
if err == io.EOF {
errMsg = fmt.Sprintf("另一端關閉了連接:%s", err)
} else {
errMsg = fmt.Sprintf("讀取數據錯誤:%s", err)
}
logUtil.Log(errMsg, logUtil.Error, true)
break
}
// 將讀取到的數據追加到已獲得的數據的末尾
clientObj.AppendContent(readBytes[:n])
// 已經包含有效的數據,處理該數據
handleClient(clientObj, loginSucceedCh)
}
}
示例6: SaveHistoryMessage
// 保存曆史消息
func SaveHistoryMessage() {
logUtil.Log("開始保存曆史消息...", logUtil.Info, true)
// 保存世界曆史消息
saveWorldHistoryMessage()
// 保存公會曆史消息
saveUnionHistoryMessage()
logUtil.Log("保存曆史消息完成...", logUtil.Info, true)
}
示例7: writeRequestLog
func writeRequestLog(apiName string, r *http.Request) error {
log, err := json.Marshal(r.Form)
if err != nil {
logUtil.Log(fmt.Sprintf("序列化數據錯誤,原始數據位:%v,錯誤信息為:%s", r.Form, err), logUtil.Error, true)
return err
}
logInfo := fmt.Sprintf("Web服務器收到請求。ApiName:%s, Param:%s", apiName, string(log))
logUtil.Log(logInfo, logUtil.Debug, true)
return nil
}
示例8: saveWorldHistoryMessage
// 保存世界曆史消息
func saveWorldHistoryMessage() {
logUtil.Log("開始保存世界曆史消息...", logUtil.Info, true)
worldHistoryMessageMutex.RLock()
defer worldHistoryMessageMutex.RUnlock()
if bytes, err := json.Marshal(worldHistoryMessageList); err == nil {
fileUtil.WriteFile(con_HistoryPath, getWorldHistoryMessageFileName(), false, string(bytes))
}
logUtil.Log("保存世界曆史消息完成...", logUtil.Info, true)
}
示例9: StopServer
// 停止服務器
func StopServer() {
logUtil.Log("1、開始停止服務器", logUtil.Debug, true)
// 斷開客戶端連接
logUtil.Log("2、開始斷掉所有客戶端連接", logUtil.Debug, true)
for _, value := range ClientList() {
value.conn.Close()
}
logUtil.Log("3、斷掉所有客戶端連接結束", logUtil.Debug, true)
// 保存數據
logUtil.Log("4、開始保存未處理的數據", logUtil.Debug, true)
data.SaveToFile()
logUtil.Log("5、保存未處理的數據結束", logUtil.Debug, true)
}
示例10: saveUnionHistoryMessage
// 保存公會曆史消息
func saveUnionHistoryMessage() {
logUtil.Log("開始保存公會曆史消息...", logUtil.Info, true)
unionHistoryMessageMutex.RLock()
defer unionHistoryMessageMutex.RUnlock()
// 遍曆所有的曆史消息,每個公會保存為一個文件
for unionId, messageList := range unionHistoryMessageList {
if bytes, err := json.Marshal(messageList); err == nil {
fileUtil.WriteFile(con_HistoryPath, getUnionHistoryMessageFileName(unionId), false, string(bytes))
}
}
logUtil.Log("保存公會曆史消息完成...", logUtil.Info, true)
}
示例11: handleClientContent
func handleClientContent(clientObj *Client) {
validMessageList := make([]string, 0)
for {
content, ok := clientObj.GetValieMessage()
if !ok {
break
}
// 處理數據,如果長度為0則表示心跳包
if len(content) == 0 {
continue
} else {
atomic.AddInt64(&totalSize, int64(len(content)))
// 先進行解壓縮
content, err := zlibUtil.Decompress(content)
if err != nil {
logUtil.Log(fmt.Sprintf("zlib解壓縮錯誤,錯誤信息為:%s", err), logUtil.Error, true)
break
}
validMessageList = append(validMessageList, string(content))
}
}
// 添加數據
if len(validMessageList) > 0 {
data.AddData(validMessageList)
}
}
示例12: GetPlayer
func GetPlayer(id string) (playerObj *player.Player, exists bool, err error) {
command := "SELECT Name, UnionId, ExtraMsg, RegisterTime, LoginTime, IsForbidden, SilentEndTime FROM player WHERE Id = ?;"
var name string
var unionId string
var extraMsg string
var registerTime time.Time
var loginTime time.Time
var isForbidden bool
var silentEndTime time.Time
if err = dal.ChatDB().QueryRow(command, id).Scan(&name, &unionId, &extraMsg, ®isterTime, &loginTime, &isForbidden, &silentEndTime); err != nil {
if err == sql.ErrNoRows {
// 重置err,使其為nil;因為這代表的是沒有查找到數據,而不是真正的錯誤
err = nil
return
} else {
logUtil.Log(fmt.Sprintf("Scan失敗,錯誤信息:%s,command:%s", err, command), logUtil.Error, true)
return
}
}
playerObj = player.NewPlayer(id, name, unionId, extraMsg, registerTime, loginTime, isForbidden, silentEndTime)
exists = true
return
}
示例13: GetGamePlayer
func GetGamePlayer(id string) (name string, unionId string, exists bool, err error) {
command := "SELECT p.Name, g.GuildId FROM p_player p LEFT JOIN p_guild_info g ON p.Id = g.PlayerId WHERE p.Id = ?;"
var guildId interface{}
if err = dal.GameDB().QueryRow(command, id).Scan(&name, &guildId); err != nil {
if err == sql.ErrNoRows {
// 重置err,使其為nil;因為這代表的是沒有查找到數據,而不是真正的錯誤
err = nil
return
} else {
logUtil.Log(fmt.Sprintf("Scan失敗,錯誤信息:%s,command:%s", err, command), logUtil.Error, true)
return
}
}
exists = true
// 處理公會Id
if guildId != nil {
if unionIdArr, ok := guildId.([]byte); ok {
unionId = string(unionIdArr)
}
}
return
}
示例14: clearExpiredClient
func clearExpiredClient() {
// 處理內部未處理的異常,以免導致主線程退出,從而導致係統崩潰
defer func() {
if r := recover(); r != nil {
logUtil.LogUnknownError(r)
}
}()
for {
// 休眠指定的時間(單位:秒)(放在此處是因為程序剛啟動時並沒有過期的客戶端,所以先不用占用資源;)
time.Sleep(CheckExpiredInterval() * time.Second)
// 清理之前的客戶端數量和玩家數量
beforeClientCount := len(clientList)
beforePlayerCount := len(playerList)
// 獲取本次清理的客戶端數量
expiredClientCount := 0
// 開始清理
for _, item := range clientList {
if item.HasExpired() {
expiredClientCount++
item.Quit()
}
}
// 記錄日誌
if expiredClientCount > 0 {
logUtil.Log(fmt.Sprintf("清理前的客戶端數量為:%d, 清理前的玩家數量為:%d, 本次清理不活躍的數量為:%d", beforeClientCount, beforePlayerCount, expiredClientCount), logUtil.Debug, true)
}
}
}
示例15: init
func init() {
// 設置日誌文件的存儲目錄
logUtil.SetLogPath(filepath.Join(fileUtil.GetCurrentPath(), LOG_PATH_SUFFIX))
// 記錄啟動成功日誌
logUtil.Log("客戶端啟動成功", logUtil.Info, true)
}