SFLog

package
v0.0.0-...-21e6218 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 16, 2017 License: BSD-3-Clause Imports: 16 Imported by: 2

Documentation

Overview

日志操作,能够分别处理不同的日志级别信息配置
info debug error warn ftal panic level
out console file html mongodb email

使用说明:
	SFLogger struct{},首先先要了解什么是(SFLogger),是用于标识区分每个log信息的输出,
	可以自定义分组标识和log标识。

	日志标识(logTag):
		主要作用区分每个不同的SFLogger对象进行输出的信息,最好是唯一的
	日志组标识(logGroup):
		主要作用是用于日志配置的使用,在一个日志分组中使用同样的配置操作。

	如果可以直接使用全局的日志配置操作,全局日志的配置默认是输出控制台。
	全局SFLogger的标识:logTag = "globalTag",logGroup = globalGroup

		SFLog.Info("操作信息:记录信息操作。")

		console out:
		2013-10-31 12:12:55.871435 [info] ([globalGroup][globalTag][L16 github.com/slowfei/gosfcore/log.TestLogger])
		操作信息:记录信息操作。

	也可以自定义一个日志标识然后结合日志的配置进行信息的输出,如果没有定义日志组,默认使用全局日志组的配置。
		var log *SFLogger = NewLogger("logtag") or NewLoggerByGroup("logtag","logGroup")

		log.Info("操作信息:记录信息操作。")

		信息会根据日志组的设置进行相应的输出。

配置文件加载:
	使用LoadConfig(configPath string)指定配置文件路径进行加载,相对路径或绝对路径,相对路径以执行文件目录开始。
	也可以使用LoadConfigByJson(jsonData []byte)指定json文本信息加载
	配置加载是以覆盖形式进行操作,可以多次进行配置的加载,存储配置的结构(_sharedLogConfig)。

配置详解:
Pattern Format(信息输出时的格式化操作):
	${yyyy}			年
	${MM}			月
	${dd}			日
	${hh}			时
	${mm}			分
	${ss}			秒
	${SSS}			毫秒
	${LOG_GROUP}	分组标识
	${LOG_TAG}		日志标识
	${FILE_LINE}	调用函数的文件行
	${FILE_PATH}	调用函数的文件路径
	${FUNC_NAME}	函数名称(哪里调用就是那个函数)
	${STACK}		堆栈信息
	${TARGET}		输出的目标例如 info、debug、error...
	${MSG}			输出的信息,就是 SFLog.Info("这里是输出${MSG}的信息")

配置文件(千万要注意编写json的格式)
{
		//	初始化需要实现的的Appender对象,如果未初始化则不会进行输出,所以在开始前需要确定需要输出的对象。
		"InitAppenders":[
			"console","file","email","html","mongodb"
		],

		//	日志组的配置,包含多个日志组的配置信息
		"LogGroups" :{

			//	配置一个日志组
			"groupName" :{

					//	设置需要的Appender对象,如果未配置将不会进行输出
					"Appender":[
						"console","file"
					],

					//	下面针对Appender对象配置特定的格式信息,如果nil或没有设置则使用Appender的默认设置

					/* ------------console配置--------------- */

					//	控制台输出的格式,具体可以查看Pattern Format
					"ConsolePattern":"${yyyy}-${MM}-${dd} ${mm}:${dd}:${ss}${SSSSSS} [${TARGET}] ([${LOG_GROUP}][${LOG_TAG}][L${FILE_LINE} ${FUNC_NAME}])\n${MSG}",

					/* ------------file配置--------------- */

					//	文件名(可以输入时间格式)  默认"(ExceFileName)-${yyyy}-${MM}-${dd}.log"
					//	配置注意事项:
					//	Name(FileName)  "file-${yyyy}/${MM}/${dd}.log" 	  error		如果包含"/"会以目录作为处理的,所以需要注意。
					//					"../file-${yyyy}-${MM}-${dd}.log" proper	可以使用相对路径来命名"/"是作为目录的操作,
					//																截取后面的文件名(file-${yyyy}-${MM}-${dd}.log)
					"FileName":"info-${yy}${MM}${dd}.log",

					//	文件存储路径, 默认执行文件目录
					"FileSavePath":"",

					//	输出的格式,具体可以查看Pattern Format
					"FilePattern":"${yyyy}-${MM}-${dd} ${mm}:${dd}:${ss}${SSSSSS} [${TARGET}] ([${LOG_GROUP}][${LOG_TAG}][L${FILE_LINE} ${FUNC_NAME}])\n${MSG}",

					//	文件最大存储大小,默认5M
					"FileMaxSize":5242880,

					//	日志相同名称的最大数量,例如file(1).log...file(1000).log。默认1000,超出建立的数量将不会创建日志文件
					"FileSameNameMaxNum":1000,

					/* ------------html配置--------------- */

					//	注意事项与file配置的Name相同
					"HtmlName":"log-${yy}${MM}${dd}.html",

					//	文件存储路径, 默认执行文件目录
					"HtmlSavePath":"",

					//	html title
					"HtmlTitle":"Log Info",

					//	时间格式需要注意没有${}
					"HtmlTimeFormat":"yyyy-MM-dd hh:mm",

					//	文件最大存储大小,默认3M
					"HtmlMaxSize":3145728,

					//	与file配置相同
					"HtmlSameNameMaxNum":1000,

					/* ------------email配置--------------- */

					//	不可为空,否则不进行输出
					"EmailHost":"smtp.xxx.com",

					//	非空
					"EmailUser":"xxx@gmail.com",

					//	非空
					"EmailPassword":"123456",

					//	发送邮件显示的发送人名称
					"EmailFromName":"slowfei",

					//	发送地址
					"EmailTo":"xx@gmail.com;xx2@gmail.com",

					//	输出信息的格式,具体可以查看Pattern Format
					"EmailPattern":"${yyyy}-${MM}-${dd} ${mm}:${dd}:${ss}${SSSSSS} [${TARGET}] ([${LOG_GROUP}][${LOG_TAG}][L${FILE_LINE} ${FUNC_NAME}])\n${MSG}",

					//	邮件主题
					"EmailSubject":"Golang Log Info",

					//	默认Content-Type: text/plain; charset=UTF-8
					"EmailContentType":"Content-Type: text/plain; charset=UTF-8"

					//	控制当前日志组是否进行输出工作,如果为true则当前组不会进行信息的输出,默认可以不写为false
					"none":false,

					//	以上的分组配置均为默认配置

					//	针对输出的目标进行配置,如果不编写则使用上面部分设置的默认配置信息。
					//	需要注意的是,只要声明了目标的配置就不会取组的默认配置信息,目标配置大于默认配置。
					"info":{
						"Appender":[
							"console"
						],
						"ConsolePattern":"${yyyy}-${MM}-${dd} ${mm}:${dd} ${MSG}"
					},
					"debug":{
						"Appender":[
							"file"
						],
						"FileName":"info-${yy}-${MM}-${dd}.log",
						"FileSavePath":"",
						"FilePattern":"${yyyy}-${MM}-${dd} ${mm}:${dd}:${ss}${SSSSSS} [${TARGET}] ([${LOG_GROUP}][${LOG_TAG}][L${FILE_LINE} ${FUNC_NAME}])\n${MSG}",
						"FileMaxSize":5242880"
						"FileSameNameMaxNum":1000
					},
					"error":{
						"Appender":[
							"html"
						],
						"HtmlName":"log-${yy}${MM}${dd}.html",
						"HtmlSavePath":"",
						"HtmlTitle":"LogInfo",
						"HtmlTimeFormat":"yyyy-MM-dd hh:mm",
						"HtmlMaxSize":3145728,
						"HtmlSameNameMaxNum":1000,
					},
					"warn":{
						"Appender":[
							"email"
						],
						"EmailHost":"smtp.xxx.com",
						"EmailUser":"xxx@gmail.com",
						"EmailPassword":"123456",
						"EmailFromName":"slowfei",
						"EmailTo":"xx@gmail.com;xx2@gmail.com",
						"EmailPattern":"${yyyy}-${MM}-${dd} ${mm}:${dd}:${ss}${SSSSSS} [${TARGET}] ([${LOG_GROUP}][${LOG_TAG}][L${FILE_LINE} ${FUNC_NAME}])\n${MSG}",
						"EmailSubject":"Golang Log Info",
						"EmailContentType":"Content-Type: text/plain; charset=UTF-8"
					},
					"fatal":{
						//	配置与info都一致。
					},
					"panic":{
						//	配置与info都一致。
					}
			}
		}
	}

	appender interface

	日志的配置文件加载操作

console handle

email handle

file handle

html handle

Index

Constants

View Source
const (
	//	separator
	LOG_SEPARATOR = "_"
	//	global group log config
	KEY_GLOBAL_GROUP_LOG_CONFIG = "globalGroup"
	// defalut pattern
	DEFAULT_PATTERN = "${yyyy}-${MM}-${dd} ${hh}:${mm}:${ss}${SSSSSS} [${TARGET}] ([${LOG_GROUP}][${LOG_TAG}][L${FILE_LINE} ${FUNC_NAME}])\n${MSG}"

	//	log target
	LOG_INFO  = "info"
	LOG_DEBUG = "debug"
	LOG_ERROR = "error"
	LOG_WARN  = "warn"
	LOG_FATAL = "fatal"
	LOG_PANIC = "panic"

	//	appender tag
	LOG_APPENDER = "appender"

	//	appender type
	VAL_APPENDER_CONSOLE = "console"
	VAL_APPENDER_FILE    = "file"
	VAL_APPENDER_MONGODB = "mongodb"
	VAL_APPENDER_EMAIL   = "email"
	VAL_APPENDER_HTML    = "html"
	VAL_APPENDER_NONE    = "none"
)
View Source
const (
	DEFAULT_FILE_MAX_SIZE = 5 << 20 // default 5M file max size
	DEFAULT_FILE_MAX_NUM  = 1000    // default same name log file max num
)
View Source
const (
	//
	HTMLHandLayout = `` /* 2734-byte string literal not displayed */

	//
	HTMLEndLayout = `</tbody></table></body></html> `

	//
	HTMLContentLayout = `` /* 302-byte string literal not displayed */

	DEFAULT_HTML_MAX_SIZE = 3 << 20 // default 5M html max size
	DEFAULT_HTML_MAX_NUM  = 1000    // default same name log html max num
)
View Source
const (
	DEFAULT_CONTENT_TYPE = "Content-Type: text/plain; charset=UTF-8"
)

Variables

View Source
var (
	//	log target value
	TargetInfo  = LogTarget("info")
	TargetDebug = LogTarget("debug")
	TargetError = LogTarget("error")
	TargetWarn  = LogTarget("warn")
	TargetFatal = LogTarget("fatal")
	TargetPanic = LogTarget("panic")
)

Functions

func Debug

func Debug(format string, v ...interface{}) string

global debug log

func Error

func Error(format string, v ...interface{}) string

global error log

func Fatal

func Fatal(format string, v ...interface{}) string

global fatal log

func Info

func Info(format string, v ...interface{}) string

global info log

func LoadConfig

func LoadConfig(configPath string) error

reset load config @configPath 相对或绝对路径,相对路径以执行文件目录开始

func LoadConfigByJson

func LoadConfigByJson(jsonData []byte) error

reset load config @jsonData

func Panic

func Panic(format string, v ...interface{}) string

global panic log

func StartLogManager

func StartLogManager(logChannelSize int)

start log manager 调用此方法启动时加载默认配置进行设置, 如果需要加载配置文件可以调用LoadConfig进行相应的设置。

@logChannelSize log的缓存区大小,默认

func Warn

func Warn(format string, v ...interface{}) string

global warn log

Types

type Appender

type Appender interface {
	//	写入信息
	//	@msg		 写入的信息
	//	@configInfo  实现对象的配置信息例如 AppenderConsoleConfig struct{}
	Write(msg *LogMsg, configInfo interface{})

	// 实现接口的名称
	Name() string
}

输出目的的接口,例如需要实现console、file、html、mongodb、email

var (

	//	appender impl struct
	ImplAppenderConsole Appender = nil
	ImplAppenderFile    Appender = nil
	ImplAppenderHtml    Appender = nil
	ImplAppenderEmail   Appender = nil
	ImplAppenderMongodb Appender = nil
)

type AppenderConsole

type AppenderConsole struct {
}

Appender impl console write

func NewAppenderConsole

func NewAppenderConsole() *AppenderConsole

new console impl

func (*AppenderConsole) Name

func (ac *AppenderConsole) Name() string

name = console

func (*AppenderConsole) Write

func (ac *AppenderConsole) Write(msg *LogMsg, configInfo interface{})

#interface impl 控制台信息写入

type AppenderConsoleConfig

type AppenderConsoleConfig struct {
	Pattern string `json:"ConsolePattern"` // 信息内容输出格式
}

appender console config

type AppenderEmail

type AppenderEmail struct {
}

Appender impl email send

func NewAppenderEmail

func NewAppenderEmail() *AppenderEmail

new email impl

func (*AppenderEmail) Name

func (af *AppenderEmail) Name() string

#interface impl name = file

func (*AppenderEmail) Write

func (ae *AppenderEmail) Write(msg *LogMsg, configInfo interface{})

#interface impl

type AppenderEmailConfig

type AppenderEmailConfig struct {
	Host        string `json:"EmailHost"`        //	smtp host
	User        string `json:"EmailUser"`        // email send user address
	Password    string `json:"EmailPassword"`    //
	FromName    string `json:"EmailFromName"`    // send user show name 如果nil 直接使用EmailUser的值
	ToEmails    string `json:"EmailTo"`          //	send to email address "x1@gmail.com;x2@gmail.com"
	Pattern     string `json:"EmailPattern"`     //	信息内容输出格式
	Subject     string `json:"EmailSubject"`     // email subject
	ContentType string `json:"EmailContentType"` // 默认 "Content-Type: text/plain; charset=UTF-8"
}

appender email config

type AppenderFile

type AppenderFile struct {
	// contains filtered or unexported fields
}

Appender impl console write

func NewAppenderFile

func NewAppenderFile() *AppenderFile

new console impl

func (*AppenderFile) CloseAllLogFile

func (af *AppenderFile) CloseAllLogFile()

关闭所有日志文件

func (*AppenderFile) Name

func (af *AppenderFile) Name() string

name = file

func (*AppenderFile) Write

func (af *AppenderFile) Write(msg *LogMsg, configInfo interface{})

#interface impl 控制台信息写入

type AppenderFileConfig

type AppenderFileConfig struct {
	MaxSize    int64  `json:"FileMaxSize"`        // 文件大小 byte			默认5M
	SavePath   string `json:"FileSavePath"`       // 文件存储路径, 			默认执行文件目录
	Name       string `json:"FileName"`           // 文件名(可以输入时间格式)  默认"(ExceFileName)-${yyyy}-${MM}-${dd}.log"
	Pattern    string `json:"FilePattern"`        // 信息内容输出格式
	SameMaxNum int    `json:"FileSameNameMaxNum"` // 日志相同名称的最大数量,例如file(1).log...file(1000).log。默认1000,超出建立的数量将不会创建日志文件
}

appender file 配置注意事项: Name(FileName) "file-${yyyy}/${MM}/${dd}.log" error 如果包含"/"会以目录作为处理的,所以需要注意。

"../file-${yyyy}-${MM}-${dd}.log" proper	可以使用相对路径来命名"/"是作为目录的操作,截取后面的文件名(file-${yyyy}-${MM}-${dd}.log)

type AppenderHtml

type AppenderHtml struct {
	// contains filtered or unexported fields
}

Appender impl console write

func NewAppenderHtml

func NewAppenderHtml() *AppenderHtml

func (*AppenderHtml) CloseAllLogHtml

func (af *AppenderHtml) CloseAllLogHtml()

关闭所有日志文件

func (*AppenderHtml) Name

func (ah *AppenderHtml) Name() string

name = html

func (*AppenderHtml) Write

func (ah *AppenderHtml) Write(msg *LogMsg, configInfo interface{})

#interface impl

type AppenderHtmlConfig

type AppenderHtmlConfig struct {
	SavePath   string `json:"HtmlSavePath"`       // 文件存储路径, 			默认执行文件目录
	Name       string `json:"HtmlName"`           // 文件名(可以输入时间格式)  默认"(ExceFileName)-${yyyy}-${MM}-${dd}.html"
	Title      string `json:"HtmlTitle"`          // html title
	TimeFormat string `json:"HtmlTimeFormat"`     // time format			"yyyy-MM-dd hh:mm:ssSSSSSSSSS"
	MaxSize    int64  `json:"HtmlMaxSize"`        // 文件大小 byte			默认3M
	SameMaxNum int    `json:"HtmlSameNameMaxNum"` // 日志相同名称的最大数量,例如log(1).html...log(1000).html。默认1000,超出建立的数量将不会创建日志文件
}

appender html

type AppenderMongodbConfig

type AppenderMongodbConfig struct {
}

appender mongodb

type AppenderNoneConfig

type AppenderNoneConfig struct {
	None bool `json:none`
}

appender none

type LogConfig

type LogConfig struct {
	//	target config
	Info  *TargetConfigInfo `json:"info"`
	Debug *TargetConfigInfo `json:"debug"`
	Error *TargetConfigInfo `json:"error"`
	Warn  *TargetConfigInfo `json:"warn"`
	Fatal *TargetConfigInfo `json:"fatal"`
	Panic *TargetConfigInfo `json:"panic"`

	//	global config
	*TargetConfigInfo
}

log config

type LogManager

type LogManager struct {
	// contains filtered or unexported fields
}

log manager

type LogMsg

type LogMsg struct {
	// contains filtered or unexported fields
}

chan log msg

type LogTarget

type LogTarget string

log target, info,debug,error,warn,fatal,panics

type MainLogConfig

type MainLogConfig struct {
	InitAppenders []string             // init appenders impl. console, file...
	TimeFormat    string               // time format
	LogGroups     map[string]LogConfig // log tags日志标识集合元素
}

main log config

type SFLogger

type SFLogger struct {
	// contains filtered or unexported fields
}

logger 产生日志的输出,主要负责标识每个不同的日志对象, 使用分组标识和日志标识进行标识处理。 然后可调用(Info、Debug、Error)函数进行信息输出

func NewLogger

func NewLogger(logTag string) *SFLogger

New SFLogger default log global group, KEY_GLOBAL_GROUP_LOG_CONFIG

@logTag 输出日志对象的标识,最好是唯一的 @return

func NewLoggerByGroup

func NewLoggerByGroup(logTag, logGroup string) *SFLogger

@logGroup log group

func (*SFLogger) Debug

func (l *SFLogger) Debug(format string, v ...interface{}) string

logger debug log

func (*SFLogger) Error

func (l *SFLogger) Error(format string, v ...interface{}) string

logger error log

func (*SFLogger) Fatal

func (l *SFLogger) Fatal(format string, v ...interface{}) string

logger fatal log

func (*SFLogger) Info

func (l *SFLogger) Info(format string, v ...interface{}) string

logger info log

func (*SFLogger) Panic

func (l *SFLogger) Panic(format string, v ...interface{}) string

logger panic log

func (*SFLogger) Warn

func (l *SFLogger) Warn(format string, v ...interface{}) string

logger warn log

type TargetConfigInfo

target config info,contain info,debug,error,warn,fatal,panics

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL