我从golang开始,随着我开始建立自己的应用程序,我想从一开始就添加日志记录,这就是我遇到问题的地方。
如果我打开文件并使用标准日志记录库,则可以写入文件。像这样
package main
import (
"os"
"fmt"
"log"
)
func main() {
// open a file
f, err := os.OpenFile("test.log", os.O_APPEND | os.O_CREATE | os.O_RDWR, 0666)
if err != nil {
fmt.Printf("error opening file: %v", err)
}
// don't forget to close it
defer f.Close()
// assign it to the standard logger
log.SetOutput(f)
log.Output(1, "this is an event")
}
我将获得带有日志行的test.log。但是,如果我尝试调整它以支持logrus
https://github.com/Sirupsen/logrus这样
package main
import (
"os"
"fmt"
log "github.com/Sirupsen/logrus"
)
func init() {
// open a file
f, err := os.OpenFile("testlogrus.log", os.O_APPEND | os.O_CREATE | os.O_RDWR, 0666)
if err != nil {
fmt.Printf("error opening file: %v", err)
}
// don't forget to close it
defer f.Close()
// Log as JSON instead of the default ASCII formatter.
log.SetFormatter(&log.JSONFormatter{})
// Output to stderr instead of stdout, could also be a file.
log.SetOutput(f)
// Only log the warning severity or above.
log.SetLevel(log.DebugLevel)
}
func main() {
log.WithFields(log.Fields{
"Animal": "Logrus",
}).Info("A logrus appears")
}
我只会看到错误。
写入日志失败,写入testlogrus.log:文件描述符错误
我得到的只是错误的文件描述符错误。有什么想法我做错了吗?
谢谢克雷格
由于您init
已经在函数中设置了文件,并且拥有defer f.Close()
,因此文件在init
返回后将被关闭。
您要么必须保持文件打开状态,要么将整个文件移入main。
问题内容: 我可以将所有消息定向到log.txt文件: 但是我也如何在控制台中获取日志消息? 问题答案: 使用 MultiWriter创建一个写入器,该写入器将其写入复制到所有提供的写入器中,类似于Unix tee(1)命令
问题内容: 我有一个Main应用程序和多个工作程序节点,它们在领事中注册。我想通过负载平衡将数据发送到工作节点。使用congo的golang API,我可以在主应用程序上获得可用的服务。 但是,我无法在golang应用程序中获取DNS SRV记录。 如该线程中所述,如何在go应用程序中读取领事SRV记录?,我尝试了github.com/miekg/dns,但没有成功。另外,我尝试使用github.
问题内容: 我有一个dropwizard应用程序,在该应用程序中,我配置了logger附加程序,使其文件如下: 并且,在我的应用中创建了记录器: 在main()中进行一些测试记录: 该应用程序启动并运行没有问题。但是我没有在stdout或mylogs.log文件中得到任何日志(当然,除了Jetty访问日志之外,这些日志也已正确打印到mylogs.log中)。相反,如果我删除configuratio
问题内容: 我需要将对项目中的Oracle数据库的所有查询记录到日志文件中。 有什么 好的 解决方案来实现这一目标?一些示例用法将不胜感激。 我已经用jdbcdslog查看了SLF4J,但不确定如何使用它登录到文件。而且,我需要“过滤”一些日志(因为我不需要知道何时调用某种方法) 最好是,我更愿意使用,但这不是必需的。 谢谢。 更新 我找到了这篇Oracle文章,但是它并没有真正告诉您如何以编程方
如果我错了,请纠正我。。拼花文件是自描述的,这意味着它包含正确的模式。 我想使用S3接收器融合连接器(特别是因为它正确处理了S3的精确一次语义)从我们的Kafka中读取JSON记录,然后在s3中创建拼花文件(按事件时间分区)。我们的JSON记录没有嵌入模式。 我知道它还不被支持,但我对拼花地板和AVRO也有一些问题。 由于我们的JSON记录中没有嵌入模式,这意味着连接器任务必须从它自己的JSON字
提前致谢