96SEO 2026-02-23 15:00 7
。

本包也提供了一个预定义的“标准”logger#xff0c;可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列#xff08;Fatal|Fatalf|Fatalln)、和Panic系列#xff08;Panic|Panicf|Panicln)来…一、Log
Go语言内置的log包实现了简单的日志服务。
本包也提供了一个预定义的“标准”logger可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列Fatal|Fatalf|Fatalln)、和Panic系列Panic|Panicf|Panicln)来使用比自行创建一个logger对象更容易使用。
基础的logger只提供日志的时间信息如果需要获取更多的信息或者输出方式可以通过进一步配置实现。
log.Ldate日期2009/01/23log.Ltime时间01:23:23log.Lmicroseconds微秒级时间01:23:23.123123log.Llongfile文件名和行号/a/b/c/d.go:23log.Lshortfile文件名和行号d.go:23log.LUTC使用
log.Ldate)log.Println(卡卡西的日志)flags
用于设置日志输出的前缀它接受一个字符串作为参数这个字符串将会作为日志信息的前缀显示在每条日志的最前面。
log.Prefix
{log.SetPrefix(复制忍者)log.Println(卡卡西)prefix
log.Prefix()fmt.Println(prefix)
os.O_CREATE|os.O_WRONLY|os.O_APPEND,
file.Close()log.SetOutput(file)log.SetFlags(log.Llongfile
log.Ldate)log.Println(卡卡西)log.SetPrefix(复制忍者)
接口的目标输出流、一个用于添加前缀的字符串、以及一个用于指定日志属性的标志选项。
注意Zap并不是Go的标准库而是为了解决Go内置log库功能有限的问题所引入的第三方日志库。
在此处介绍Zap是为了方便与log库进行对比学习。
风格的方法记录日志。
它使用了结构化的上下文字段可以方便地记录关键-值对形式的日志信息。
Sugared
提供了更底层的、零分配zero-allocation的日志记录功能适用于高性能、高吞吐量的日志记录需求。
它的
相对更加简洁不支持结构化的上下文字段但在性能方面有优势。
Logger
调用zap.NewProduction()或者zap.NewDevelopment()或者zap.Example()创建了一个
日志记录器通过Logger调用Info/Error等程序结束前调用
以适应生产环境的需求例如默认会将日志输出到标准错误输出并且会禁用堆栈跟踪等详细的调试信息以减少对性能的影响。
适合用于生产环境中记录稳定运行日志的场景。
以便于开发过程中更好地跟踪和调试日志例如会输出更详细的调试信息和堆栈跟踪。
适合用于开发和调试过程中辅助定位问题、跟踪日志的场景。
zap.Example()是一个示例方法提供了一个简单的例子演示了如何创建
实例、记录不同级别的日志、以及如何添加结构化的上下文字段等操作。
如果请求中出现错误记录错误日志logger.Error(Error
,zap.String(url,url),zap.Error(err))}
如果请求成功记录成功日志logger.Info(Success:
logger.Sync()以确保在程序退出前执行同步操作defer
logger.Sync()httpGet(https://blog.csdn.net/Ricardo2/article/details/134253323)httpGet(www.google.com)
{level:info,ts:1716001211.442937,caller:练习/main.go:26,msg:Success:
Forbidden,url:https://blog.csdn.net/Ricardo2/article/details/134253323}
{level:error,ts:1716001211.443463,caller:练习/main.go:20,msg:Error
\\,stacktrace:main.httpGet\n\td:/go/练习/main.go:20\nmain.main\n\td:/go/练习/main.go:41\nruntime.main\n\tE:/goland/src/runtime/proc.go:250}2.2
惟一的区别是我们通过logger.Sugar()方法来获取一个SugaredLogger。
string){sugarLogger.Debugf(Trying
如果请求中出现错误记录错误日志sugarLogger.Error(Error
,zap.String(url,url),zap.Error(err))}
如果请求成功记录成功日志sugarLogger.Info(Success:
logger.Sync()以确保在程序退出前执行同步操作defer
sugarLogger.Sync()httpGet(https://blog.csdn.net/Ricardo2/article/details/134253323)httpGet(www.google.com)
{level:info,ts:1716001865.691326,caller:练习/main.go:28,msg:Success:
https://blog.csdn.net/Ricardo2/article/details/134253323
{level:error,ts:1716001865.6924412,caller:练习/main.go:22,msg:Error
\\},stacktrace:main.httpGet\n\td:/go/练习/main.go:22\nmain.main\n\td:/go/练习/main.go:43\nruntime.main\n\tE:/goland/src/runtime/proc.go:250}2.3
日志库支持以下几种日志级别可以根据不同的需求来选择合适的级别记录日志
用于记录可能出现问题但不会影响程序正常运行的警告信息例如参数使用不当、潜在的问题等。
接口类型的实例定义了日志记录的核心功能包括日志级别的判断LogLevel、格式化日志消息Encoder、输出日志的目的地WriteSyncer等。
1Encoder编码器(如何写入日志)。
我们将使用开箱即用的NewJSONEncoder()并使用预先设置的ProductionEncoderConfig()
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())2WriterSyncer
指定日志将写到哪里去。
我们使用zapcore.AddSync()函数并且将打开的文件句柄传进去。
通过使用
下面将修改上述部分中的Logger代码主要是重写InitLogger()方法。
(net/httposgo.uber.org/zapgo.uber.org/zap/zapcore
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
如果请求中出现错误记录错误日志sugarLogger.Error(Error
如果请求成功记录成功日志sugarLogger.Info(Success:
logger.Sync()以确保在程序退出前执行同步操作defer
sugarLogger.Sync()httpGet(https://blog.csdn.net/Ricardo2/article/details/134253323)httpGet(www.google.com)
{level:debug,ts:1716607412.904807,msg:Trying
https://blog.csdn.net/Ricardo2/article/details/134253323}
{level:info,ts:1716607415.0869148,msg:Success:
https://blog.csdn.net/Ricardo2/article/details/134253323
{level:debug,ts:1716607415.0869148,msg:Trying
{level:error,ts:1716607415.0869148,msg:Error
格式的字符串。
这种格式在日志收集系统、日志分析工具等场景中通常更易于处理和解析。
创建的编码器将日志事件格式化为人类可读的文本格式通常采用一种类似于控制台输出的格式。
这种格式适合在终端中查看日志。
zapcore.NewConsoleEncoder(zap.NewProductionEncoderConfig())
https://blog.csdn.net/Ricardo2/article/details/134253323
https://blog.csdn.net/Ricardo2/article/details/134253323
首先要覆盖Encoder终默认的ProductionConfig()进行手动配置
zap.NewProductionEncoderConfig()encoderConfig.EncodeTime
zapcore.ISO8601TimeEncoderencoderConfig.EncodeLevel
zapcore.CapitalLevelEncoderreturn
zapcore.NewConsoleEncoder(encoderConfig)
https://blog.csdn.net/Ricardo2/article/details/134253323
https://blog.csdn.net/Ricardo2/article/details/134253323
利用io.MultiWriter支持文件和终端两个输出目标ws
将ERROR级别的日志单独输出到一个名为xx.err.log的日志文件中。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback