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。

相关推荐
2301_7965125233 分钟前
Rust编程学习 - 如何利用代数类型系统做错误处理的另外一大好处是可组合性(composability)
java·学习·rust
清水1 小时前
Spring Boot企业级开发入门
java·spring boot·后端
一个不称职的程序猿1 小时前
高并发场景下的缓存利器
java·缓存
2301_801252221 小时前
Tomcat的基本使用作用
java·tomcat
lkbhua莱克瓦241 小时前
Java基础——常用算法3
java·数据结构·笔记·算法·github·排序算法·学习方法
麦麦鸡腿堡1 小时前
Java_TreeSet与TreeMap源码解读
java·开发语言
教练、我想打篮球2 小时前
05 kafka 如何存储较大数据记录
java·kafka·record
uesowys2 小时前
华为OD算法开发指导-简易内存池
java·算法·华为od
gladiator+2 小时前
Java中的设计模式------策略设计模式
java·开发语言·设计模式
期待のcode2 小时前
Dockerfile镜像构建
java·docker·容器