Golang将日志同时输出到控制台和文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang将日志同时输出到控制台和文件相关的知识,希望对你有一定的参考价值。

参考技术A 日常开发当中需要将golang的log包打印的日志同时输出到控制台和文件,应该如何解决这个问题?

log包可以通过SetOutput()方法指定日志输出的方式(Writer),但是只能指定一个输出的方式(Writer)。我们利用io.MultiWriter()将多个Writer拼成一个Writer使用的特性,把log.Println()输出的内容分流到控制台和文件当中。

原文地址

使用 pom 将 Maven 输出发送到控制台和日志文件

【中文标题】使用 pom 将 Maven 输出发送到控制台和日志文件【英文标题】:Send Maven output to console and log file using pom 【发布时间】:2017-02-09 11:36:56 【问题描述】:

问题:在 Eclipse 中运行 Maven 时,如何将控制台输出发送到文件?

我想使用 pom 设置或 maven 插件来实现这一点。我确实想修改运行配置或 maven 系统设置。

作为参考,我使用的是 Windows 7、Eclipse Luna、Java 6、Maven 3。

【问题讨论】:

你不能那样做,你的答案是唯一的出路。 Maven 在读取 POM 之前如何编写文件?还要考虑多模块项目,其中该配置只能在一个模块中。 尝试使用 AOP。通过在默认的 org.apache.maven.plugin.logging.Log 上应用切入点,成功地将日志重定向到文件。但是太多的努力是白费的。试一试。 【参考方案1】:

根据official command line options,您可以使用-l,--log-file <arg>,它提供:

所有构建输出的日志文件。

因此,运行:

mvn clean install -l output.log

不会将任何内容打印到控制台并自动将整个构建输出重定向到output.log文件。

如果您不想每次都输入它(或者您实际上不想使用命令行)并且您希望它作为默认选项(尽管我认为很少见),您可以使用新的命令行选项行为自版本 3.3.1 起可用,并且有一个 .mvn 文件夹,相关的 pom.xml 文件所在的文件夹和其中的 maven.config 文件只需提供以下行:

-l output.log

也就是说,.mvn/maven.config 文件仅在其创建的本地项目中替换MAVEN_OPTIONS,并使用它提供的选项,而不影响按照@的Maven设置的其他构建987654333@.

这是一个与 IDE 无关的解决方案(它是 Maven 的新内置功能)并且是项目本地的,但仍然不能通过简单的 POM 编辑提供,因为Maven default life cycle phases 的第一阶段是@987654334,所以无法实现@,其中:

验证项目是否正确,所有必要的信息都可用

也就是说,在构建期间,因此当构建已经开始(并生成输出)时,它会验证 pom.xml 文件,因此在该阶段重定向构建输出为时已晚一些 POM 属性/插件。

【讨论】:

即使登录Eclipse控制台窗口丢失了,这也是最合理的答案。【参考方案2】:

运行并选择Run Configuration -> Commons -> Select a file。 这应该将您的输出重定向到您指定的文件。

【讨论】:

这是一个很好的答案,但我正在寻找一些方法来通过仅修改 pom 来实现这一点。我已经更新了我的问题。【参考方案3】:

根据this,您可以尝试编辑$MAVEN_HOME/conf/logging/simplelogger.properties。我快速尝试了一下,maven 的输出被重定向了,但是写给stdout 的任何其他内容(例如测试)仍然会写在控制台上

【讨论】:

这是对的,但是我正在寻找一个不修改maven设置的解决方案。 是的,我希望您可以覆盖项目文件的<properties> 部分中的这些设置,但它似乎不起作用...【参考方案4】:

如何创建一个 M2E 的分支并对其进行修改以从 pom.xml 读取启动配置的输出文件

https://github.com/eclipse/m2e-core.git

【讨论】:

【参考方案5】:

一个可能的解决方案是在mvn file 中设置输出格式。例如,在目录/usr/bin 中,在exec "$JAVACMD" \ 行的末尾添加所需的输出,告知日志将保存的路径:| tee /home/maven-log.log.

但是,它仅在终端线调用 maven 时有效;当由 IDE(如 eclipse)调用时,此解决方案不起作用。

【讨论】:

以上是关于Golang将日志同时输出到控制台和文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在实时输出的同时将命令的 stdout 和 stderr 重定向到控制台和日志文件?

Golang logrus 快速上手

python 信息同时输出到控制台与文件

如何让 cout 同时发送到控制台和系统日志

使用 pom 将 Maven 输出发送到控制台和日志文件

Python+Selenium进行UI自动化测试项目中,常用的小技巧4:日志打印,longging模块(控制台和文件同时输出)