我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Go语言中配置文件使用与日志配置的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Go语言中配置文件使用与日志配置的方法

本文小编为大家详细介绍“Go语言中配置文件使用与日志配置的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中配置文件使用与日志配置的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

项目结构调整

说先对项目目录结构调整一下,按照我自己的开发习惯,增加了几个目录。

项目结构如下图:

Go语言中配置文件使用与日志配置的方法

解释一下目录结构

  • app/constants:主要放置一些常量

  • app/controllers:控制层,熟悉java的不多说。

  • app/errors:异常定义目录

  • app/pojo:结构体定义文件,主要是接口请求的结构体和接口返回的结构体,或者自定义的结构体。

  • app/router:路由文件

  • app/services:服务实现逻辑目录

  • app/utils:工具文件目录

  • config/log:日志配置文件目录,后面会讲到怎么使用。

  • config/toml:配置文件使用,后面会讲到怎么使用。

  • main.go作为程序的主入口。

配置文件使用

在我们项目结构中,经常会使用到配置文件。配置文件里面会记录像mysql用户名、端口、redis配置信息等等内容。下面先配置一下toml_config.go,来对config.toml配置文件读取。

Go语言中配置文件使用与日志配置的方法

下面是toml_config.go的内容

package toml import (    "fmt"    "github.com/spf13/viper") type TomlConfig struct {    AppName string    Log     LogConfig} // 日志保存地址type LogConfig struct {    Path  string    Level string} var c TomlConfig func init() {    // 设置文件名    viper.SetConfigName("config")    // 设置文件类型    viper.SetConfigType("toml")    // 设置文件路径,可以多个viper会根据设置顺序依次查找    viper.AddConfigPath(".")    viper.AutomaticEnv()    err := viper.ReadInConfig()    if err != nil {        panic(fmt.Errorf("fatal error config file: %s", err))    }     viper.Unmarshal(&c)}func GetConfig() TomlConfig {    return c}

需要安装几个库,命令如下:

go get github.com/natefinch/lumberjackgo get go.uber.org/zap/zapcore

注意,在go文件中,init方法在加载该文件所在包的时候会默认执行。

我们看一下配置的内容,主要是日志级别和存放地址。

验证的话,等下面日志配置好了一起看一下。

Go语言中配置文件使用与日志配置的方法

日志配置

下面继续配置一下日志,也可以看到配置文件里面配置的日志级别和存放地址都是日志的配置项。

主要在config/log下的logger.go文件,配置了日志相关内容。

Go语言中配置文件使用与日志配置的方法

logger.go的内容如下

package log import (    "os"     "github.com/natefinch/lumberjack"    "go.uber.org/zap"    "go.uber.org/zap/zapcore") type Field = zap.Field var (    Logger  *zap.Logger    String  = zap.String    Any     = zap.Any    Int     = zap.Int    Float32 = zap.Float32) // logpath 日志文件路径// loglevel 日志级别func InitLogger(logpath string, loglevel string) {    // 日志分割    hook := lumberjack.Logger{        Filename:   logpath, // 日志文件路径,默认 os.TempDir()        MaxSize:    100,     // 每个日志文件保存100M,默认 100M        MaxBackups: 30,      // 保留30个备份,默认不限        MaxAge:     7,       // 保留7天,默认不限         Compress: true, // 是否压缩,默认不压缩    }    write := zapcore.AddSync(&hook)    // 设置日志级别    // debug 可以打印出 info debug warn    // info  级别可以打印 warn info    // warn  只能打印 warn    // debug->info->warn->error    var level zapcore.Level    switch loglevel {    case "debug":        level = zap.DebugLevel    case "info":        level = zap.InfoLevel    case "error":        level = zap.ErrorLevel    case "warn":        level = zap.WarnLevel    default:        level = zap.InfoLevel    }    encoderConfig := zapcore.EncoderConfig{        TimeKey:        "time",        LevelKey:       "level",        NameKey:        "logger",        CallerKey:      "linenum",        MessageKey:     "msg",        StacktraceKey:  "stacktrace",        LineEnding:     zapcore.DefaultLineEnding,        EncodeLevel:    zapcore.LowercaseLevelEncoder,  // 小写编码器        EncodeTime:     zapcore.ISO8601TimeEncoder,     // ISO8601 UTC 时间格式        EncodeDuration: zapcore.SecondsDurationEncoder, //        EncodeCaller:   zapcore.FullCallerEncoder,      // 全路径编码器        EncodeName:     zapcore.FullNameEncoder,    }    // 设置日志级别    atomicLevel := zap.NewAtomicLevel()    atomicLevel.SetLevel(level)     var writes = []zapcore.WriteSyncer{write}    // 如果是开发环境,同时在控制台上也输出    if level == zap.DebugLevel {        writes = append(writes, zapcore.AddSync(os.Stdout))    }    core := zapcore.NewCore(        zapcore.NewConsoleEncoder(encoderConfig),        // zapcore.NewJSONEncoder(encoderConfig),        zapcore.NewMultiWriteSyncer(writes...), // 打印到控制台和文件        // write,        level,    )    // 开启开发模式,堆栈跟踪    caller := zap.AddCaller()    // 开启文件及行号    development := zap.Development()    // 设置初始化字段,如:添加一个服务器名称    filed := zap.Fields(zap.String("application", "test-gin"))    // 构造日志    Logger = zap.New(core, caller, development, filed)    Logger.Info("Logger init success")}

需要安装依赖包,命令如下

go get github.com/spf13/viper

在main.go文件增加logger的初始化加载,看看配置文件和日志是否都生效了。

main.go增加下面的代码

Go语言中配置文件使用与日志配置的方法

看一下执行的日志

2022-05-31T21:27:54.964+0800    info   D:/goProject/learn-gin/config/log/logger.go:90 Logger init success    {"application": "test-gin"}
2022-05-31T21:27:54.964+0800   info   D:/goProject/learn-gin/main.go:31  hahahah    {"application": "test-gin"}
2022-05-31T21:27:54.964+0800   info   D:/goProject/learn-gin/main.go:32  config {"application": "test-gin", "config": {"AppName":"learn-gin","Log":{"Path":"logs/learn.log","Level":"debug"}}}

可以看到配置文件内容的打印,还有日志的打印效果,OK,舒服了。

小结

这有几个点要注意下:

init()和main()方法是golang默认的两个方法,不需要我们调用,程序执行会自动寻找项目中的这俩方法。如果引入了一个包,会优先执行引入包的init方法,再执行自己包内的init方法。

如果go项目构建是报错:missing go.sum entry for module providing package xxxxx

执行一下命令:

go build -mod=mod

读到这里,这篇“Go语言中配置文件使用与日志配置的方法”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Go语言中配置文件使用与日志配置的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Go语言中配置文件使用与日志配置的方法

本文小编为大家详细介绍“Go语言中配置文件使用与日志配置的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中配置文件使用与日志配置的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。项目结构调整说先对
2023-06-30

详解Go语言中配置文件使用与日志配置

目录项目结构调整配置文件使用日志配置小结接着上一篇的文章构建的项目:Go语学习笔记 - 环境安装、接口测试 只是简单的把GET和POST接口的使用测试了一下。 我还是想按照正常的项目结构调整一下,这篇笔记主要是三个部分:调整项目目录结构、增
2022-06-07

Apache访问日志的配置与使用

我们使用的是/usr/local/apache2.4/conf/extra/httpd-vhosts.conf配置文件下的第二段配置,它的日志在/usr/local/apache2.4/logs/下面#cat /
2022-06-04

log4j配置按日期生成日志文件的方法是什么

要按日期生成日志文件,可以使用log4j的DailyRollingFileAppender。它可以根据日期规则来生成新的日志文件。以下是一个log4j.properties文件的示例,展示了如何配置DailyRollingFileAppen
2023-09-13

SpringBoot项目创建使用+配置文件+日志文件详解

Spring的出现是为了简化Java程序开发,而SpringBoot的出现是为了简化Spring程序开发,这篇文章主要介绍了SpringBoot项目创建使用+配置文件+日志文件,需要的朋友可以参考下
2023-02-09

GO语言ini配置文件的读取的操作

iniconf 博主前两天在写一个小的go语言项目,想找一个读取ini格式配置和的三方库,在网上找了一圈感觉都不是很好用, 使用起来非常的奇怪,于是自己写了一版,还有两个接口没有实现,在项目中修改或删除配置项后更新到文件中,等待后续有时间了
2022-06-07

GO项目配置与使用的方法步骤

目录一、Go版本以及GoLand版本二、环境配置三、GoLand项目创建这里的Go(SDK)、GoLand的安装就不多说了,网上自行下载,我们着重讲项目配置,import pkg时能够完美运行 一、Go版本以及GoLand版本 Go版本--
2022-06-07

如何使用配置文件优雅地配置 Logger,同时支持日志轮转

php小编子墨将为大家分享如何使用配置文件来优雅地配置Logger,并实现日志轮转的方法。Logger是一个常用的日志记录工具,它可以帮助我们记录应用程序的运行状态,便于排查问题和追踪日志。在使用Logger时,通过配置文件可以灵活地定义日
如何使用配置文件优雅地配置 Logger,同时支持日志轮转
2024-02-10

Struts2配置文件中使用通配符的方法有哪些

Struts2配置文件中可以使用通配符的方法有以下几种:1. 通配符匹配所有请求:可以使用"action"配置来
2023-08-08

Go语言读取YAML配置文件的两种方式分享

在日常开发中,YAML格式的文件基本上被默认为是配置文件,其内容因为缩进带来的层级感看起来非常直观和整洁。本文分享了读取YAML配置文件的两种方式,需要的可以参考一下
2022-12-19

PHP日志LOG4PHP配置与使用的示例分析

这篇文章主要介绍了PHP日志LOG4PHP配置与使用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。维护了 一个老项目, 没有日志功能, 就给加了这个log4php,
2023-06-15

Linux中使用XFS文件系统的配置方法

这篇文章主要介绍“Linux中使用XFS文件系统的配置方法”,在日常操作中,相信很多人在Linux中使用XFS文件系统的配置方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux中使用XFS文件系统的配
2023-06-13

Linux DNS 解析与配置 nslookup使用 与 /etc/resolv.conf文件的配置

Linux DNS 解析与配置 序 当我接收到一批新的服务器时,尝试连接外网,比如访问百度的首页: curl www.baidu.com 发现报错,不能解析正确的主机名。这个其实就是主机在解析主机名时没能正确发现对应的主机的 ip。当
Linux DNS 解析与配置 nslookup使用 与 /etc/resolv.conf文件的配置
2023-12-25

关于rocketmq中日志文件路径的配置指南

rocketmq是java编写的,也就是可以指定启动参数,下面这篇文章主要给大家介绍了关于rocketmq中日志文件路径的配置指南,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-14

Oracle 中常见的日志类型及配置方法

Oracle 中常见的日志类型及配置方法Oracle 数据库是业界领先的关系型数据库管理系统之一,它提供了丰富的日志类型来记录数据库的操作和性能信息。在实际的数据库管理工作中,了解并配置好这些日志类型对于监控和优化数据库非常重要。本文将介
Oracle 中常见的日志类型及配置方法
2024-03-09

Struts2配置文件中使用通配符的方法(三种形式)

在Struts2配置文件中,可以使用三种形式的通配符:1. 通配符(wildcard):使用星号(*)来匹配任意字符,使用问号(?)来匹配单个字符。```xml /list.jsp /view.jsp /search.jsp```2. 通配
2023-08-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录