【问题标题】:How to write log messages to file using Spring Boot?如何使用 Spring Boot 将日志消息写入文件?
【发布时间】:2015-08-10 12:59:27
【问题描述】:

我想在文件中而不是在控制台上记录消息。我使用的是Spring Boot,我的配置如下:

application.properties:

logging.level: DEBUG
logging.level: ERROR
logging.file: ${HOME}/application.log

我只在我的 application.log 文件中收到 INFO 的日志消息,但我也想要 ERROR 和 DEBUG 消息。

我的要求是我想要error.log 文件中的ERROR 消息和debug.log 中的DEBUG 消息和info.log 中的INFO 消息。

非常感谢任何帮助。

【问题讨论】:

    标签: logging spring-boot


    【解决方案1】:

    尝试在与您的 application.properties 相同的文件夹中添加 logback.xml,而不是使用这些属性。以任何您需要的方式配置 logback.xml 来记录。

    【讨论】:

    • 感谢回复,但我认为我们将 logback.xml 用于非 Spring Boot 应用程序,我们不能在 application.properties 中进行配置
    【解决方案2】:

    Spring Boot 允许您使用 application.properties 配置日志系统的一些基本方面,但有limits

    要配置日志系统的更细粒度设置,您需要使用相关 LoggingSystem 支持的本机配置格式。

    换句话说,如果你想做一些没有通过属性特别支持的事情,你将无法添加和编辑 logback.xml 文件(假设你正在使用 logback)。

    那么,让我们来看看你的要求:

    1. “我想在不在控制台的文件中记录消息。”

    根据docs

    默认情况下,Spring Boot 只会登录到控制台,不会写入日志文件。如果您想将日志文件另外(强调添加)写入控制台输出,您需要设置 logging.file 或 logging.path 属性(例如在您的 application.properties 中)。

    换句话说,not无法使用属性登录到控制台。

    1. “我只在我的 application.log 文件中获取 info 的日志消息,但我还想要错误消息和调试消息。”

    默认情况下,Spring Boot 日志记录在 INFO 级别,应该包括 ERROR,您确定您没有使用默认设置获取 ERROR 日志吗?

    此外,您只指定要记录的最高级别,而不是每个级别,并且您必须指定要设置级别的记录器。

    这行不通:

    logging.level: DEBUG
    logging.level: ERROR
    

    这是一个如何根据docs配置自定义日志级别的示例:

    logging.level.org.springframework.web:调试
    logging.level.org.hibernate:错误

    您也可以使用logging.level.* 属性来设置根记录器的级别,如下所示:

    logging.level.ROOT: DEBUG
    

    注意,在 ROOT logger 上设置 DEBUG 日志会产生大量的日志。我刚刚在这里测试了一下,刚启动就得到了大约 13MB 的日志,没有做任何事情。

    1. “我想要 error.log 文件中的错误消息和 debug.log 中的调试消息以及 info.log 中的信息消息。”

    同样,这不能单独使用属性来完成。 Spring Boot 允许您只配置一个 logging.file 属性,该属性将包含所有日志。

    有关可用日志记录属性的完整列表和示例值,请参阅here

    【讨论】:

      【解决方案3】:

      在您的情况下,这不起作用,因为您尝试将 ROOT 日志记录级别设置为多个级别。

      logging.level: DEBUG
      logging.level: ERROR
      

      这些是不同的日志记录级别及其从最小值

      OFF

      # To set logs level as per your need.
      logging.level.org.springframework = debug
      logging.level.tech.hardik = trace
      
      # To store logs to external file
      # Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, your logs it won't work.      
      logging.file=D:/spring_app_log_file.log
      
      # To customize logging pattern.
      logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
      

      请通过此文档更生动地自定义您的日志。

      https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

      【讨论】:

        【解决方案4】:

        如果您想禁用控制台日志记录并仅将输出写入文件,则需要一个自定义 logback-spring.xml 导入 file-appender.xml 但不导入 console-appender.xml。

        Spring boot docs中有描述:

        【讨论】:

          猜你喜欢
          • 2020-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-14
          • 1970-01-01
          • 2022-01-18
          相关资源
          最近更新 更多