我在Go应用中使用logrus。我相信这个问题也适用于任何其他日志记录程序包(不提供基于外部文件的配置)。
logrus提供用于设置各种配置的功能,例如SetOutput,SetLevel等。
像其他任何应用程序一样,我需要从多个源文件/程序包进行日志记录,似乎您需要在每个文件中使用logrus设置这些选项。
是否有任何方法可以将这些选项设置在某个中央位置,以便在整个应用程序中共享。这样,如果我必须更改日志记录级别,则可以在一个地方进行更改并将其应用于应用程序的所有组件。
您无需使用Logrus在每个文件中设置这些选项。
您可以将Logrus导入为log
:
import log "github.com/Sirupsen/logrus"
然后,像这样的函数log.SetOutput()
就是函数,它们会修改全局记录器,并应用于包含此导入的任何文件。
您可以创建一个包全局log
变量:
var log = logrus.New()
然后,像函数这样log.SetOutput()
的函数会全局修改您的包。如果您的程序中有多个软件包,这将是一个尴尬的IMO,因为它们每个都有一个具有不同设置的不同记录器(但对于某些用例来说可能会很好)。我也不喜欢这种方法,因为它很容易混淆goimports
(它会插入log
您的导入列表中)。
或者,您可以创建自己的包装器(这就是我要做的)。我有自己的log
包,带有自己的logger
var:
var logger = logrus.New()
然后,我制作顶级函数来包装Logrus:
func Info(args ...interface{}) {
logger.Info(args...)
}
func Debug(args ...interface{}) {
logger.Debug(args...)
}
这有点乏味,但是允许我添加特定于程序的函数:
func WithConn(conn net.Conn) *logrus.Entry {
var addr string = "unknown"
if conn != nil {
addr = conn.RemoteAddr().String()
}
return logger.WithField("addr", addr)
}
func WithRequest(req *http.Request) *logrus.Entry {
return logger.WithFields(RequestFields(req))
}
因此,我可以执行以下操作:
log.WithConn(c).Info("Connected")
(我计划将来包装logrus.Entry
到我自己的类型中,以便可以更好地链接它们;当前无法调用,log.WithConn(c).WithRequest(r).Error(...)
因为无法添加WithRequest()
到logrus.Entry
。)
输入: null 目标是使以下语句可编译: 这里有什么用?它想让我<编码>匹配器<?super java.util.list >并告诉我通过了 。那么如何在这里传递匹配器集合呢? 有一个关于将集合与hamcrest进行比较的问题,但没有传递Matchers集合的示例,而不是元素。
数据采集也即埋点,它是精细化分析的第一步。数据的准确性、可扩展性以及技术人员的高效性依次被视为数据采集的三大要点。埋点,保证了数据的准确性;事件、属性、值的结构保证了数据的可扩展性;埋点文档也保证了团队成员协同的高效性。 为了帮助诸葛io的客户能够准确、高效的采集数据,我们建议您: 一、数据分析需求梳理 数据采集切忌大而全,产品不断迭代,数据分析的需求也是随着产品不断迭代的,明确长远阶段和当前阶段
集成测试是对已经进行单元测试的各个部分的一种整合测试。集成是昂贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 理想情况下,你应该这样组织一个项目,使得最后没有一个阶段是必须通过显式集成来进行的。这比在项目过程中,随着事情完成逐渐集成事情要好得多。如果这是不可避免的,请仔细评估。
问题内容: 我有一个类似于http://drive.google.com的链接,并且我想在该链接之外匹配“ google”。 我有: 但这仅在整个文本为“ google”时才匹配(不区分大小写,因此也匹配Google或GooGlE等)。如何匹配另一个字符串中的“ google”? 问题答案: 关键是您使用的ElasticSearch正则表达式需要 完整的字符串匹配 : Lucene的模式总是锚定的
问题内容: Maven是否需要在某个时候连接到互联网才能使用它?意味着专门获取用于编译,清洁,包装等的内部Maven插件? 问题答案: 你可以在脱机模式下运行。当然,本地存储库中不可用的任何工件都将失败。Maven并非基于分布式存储库,但是它们肯定会使事情变得更加无缝。因此,许多商店使用内部镜像,这些镜像与中央存储库逐渐同步。 另外,在开始脱机工作之前,可以使用来确保已在本地安装所有依赖项。