logback.xml 只在控制台打印,不在文件打印

如果你的 logback.xml 配置只在控制台打印日志而不在文件中记录,可能是因为配置文件中只定义了控制台输出(ConsoleAppender)而没有定义文件输出(FileAppenderRollingFileAppender)。下面是一个简单的 logback.xml 配置示例,展示如何同时配置控制台和文件输出:

xml 复制代码
xmlCopy code
<configuration>

    <!-- 定义日志文件的存储位置和文件名 -->
    <property name="LOG_FILE" value="logs/myapp.log" />

    <!-- ConsoleAppender:在控制台打印日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- FileAppender:在文件中记录日志 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover with max history 30 days -->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志记录器,这里将 root logger 的级别设置为 DEBUG,并且添加了 CONSOLE 和 FILE 两个 appender -->
    <root level="DEBUG">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

这个配置文件中包含了两个 appender 定义:

  1. CONSOLE : 使用 ConsoleAppender 在控制台打印日志。
  2. FILE : 使用 RollingFileAppender 将日志写入文件。它使用了基于时间的滚动策略,每天生成一个新文件,保留最近30天的日志文件。

请确保你的 logback.xml 文件中包含了类似的文件输出定义。如果仍然存在问题,可能需要检查以下几点:

  • 文件路径权限:确保应用有权限写入指定的日志文件路径。
  • 文件路径存在:确保指定的日志文件路径存在,或者 Logback 有权限创建目录。
  • Logback 版本:确保你使用的 Logback 版本没有已知的相关 bug。

调整你的配置后,重新启动应用以应用这些更改,并检查指定的文件位置是否开始记录日志。

LOG_FILE 变量

LOG_FILE 在使用 Logback 或 Spring Boot 时常见于日志配置中,特别是在 application.propertiesapplication.yml 文件中。这个变量用于指定日志文件的路径和名称,Spring Boot 会自动将其解析并用于日志输出。

在 Spring Boot 中使用 LOG_FILE

在 Spring Boot 应用程序中,LOG_FILE 可以在 application.propertiesapplication.yml 文件中设置,以定义日志文件的存储位置。例如:

ini 复制代码
propertiesCopy code
# application.properties
logging.file.name=myapp.log

或者在 application.yml 中:

yaml 复制代码
yamlCopy code
# application.yml
logging:
  file:
    name: myapp.log

在这些设置中,logging.file.name(Spring Boot 2.2 之后的版本使用这个属性)定义了日志文件的名称和(可选的)路径。如果只指定了文件名而没有路径,日志文件通常会被创建在应用程序的运行目录中。

在 Logback 配置文件中引用 LOG_FILE

logback-spring.xmllogback.xml 配置文件中,你可以通过定义一个具有相同名称的属性来使用 LOG_FILE 变量,或者直接使用 Spring Boot 设置的变量(如果是在 Spring Boot 环境中)。例如:

xml 复制代码
xmlCopy code
<property name="LOG_FILE" value="myapp.log" />

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_FILE}</file>
    ...
</appender>

或者,如果你在 Spring Boot 应用中且已经通过 application.propertiesapplication.yml 指定了 logging.file.name,则可以直接在 Logback 配置中使用该变量:

xml 复制代码
xmlCopy code
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_FILE}</file>
    ...
</appender>

这样,Logback 就会将日志输出到你在 LOG_FILE 变量中指定的文件中。

注意事项

  • 确保在 Logback 的配置文件中正确设置了文件输出器(FileAppender)。
  • 如果你的日志只在控制台打印而不在文件中打印,检查你的 Logback 配置文件,确保文件输出器(FileAppender)配置正确,并且没有由于配置错误或其他问题被忽略。
  • LOG_FILE 变量的具体解析和使用方式可能会根据 Spring Boot 的版本和你的具体配置有所不同。确保参考你所使用的 Spring Boot 版本的官方文档。

以文件的形式输出日志

默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file.name或logging.file.path属性。

1)logging.file.name,设置文件,可以是绝对路径,也可以是相对路径。例如:

js 复制代码
logging.file.name=info.log  

2)logging.file.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,例如:

js 复制代码
logging.file.path=/workspace/log

如果只配置logging.file.name,会在项目的当前路径下生成一个xxx.log日志文件。如果只配置logging.file.path,在/workspace/log文件夹生成一个为spring.log日志文件。

注:二者不能同时使用,如若同时使用,则只有logging.file.name生效。默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO。

所有支持的日志记录系统都可以在Spring环境中设置记录级别,格式为:"logging.level.* = LEVEL"。

logging.level属性:

日志级别控制前缀,*为包名或Logger名。

LEVEL参数:

选项包括TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。

相关推荐
RainbowSea1 天前
12. LangChain4j + 向量数据库操作详细说明
java·langchain·ai编程
RainbowSea1 天前
11. LangChain4j + Tools(Function Calling)的使用详细说明
java·langchain·ai编程
考虑考虑1 天前
Jpa使用union all
java·spring boot·后端
用户3721574261351 天前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊1 天前
Java学习第22天 - 云原生与容器化
java
渣哥1 天前
原来 Java 里线程安全集合有这么多种
java
间彧1 天前
Spring Boot集成Spring Security完整指南
java
间彧1 天前
Spring Secutiy基本原理及工作流程
java
Java水解1 天前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆1 天前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试