精华内容
下载资源
问答
  • springboot日志打印

    2021-04-19 16:36:55
    springboot日志打印 很多项目在生产上严禁使用System.out输出,性能太低,原因是System.out输出会导致线程等待(同步),而使用Logger输出线程不等待日志的输出(异步),而继续执行。 接下来看一看springboot的日志...

    springboot日志打印

    很多项目在生产上严禁使用System.out输出,性能太低,原因是System.out输出会导致线程等待(同步),而使用Logger输出线程不等待日志的输出(异步),而继续执行。

    接下来看一看springboot的日志配置,说一下把日志记录到文件中的配置方式。

    默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在实际使用中,大家应该看到很多这种日志了,例如:

    2021-04-20 13:51:32.777  INFO 5540 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path ''
    2021-04-20 13:51:32.783  INFO 5540 --- [           main] com.demo.DemoRunApplication              : Started DemoRunApplication in 6.496 seconds (JVM running for 7.757)
    2021-04-20 13:51:39.218  INFO 5540 --- [nio-9090-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
    2021-04-20 13:51:39.218  INFO 5540 --- [nio-9090-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
    2021-04-20 13:51:39.256  INFO 5540 --- [nio-9090-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 38 ms
    2021-04-20 13:51:39.290  INFO 5540 --- [nio-9090-exec-1] com.demo.controller.StudentController    : 查询所有学生
    2021-04-20 13:51:39.435  INFO 5540 --- [nio-9090-exec-1] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
    

    什么是Logback?
    Logback是由log4j创始人设计的又一个开源日志组件。与log4j类似,但是比log4j更强大,是log4j的改良版本。

    slf4j log4j logback的关系
    slf4j是一系列的日志接口,而log4j和logback是具体实现了的日志框架。在官方文档中描述了三者的关系:slf4j译为简单日志门面,是日志框架的抽象,而log4j和logback是众多日志框架中的几种。

    a) log4j是apache实现的一个开源日志组件

    b) logback同样是由log4j的作者实现的,拥有更好的特性,是slf4j的原生实现

    c) log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活

    上面已经讲解了lomback在idea或eclipse中打印日志的信息,下面会介绍将日志打印保存到日志文件中的方式。
    使用logback添加依赖

    <dependency>
      <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>
    

    web依赖包或spring-boot-starter依赖包中自带了spring-boot-starter-logging依赖,所以若导入了web包,可以不用单独添加logging依赖

    <dependency>
      <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    方式一 使用application.yml配置

    logging:
      level:
        root: info
        com.demo: debug
      file: log/app-log.log
    

    1.1:属性讲解
    (1)file: 日志输出到根目录下log文件夹,app-log.log文件中
    (2)root: 定义了root的级别是info
    (3) com.demo: 打印com.demo包下面的所有日志,级别为debug级别

    1.2日志输出:

    2021-04-19 17:03:49.455  INFO 10864 --- [http-nio-9090-exec-1] com.demo.controller.StudentController    : 查询所有学生
    2021-04-19 17:03:49.541  INFO 10864 --- [http-nio-9090-exec-1] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
    2021-04-19 17:03:49.675 DEBUG 10864 --- [http-nio-9090-exec-1] com.demo.dao.StudentDao.findAll          : ==>  Preparing: select * from student; 
    2021-04-19 17:03:49.717 DEBUG 10864 --- [http-nio-9090-exec-1] com.demo.dao.StudentDao.findAll          : ==> Parameters: 
    2021-04-19 17:03:49.752 DEBUG 10864 --- [http-nio-9090-exec-1] com.demo.dao.StudentDao.findAll          : <==      Total: 5
    

    定制日志的格式
    在yml文件中添加如下配置:

    logging.pattern.console=%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n 
    logging.pattern.file=%d{yyyy-MM-dd-HH:mm} [%thread] %-5level %logger- %msg%n
    

    上面配置的含义如下:

    %d{HH:mm:ss.SSS}——日志输出时间
    
    %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
    
    %-5level——日志级别,并且使用5个字符靠左对齐
    
    %logger- ——日志输出者的名字
    
    %msg——日志消息
    
    %n——平台的换行符
    

    1.3 spring-boot日志配置 logging.path logging.file 注意事项
    logging.path 和 logging.file只能配置一个

    注:二者不能同时使用,如若同时使用,则只有logging.file生效

    默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO

    官方文档中有这么一句:

    If you want to write log files in addition to the console output you
    need to set a logging.file or logging.path property
    

    也就是说,它们不会同时生效,只配置其中一个就好了。

    • logging.path: 指定日志的目录, 不能指定文件名,若指定了文件名会把文件名变成目录,默认文件名是spring.log

    例:logging.path = ./logs/demo.log 想指定文件名为demo.log,但只会生成demo.log的目录,然后生成spring.log的文件

    • logging.file: 指定日志输出的文件。

    例:logging.file= ./log/demo.log 会在项目根目录下生成log文件夹及demo.log文件

    方式二:自定义配置文件
    在实际开发中,可以看到很多项目中会有logback-spring.xml。或者自定义命名为其他的文件名。
    根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

    1. Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
    2. Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
    3. Log4j2:log4j2-spring.xml, log4j2.xml
    4. JDK (Java Util Logging):logging.properties

    Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml)。springboot启动时会先加载logback.xml文件,然后再加载配置文件yml及properties,所以如果有参数定义在yml中,在logback.xml文件中是读取不到的,建议使用logback-spring.xml文件名,会在yml加载之后加载。
    默认的命名规则,并且放在 src/main/resources 下面即可

    如果想修改配置文件的名字,application.yml可以通过logging.config属性指定自定义的名字:

    logging.config=classpath:logging-con.xml
    

    如果日志配置文件的名字是默认规则的名字,则无需配置loggin.config属性了

    logback-spring.xml的配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径
    <property name="LOG_HOME" value="/app/user/runtime/log/" />
    -->
    <property name="LOG_HOME" value="/app/user/runtime/log/" />
    
    <property name="PATTERN"
              value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %-5level [%thread] [%c] %msg%n " />
    
    <!-- 控制台输出 -->
    <appender name="STDOUT"
              class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <!-- 按照每天生成日志文件 -->
    <appender name="LOG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/logback.%d{yyyy-MM-dd}.%i.log
            </FileNamePattern>
            <!-- 单个日志文件最大值,达到之后就进行切割。 -->
            <MaxFileSize>300MB</MaxFileSize>
            <!-- 日志文件总体的最大值,达到之后就不再产生日志。 -->
            <totalSizeCap>10GB</totalSizeCap>
            <!-- 日志文件最多保留的天数,也就是过期时间。 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
    
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <!-- 日志输出级别 -->
    <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->  
    <!-- additivity:是否向上级logger传递打印信息。默认是true。 -->
    <logger name="com.demo" level="debug" additivity="false">
       <appender-ref ref="LOG"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>    
    </root>
    </configuration>
    

    关于配置文件中的属性,标签可参考《https://blog.csdn.net/Inke88/article/details/75007649》

    %-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %-5level [%thread] [%c] %msg%n 格式详解
    在这里插入图片描述
    在这里插入图片描述

    • logger {length }。
      (1)如果不定义length则默认名称全部带出。
      (2)若设定长度,则不管长度是多少,最右侧名称展示出来
      (3)若length大于了最右侧名称长度,则会带出每个名称的首字符与最右侧名称左右字符 m.s.s.Bar
      (4)然后随着长度的增加,从右侧依次增加各部分名称。前提是length的大小满足带出新部分名称后整个字符串长度的大小才会显示

    3:动态配置日志打印目录

    说明:此处讲解的是将application.yml中的logging.path配置与logback-spring.xml文件配合使用,在yml中修改目录后,动态修改日志存储目录;并且logging.path属性只能配置目录,默认打印日志文件名为spring.log,配合logback-spring.xml一起使用可以修改日志文件名。ps:不算是一种独立的日志打印方式。

    application.yml中的配置

    logging:
      path: E:/log
    
    • logging:path: E:/log :在E:/log创建目录

    logback-spring.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径
    <property name="LOG_HOME" value="/app/user/runtime/log/" />
    -->
    <property name="LOG_HOME" value="${LOG_PATH}" />
    
    <property name="PATTERN"
              value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %-5level [%thread] [%c] %msg%n " />
    
    <!-- 控制台输出 -->
    <appender name="STDOUT"
              class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <!-- 按照每天生成日志文件 -->
    <appender name="LOG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/logback.%d{yyyy-MM-dd}.%i.log
            </FileNamePattern>
            <!-- 单个日志文件最大值,达到之后就进行切割。 -->
            <MaxFileSize>300MB</MaxFileSize>
            <!-- 日志文件总体的最大值,达到之后就不再产生日志。 -->
            <totalSizeCap>10GB</totalSizeCap>
            <!-- 日志文件最多保留的天数,也就是过期时间。 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 日志输出级别 -->
    <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->  
    <!-- additivity:是否向上级logger传递打印信息。默认是true。 -->
    <logger name="com.demo" level="debug" additivity="true"/>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG"/>
    </root>
    </configuration>
    
    1. 在logback-spring.xml文件中要通过 ${LOG_PATH}的方式获取logging.path的属性,而不是通过 ${logging.path}的方式
    2. 若要通过 ${logging.path}获取目录使用下列写法
    <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="E:/log"/>
    
    1. logback-spring.xml的文件名最好不要是logback.xml,因为springboot的加载顺序会先加载logback.xml再加载springboot配置文件yml及properties。
      如果文件名为logback.xml, 会读取不到配置文件中的属性,在上面1,2两点中会在项目根目录下生成LOG_HOME_IS_UNDEFINED文件夹, 第2点若有了defaultValue属性会按照默认值生成目录。
    2. 解决LOG_HOME_IS_UNDEFINED
      (1): 文件名修改为logback-spring.xml, 不要使用logback.xml
      (2): <property name="LOG_HOME" value="${LOG_PATH:-.}" />
      一般来说修改文件名就可以了,但是如果 ${LOG_PATH}输入错误仍然可能会造成IS_UNDEFINED文件夹, 此时(2) 中的代码块就可以派上用场了。

    ${LOG_PATH:-.} 用法
    ${LOG_PATH:-.}

    LOG_PATH是读取了logging.path的环境变量,直接读取logging.path 的值是读取不到的。

    -表示分割符,后面的参数是默认路径
    .表示当前项目根路径或者可以写成 ./log
    ${LOG_PATH:-.} =${E:/log-当前项目根路径}

    如果日志配置文件的名称是logback.xml,然后又使用了${LOG_PATH:-.}的写法会生成两个日志路径 一个是 E:/log 另一个是在当前项目根路径生成的日志 因为spring比logback先启动 所以会在项目根目录生成一个spring.log的日志(我的配置文件已经修改了文件名,所以会在根目录生成logback.2021-04-20.0.log) ,如果想把目录生成在一起,使用${LOG_PATH:- } 默认路径设置成空格这样就不会在你的项目根目录生成spring.log日志文件了==(会在你服务器根目录生成)==接下来系统日志就会输出到你的自定义目录了

    展开全文
  • springBoot 日志打印

    2018-04-02 16:39:41
    Mybatis 打印日志 与springboot 整合 配置文件:mybatis: configuration: map-underscore-to-camel-case:true mapper-locations:com/**/manage/mapper/*.xml typeAliasesPackage:com.wkxhotel.**.domain解释map...

    Mybatis 打印日志  与springboot 整合

     

    配置文件:

    mybatis:

     configuration:

       map-underscore-to-camel-case:true

     mapper-locations:com/**/manage/mapper/*.xml

      typeAliasesPackage:com.wkxhotel.**.domain

    解释

    map-underscore-to-camel-case:  数据库字段安驼峰命名规则自动匹配到实体类上,不需要用别名

    typeAliasesPackage 指定实体类的位置

    mapper-locations:  指定mapper文件的位置

     

     

    在classPath : 目录上创建文件

     

    Mybatis-config.xml

    内容:

     

    <?xml version="1.0"encoding="UTF-8" ?> 

     

    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

     

     

    <configuration>

    <settings>

       <setting name="logImpl" value="STDOUT_LOGGING"/> 

    </settings>

    </configuration> 

     

     

     

    Logback.xml 里面的内容

     

     

     

    <?xml version="1.0"encoding="UTF-8"?>

    <configuration debug="false">

       <!--定义日志文件的存储地址勿在 LogBack 的配置中使用相对路径 -->

       <property name="LOG_HOME" value="/home"/>

       <!-- 控制台输出 -->

       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

          <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->

             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -

                %msg%n</pattern>

          </encoder>

       </appender>

       <!-- 按照每天生成日志文件 -->

       <appender name="FILE"

          class="ch.qos.logback.core.rolling.RollingFileAppender">

          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

             <!-- 滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 %i:当文件大小超过maxFileSize时,按照i进行文件滚动 -->

             <FileNamePattern>${LOG_HOME}/nfs_data_31/log/tomcat/wkxhotel/wkxhotel-company-manage/%d{yyyy-MM-dd}-%i.log

             </FileNamePattern>

             <!--日志文件保留天数 -->

             <MaxHistory>30</MaxHistory>

             <!--日志文件最大的大小 -->

             <timeBasedFileNamingAndTriggeringPolicy

                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <MaxFileSize>30MB</MaxFileSize>

             </timeBasedFileNamingAndTriggeringPolicy>

          </rollingPolicy>

          <!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。

             %msg:日志消息,%n是换行符 -->

          <layout class="ch.qos.logback.classic.PatternLayout">

             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [

                %logger{50}: %line ] - %msg%n</pattern>

          </layout>

       </appender>

       <!--myibatis log configure -->

       <logger name="com.apache.ibatis" level="info" />

       <logger name="java.sql.Connection" level="info" />

       <logger name="java.sql.Statement" level="info" />

       <logger name="java.sql.PreparedStatement" level="info" />

        <logger name="com.**.manage.dao"level="DEBUG"/>

    (这个包名dao 根据项目自定义修改)

     

       <!-- 日志输出级别 -->

       <root level="info">

          <appender-ref ref="STDOUT" />

          <appender-ref ref="FILE" />

       </root>

       <!--日志异步到数据库 -->

       <!-- <appender name="DB"class="ch.qos.logback.classic.db.DBAppender"> 日志异步到数据库

          <connectionSourceclass="ch.qos.logback.core.db.DriverManagerConnectionSource">

          连接池 <dataSourceclass="com.mchange.v2.c3p0.ComboPooledDataSource"><driverClass>com.mysql.jdbc.Driver</driverClass>

          <url>jdbc:mysql://127.0.0.1:3306/databaseName</url><user>root</user> <password>root</password>

          </dataSource></connectionSource> </appender> -->

    </configuration>

     

     

    加载资源

    @ImportResource(locations = {"classpath:shiro.xml", "classpath:mybatis-config.xml" })


    可不配置默认就会加载classpath的内容


    不同的环境日志打印级别不同 

    dev      level="info"

    test     level="DEBUG"

    pro    level="ERROR" 

    展开全文
  • 一个项目难免会遇到各种各样的问题,开发人员也需要及时发现问题并迅速解决。大部分问题都可以在日志中发现,所以日志系统对于项目来说至关重要,今天记录下springboot如何打印日志,并保存到文件中去。

    一个项目难免会遇到各种各样的问题,开发人员也需要及时发现问题并迅速解决。大部分问题都可以在日志中发现,所以日志系统对于项目来说至关重要,今天记录下springboot如何打印日志,并保存到文件中去。

    Springboot默认使用的是LogBack,新建的springboot项目已经引用过spring-boot-starter或者spring-boot-starter-web,所以不需要再引用其他依赖。

    日志信息存到文件中有很多方法,今天要讲的是xml配置日志存储。

    首先在 resources 下新建xml文件 logback-spring.xml。(xml文件名必须是logback-spring)

    logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
    <!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
    <!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
                     当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
    <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false-->
    <configuration  scan="true" scanPeriod="10 seconds">
        <contextName>logback-spring</contextName>
    
        <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
        <property name="logging.path" value="logs" />
    
        <!--0. 日志格式和颜色渲染 -->
        <!-- 彩色日志依赖的渲染类 -->
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
        <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
        <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
        <!-- 彩色日志格式 -->
        <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
        <!--1. 输出到控制台-->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>debug</level>
            </filter>
            <encoder>
                <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--2. 输出到文档-->
        <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
        <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${logging.path}/web_debug.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志归档 -->
                <fileNamePattern>${logging.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录debug级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>debug</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${logging.path}/web_info.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 每天日志归档路径以及格式 -->
                <fileNamePattern>${logging.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录info级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>info</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${logging.path}/web_warn.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${logging.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录warn级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>warn</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文档的路径及文档名 -->
            <file>${logging.path}/web_error.log</file>
            <!--日志文档输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${logging.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文档保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            <!-- 此日志文档只记录ERROR级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!--
            <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
            以及指定<appender><logger>仅有一个name属性,
            一个可选的level和一个可选的addtivity属性。
            name:用来指定受此logger约束的某一个包或者具体的某一个类。
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
                  还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
                  如果未设置此属性,那么当前logger将会继承上级的级别。
            addtivity:是否向上级logger传递打印信息。默认是true<logger name="org.springframework.web" level="info"/>
            <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
        -->
    
        <!--
            使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
            第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
            第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
            【logging.level.org.mybatis=debug logging.level.dao=debug】
         -->
    
        <!--
            root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
            不能设置为INHERITED或者同义词NULL。默认是DEBUG
            可以包含零个或多个元素,标识这个appender将会添加到这个logger。
        -->
    
        <!-- 4. 最终的策略 -->
        <!-- 4.1 开发环境:打印控制台-->
        <springProfile name="dev">
            <logger name="com.demo.controller" level="debug"/><!-- 修改此处扫描包名 -->
        </springProfile>
    
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    
        <!-- 4.2 生产环境:输出到文档 -->
        <!--<springProfile name="pro">
            <root level="info">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="DEBUG_FILE" />
                <appender-ref ref="INFO_FILE" />
                <appender-ref ref="ERROR_FILE" />
                <appender-ref ref="WARN_FILE" />
            </root>
        </springProfile>-->
    </configuration>
    

    之后运行项目,根目录下就会出现logs文件夹,里面的日志文件每天过后都会根据日期重新保存下来,以便更好地查看。以上就是使用springboot默认日志系统打印日志文件的配置,拜了个拜。

    展开全文
  • SpringBoot日志打印增加方法和行号

    千次阅读 2020-07-23 14:48:55
    最近某个项目只能在生产环境调试,无法本地debug,而SpringBoot默认的日志打印信息完全不够,默认只打印了时间、level、PID、线程名、logger和msg,对于只能靠日志排错的我来说真是欲哭无泪!!! 想要快速定位到...
  • 自定义springboot日志打印图案

    千次阅读 2018-08-08 16:49:21
    http://patorjk.com/software/taag/#p=display&amp;f=Graffiti&amp;t=Type%20Something%20 将生成的图案复制到springboot微服务resources下面的banner.txt,没有这个文件,自己创建一个...
  • 经常测试人员过来告诉你接口又又又又报错了, 有时小程序或其它客户端不好抓包,这时不如自己直接在后台日志中直接打印url 和json .但是springboot 的aop无法打印出入参的json ,这时首先想到的就是filter 中打印出入参...
  • springboot日志打印的使用demo

    千次阅读 2018-03-30 17:03:24
    代码地址:... <?xml version="1.0" encoding="UTF-8"?> <configuration debug="true">...-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, --> <property...
  • logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> ...appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">...%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %...
  • springboot日志打印的过程中,大量打印JndiPropertySource信息 2017-07-01 15:20:55.725 DEBUG 46784 --- [on(3)-127.0.0.1] o.s.jndi.JndiPropertySource : JNDI lookup for name [mybatis.config] threw ...
  • 日志门面常见的日志men门面有jakarta commons logging(JCL),SLF4J.相当于日志门面的facaded对象,只提供一个接口,并不提供实现。...调用接口不用关心如何实现的打印日志。Spring Boot 底层默认选用的就是 ...
  • springboot 项目上传文件时出现了以下错误Required request part 'file' is not present我是通过在Filter中使用HttpServletRequestWrapper 的形式打印请求和返回日志的,经过排查发现,使用...发现当...
  • SpringBoot日志打印

    2020-11-28 14:22:30
    springboot的logback日志就不打印出来了,没找到原因,mav也各种修改了,也解决不了,下面这种也不行: <pre><code> <dependency> <groupid>com.deepoove</groupid> <...
  • springboot默认的日志框架是slf4j和logback,而且是帮我们配置好的,我只需要直接使用就可以了。从上图中,我们可以看到我们一共写了5行日志,但是只打印了三行,说明默认的只打印info级别以上的日志日志级别:...
  • Spring Boot使用Apache Commons日志记录进行所有内部日志记录。Spring Boot的默认配置支持使用Java Util Logging,Log4j2和Logback。 使用这些,可以配置控制台日志记录以及文件日志记录。如果使用的是Spring Boot ...
  • 日志文件的配置结构:(1)FILE_LOG_PATTERN:日志输出格式变量,在控制台输出和文件中输出的append中都引用了此变量。(2)consoleLog:定义一个控制台的appender(3)fileLog:定义一个日志文件的appender,这就是文件...
  • springboot打印日志配置

    2019-05-21 11:11:28
    springboot打印日志配置,自定义输出路径,只用到了生成文件和控制台输出
  • SpringBoot日志

    2020-06-26 21:42:42
    title: SpringBoot日志 date: 2020年6月23日17:53:50 updated: 2020年6月23日17:53:54 index_img: /img/3.png tags: SpringBoot categories: 日志 comments: true 日志 1、日志框架 小张;开发一个大型系统; ...
  • SpringBoot日志使用以及打印出文件是十分的简单,傻瓜式教学,跟着我一起来! 首先创建Spring项目 1、我会在测试文件里写入一下 @Test void contextLoads() { Logger logger = LoggerFactory.getLogger(getClass...
  • springboot 打印日志

    千次阅读 2018-12-24 16:08:42
    在实际项目中,我们的程序都是运行在...我的项目是springboot打印日志时的步骤: 1.application.yml配置文件中配置日志级别和日志文件的路径 logging: level: learning: debug file: log/app-user.log 2.在...
  • springboot日志相关

    2019-12-13 21:33:48
    springboot日志相关 1 日志框架 2 SLF4j使用 3 SpringBoot日志关系 4 SpringBoot日志使用 5 SpringBoot切换日志框架 一、日志框架 小张;开发一个大型系统; ​ 1、System.out.println("");将...
  • Springboot Mybatis打印SQL日志 application.properties 中增加以下配置: #打印SQL日志 logging.level.com.boot.dao=debug 注:必须指定到dao层,包名必须正确
  • 日志输出不完整window下和linux下都不完整相关代码日志输出:2019-01-29 01:16:42.214 [restartedMain] WARN ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,889
精华内容 755
关键字:

springboot日志打印

spring 订阅