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。

相关推荐
Hello-Brand2 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码8 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.10 分钟前
Pod控制器
java·开发语言
2的n次方_12 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55112 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.13 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七18 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian15124 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~26 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
.生产的驴28 分钟前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq