サポート技術情報ログログ

demo_logパッケージ

のインポート(
「FMT」
「」ログイン
「OS」
「パス/ファイルパス」
「ランタイム」
「文字列」
「時間」


FUNCメイン(){
CONST(
インフォ= IOTA
ザが警告
エラー
致命的では

第一の方法は、印刷される//します情報がファイルに書き込まれ
//logrus.Println(「ログ情報の印刷」)
//logrus.Panicln(「印刷ログ情報パニック」)
//自動終了機能で//logrus.Fatal(「致命的な印刷ログ情報」)
/ / AA:= "C:\\ \\ 10241874ユーザーSRC \\ \\ \\ゴーawesomeProject SRC \\ \\ \\ log.txtというログ"
//fmt.Println(aa)
// F、_:OS = .OpenFile(AA、os.O_APPEND | os.O_CREATE、0777)
//ロガー:= log.New(F、 "[詳細]"、log.Ltime)
//Logger.Println("dayinkaishi「)
//f.Close()

//ファイルに書き込まれた情報を印刷する第二の方法は、(直接のsrc /ログフォルダlog.goファイル)の提案を参照してください
C:= AA」 :10241874 \\ \\ \\ \\ユーザーSRC \\ SRC \\ \\ awesomeProject LOG_ログイン\\ "+ Time.now()フォーマット。(" 2006年1月2日")+" .txtの「行っ
FMTを。 println(AA)
fmt.Println(警告、エラー、致命的な)
F、_:= os.OpenFile(AA、os.O_APPEND | os.O_CREATE、0777)
f.WriteString( "dayinkaishi")
f.close()

call0( "")
}

//log.SetOutput(file)//出力ストリームに設定
//log.SetPrefix("[Errorを]「)//プレフィックスログイン
//log.SetFlags(log.Llongfile | log.Ldate | log.Ltime )//出力スタイルログ
FUNCのcall0(funcnameに文字列){
=ランタイム:PC、ファイル名、行、[OK]を。発呼者(1)//出力層に対応する情報
であれば{OK
funcnameに= runtime.FuncForPC(PC).NAME()// FuncForPC()返回函数的指针类型
log.Println( "00"、funcnameに)
funcnameに= filepath.Ext(funcnameに)//删除。之前的部分
log.Println ( "11"、funcnameに)
funcnameに= strings.TrimPrefix(funcnameには、 " ")
log.Println(" 22" 、funcnameに)

ファイル名= filepath.Base(ファイル名)
}
logPrefix:= fmt.Sprintf(" %sの%D %のS」、ファイル名、行、funcnameに)
log.Println(logPrefix)
log.Println(PC)
}





log.go
パッケージログの

インポート(
「FMT」
「」ログイン
「OS」
「パス/ファイルパス」
「文字列」
//「同期」
「ランタイム」
「時間」


のconstを(
デバッグ=イオタの
情報は、
警告
、エラー
、致命的な


タイプログのstruct {
LOGLEVEL int型

logChannelチャンストリング
}

VAR(
logObj =ログ{ログレベル:情報、logChannel:行う(チャン列、1024)}
levelMap =作る(マップ[ストリング] INT)
levelStrMap =作る(マップ[INT]列)
LOGPATH列=」../ログ/"//ウィンドウのデバッグモードで


FUNC initLevelMap(){
levelMap [ "致命的"] =致命的な
levelMap [ "エラー"] =エラー
levelMap [ "警告"] =警告
levelMap [ "情報"] =情報を
levelMap [ "デバッグ"] =デバッグ

levelStrMap [致命的] = "致命的"
[levelStrMapをエラー] = "エラー"
levelStrMap [警告] = "警告"
levelStrMap [情報] = "情報"
levelStrMap [デバッグ] = "デバッグ"
strings.Contains(runtime.GOOS、 "Linuxの")場合{
// Linuxの发布模式
LOGPATH = '/ホーム/ parameterCheckww / parameterCheckService2 / SRC /ログ/ `
}
}

FUNCのinit(){
initLevelMap()
}

FUNC致命的(V ...インターフェイス{}){
logObj.Fatal(V ...)
}

FUNCエラー(V ...インターフェイス{}){
logObj.Error(V ...)
}

警告FUNC(V ...インターフェイス{}){
logObj.Warn(V ...)
}

詳細(V ...インターフェイス{}){FUNC
logObj.Info(V。 ..)
}

FUNCデバッグ(V ...インターフェイス{}){
logObj.Debug(V ...)
}

FUNCのSetLogLevel(レベルstring){
logObj.SetLogLevel(レベル)

}
GetLogLevel FUNC()INT {
logObj.GetLogLevelを返します()
}

FUNC RunLogFileThread(){

logObj.RunLogFileThread()
}

FUNC(自己*ログ)SetLogLevel(レベルstring){
_、OK:= levelMap [レベル]
であればOK {
self.logLevel = levelMap [レベル]
log.Println( 「ログレベルが変更されました:」+レベル)
}他{
log.Println( "ログレベルがエラーである")
}

}
FUNC(自己*ログ)GetLogLevel()int型{
self.logLevel返す
}

FUNC(自己*ログ)致命的な(V ...インターフェース{}を){
自己。 printWithCheckLevel(致命的、V ...)
}

FUNC(自己*ログ)エラー(V ...インターフェース{}){
self.printWithCheckLevel(エラー、V ...)
}

FUNC(自己*ログ)に警告(V .. .interface {}){
self.printWithCheckLevel(警告、V ...)
}

FUNC(自己*ログ)情報(V ...インターフェース{}){
self.printWithCheckLevel(情報、V ...)
}

FUNC(自己*ログ)デバッグ(V ...インターフェイス{}){
self.printWithCheckLevel(デバッグ、V ...)
}

FUNC(自己*ログ)printWithCheckLevel(LOGLEVEL int型、V ...インタフェース{}){
場合self.logLevel>ログレベル{
self.logChannel < - ""
リターン
}

ファイル名、行、関数funcname:= "???"、0 、 "???"
PC、ファイル名、行、OK:= runtime.Caller(3)
もしOK {
funcnameに= runtime.FuncForPC(PC).NAME()
funcnameに= filepath.Ext(funcnameに)
funcnameに= strings.TrimPrefix(funcnameに、 "")

ファイル名= filepath.Base(ファイル名)
}
logPrefix:= fmt.Sprintf( "%S%S%D%s"は、time.Now()形式( "2006年1月2日15:04:05.000")、ファイル名、ライン、funcnameに)

STR:= strings.TrimRight(strings.TrimPrefix(strings.TrimSpace(fmt.Sprintln(V))、 "
STR = logPrefix + "[" + levelStrMap [ログレベル] + "]" + strings.TrimSpace(STR)

log.Println(STR)

self.logChannel < - STR + "\ n"
}

FUNC(自己*ログ)WriteLogFile(ログ文字列){
//ログファイル、ERR:。 "TXT "= os.OpenFile("ログ/ログ../ _ "+ time.Now()フォーマット(" 2006年1月2日")+、os.O_RDWR | OS .O_CREATE | os.O_APPEND、0666)
ログファイル、ERR:| OS形式( "2006年1月2日")+ "TXT"、os.O_RDWR = os.OpenFile(+ "ログ_" + time.Now(LOGPATH) .O_CREATE | os.O_APPEND、0666)
ERRの場合= nilの{!
fmt.Println( "オープン・ログ・ファイルに失敗しました!!!")
のリターン
}
logFile.WriteString(ログ)
ログファイル。クローズ()
}

FUNC(自己*ログ)RunLogFileThread(){
{ため
strlog:= <-self.logChannel
self.WriteLogFile(strlog)

}

}

おすすめ

転載: www.cnblogs.com/chu-12345/p/11368812.html