zoukankan      html  css  js  c++  java
  • springboot 错误日志与其它日志分开保存(每天)

    在 resources 目录下,添加logback-spring.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 说明:
        1、日志级别及文件 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中。
        2、日志级别可以根据开发环境进行配置,为方便统一管理查看日志,日志文件路径统一由LOG_PATH:-.配置在/home/项目名称/logs
    -->
    <!--  https://www.cnblogs.com/54hsh/p/12684241.html -->
    <configuration>
        <!-- 引入默认设置 -->
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <!--自定义颜色配置-->
        <conversionRule conversionWord="customColor" converterClass="com.example.datasource.config.LogbackColorful"/>
        <!-- 编码格式设置 -->
        <property name="ENCODING" value="UTF-8"/>
        <!-- 日志文件的存储地址,由application.yml中的logging.path配置,根路径默认同项目路径 -->
        <property name="LOG_HOME" value="${LOG_PATH:-.}"/>
        <!-- 常规输出格式:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
        <property name="NORMAL_LOG_PATTERN"
                  value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level ${PID:- } [%15.15t]%logger{50}.%method()@%line : %msg%n"/>
        <!-- 彩色输出格式:magenta:洋红,boldMagenta:粗红,cyan:青色 -->
        <property name="CONSOLE_LOG_PATTERN"
                  value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %customColor(%-5level) %magenta(${PID:- }) [%15.15t] %cyan(%logger{50}.%method() @%line) : %msg%n"/>
    
        <!-- ==========================控制台输出设置========================== -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <charset>${ENCODING}</charset>
            </encoder>
        </appender>
    
        <!-- ==========================按天输出日志设置========================== -->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!-- 按天回滚 daily -->
                <FileNamePattern>logs/%d{yyyy-MM-dd}/info/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
                <!-- 日志文件保留天数 -->
                <MaxHistory>30</MaxHistory>
                <maxFileSize>30MB</maxFileSize>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>             <!-- 设置拦截的对象为INFO级别日志 -->
                <onMatch>ACCEPT</onMatch>       <!-- 当遇到了INFO级别时,启用该段配置 -->
                <onMismatch>DENY</onMismatch>   <!-- 没有遇到INFO级别日志时,屏蔽该段配置 -->
            </filter>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${NORMAL_LOG_PATTERN}</pattern>
                <charset>${ENCODING}</charset>
            </encoder>
            <!-- 日志文件最大的大小 -->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- ==========================按天输出ERROR级别日志设置========================== -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--        <file>${LOG_HOME}/system-error.log</file>-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!-- 按天回滚 daily -->
                <FileNamePattern>logs/%d{yyyy-MM-dd}/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
                <!-- 日志文件保留天数 -->
                <MaxHistory>30</MaxHistory>
                <maxFileSize>30MB</maxFileSize>
            </rollingPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>            <!-- 设置拦截的对象为ERROR级别日志 -->
                <onMatch>ACCEPT</onMatch>       <!-- 当遇到了ERROR级别时,启用该段配置 -->
                <onMismatch>DENY</onMismatch>   <!-- 没有遇到ERROR级别日志时,屏蔽该段配置 -->
            </filter>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${NORMAL_LOG_PATTERN}</pattern>
                <charset>${ENCODING}</charset>
            </encoder>
        </appender>
    
        <!-- ==========================用户登录日志设置========================== -->
        <appender name="USER_LOGIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!-- 按天回滚 daily -->
                <fileNamePattern>logs/%d{yyyy-MM-dd}/login/login.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <!-- 日志文件保留天数 -->
                <MaxHistory>30</MaxHistory>
                <maxFileSize>30MB</maxFileSize>
            </rollingPolicy>
            <encoder>
                <pattern>${NORMAL_LOG_PATTERN}</pattern>
                <charset>${ENCODING}</charset>
            </encoder>
        </appender>
    
        <!-- ===日志输出级别,OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL level=== -->
        <!--<logger name="com.sand" level="INFO"/>
        <logger name="com.apache.ibatis" level="INFO"/>
        <logger name="java.sql.Statement" level="INFO"/>
        <logger name="java.sql.Connection" level="INFO"/>
        <logger name="java.sql.PreparedStatement" level="INFO"/>
        <logger name="org.springframework" level="WARN"/>
        <logger name="com.baomidou.mybatisplus" level="WARN"/>-->
        <!-- 用户登录日志 -->
        <!-- 需要在代码中编写  private static final Logger logger= LoggerFactory.getLogger("user-login"); 来为个别类写入特定的日志文件 -->
        <logger name="user-login" level="INFO">
            <appender-ref ref="USER_LOGIN"/>
        </logger>
    
        <!-- ======开发环境:打印控制台和输出到文件====== -->
        <springProfile name="dev"><!-- 由application.yml中的spring.profiles.active配置 -->
            <root level="INFO">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="INFO_FILE"/>
                <appender-ref ref="ERROR_FILE"/>
            </root>
        </springProfile>
    
        <!-- ======测试环境:打印控制台和输出到文件====== -->
        <springProfile name="test"><!-- 由application.yml中的spring.profiles.active配置 -->
            <root level="INFO">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="INFO_FILE"/>
                <appender-ref ref="ERROR_FILE"/>
            </root>
        </springProfile>
    
        <!-- ======生产环境:打印控制台和输出到文件====== -->
        <springProfile name="prod"><!-- 由application.yml中的spring.profiles.active配置 -->
            <root level="INFO">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="INFO_FILE"/>
                <appender-ref ref="ERROR_FILE"/>
            </root>
        </springProfile>
    </configuration>
    

    自定义日志级别显示的颜色

    package com.example.datasource.config;
    
    import ch.qos.logback.classic.Level;
    import ch.qos.logback.classic.spi.ILoggingEvent;
    import ch.qos.logback.core.pattern.color.ANSIConstants;
    import ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase;
    
    public class LogbackColorful extends ForegroundCompositeConverterBase<ILoggingEvent> {
        @Override
        protected String getForegroundColorCode(ILoggingEvent event) {
            Level level = event.getLevel();
            switch (level.toInt()){
                //ERROR等级为红色
                case Level.ERROR_INT:
                    return ANSIConstants.RED_FG;
                //WARN等级为黄色
                case Level.WARN_INT:
                    return ANSIConstants.YELLOW_FG;
                //INFO等级为蓝色
                case Level.INFO_INT:
                    return ANSIConstants.BLUE_FG;
                //DEBUG等级为绿色
                case Level.DEBUG_INT:
                    return ANSIConstants.GREEN_FG;
                //其他为默认颜色
                default:
                    return ANSIConstants.DEFAULT_FG;
            }
        }
    }
    
  • 相关阅读:
    swagger Unable to render this definition
    企业应用向ASP.NET Core迁移
    .NET Core EF框架使用SQL server 2008数据库分页问题:Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement
    .NET Core应用中使用分布式缓存及内存缓存
    .NET Core Session的使用方法
    .NET Core 2.1中的HttpClientFactory最佳实践
    转载:ZooKeeper Programmer's Guide(中文翻译)
    Python【map、reduce、filter】内置函数使用说明(转载)
    Python使用基础
    Redis Sentinel:集群Failover解决方案(转载)
  • 原文地址:https://www.cnblogs.com/yloved/p/14469486.html
Copyright © 2011-2022 走看看