使用logback实现按自己的需求打印日志到自定义的文件里

作者:烛火下的乌托邦丶 时间:2022-05-12 16:56:49 

  • 定义工具类-创建对应的日志对象

  • 定义枚举类-存储定义的日志文件名称

  • logback.xml里配置对应的日志名称和日志等级

1、工具类 LoggerUtils


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerUtils {
   public static <T> Logger Logger(Class<T> clazz) {
       return LoggerFactory.getLogger(clazz);
   }
   /**
    * 打印到指定的文件下
    *
    * @param desc 日志文件名称
    * @return
    */
   public static Logger Logger(LogFileName desc) {
       return LoggerFactory.getLogger(desc.getLogFileName());
   }
}

2、枚举类 LogFileName


import org.apache.commons.lang3.StringUtils;
public enum LogFileName {
   //配置到logback.xml中的logger name="getNextHh"
   GET_NEXT_HH("getNextHh"),
   GET_AGAIN_HH("getAgainHh"),
   GET_AI_ACTION("getAiAction"),
   TRAIN_ERROR("trainError"),
   USER_ERROR("userError"),
   PAY_ERROR("payError"),
   REVIEW_ERROR("reviewError"),
   WX_ERROR("wxError"),
   SYSTEM_ERROR("systemError"),
   PAY_DEBUG("payDebug");
   private String logFileName;
   LogFileName(String fileName) {
       this.logFileName = fileName;
   }
   public String getLogFileName() {
       return logFileName;
   }
   public void setLogFileName(String logFileName) {
       this.logFileName = logFileName;
   }
   public static LogFileName getAwardTypeEnum(String value) {
       LogFileName[] arr = values();
       for (LogFileName item : arr) {
           if (null != item && StringUtils.isNotBlank(item.logFileName)) {
               return item;
           }
       }
       return null;
   }
}

3、logger.xml, 按需配置即可


<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd" debug="false"
              scan="true" scanPeriod="30 second">
   <property name="PROJECT" value="poker_system"/>
   <property name="ROOT" value="C:/Users/Administrator/Desktop/logs/${PROJECT}/"/>
   <property name="FILESIZE" value="50MB"/>
   <property name="MAXHISTORY" value="30"/>
   <!-- 彩色日志 -->
   <!-- 彩色日志依赖的渲染类 -->
   <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}}"/>
   <timestamp key="DATETIME" datePattern="yyyy-MM-dd HH:mm:ss"/>
   <!-- 控制台打印 -->
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
           <charset>UTF-8</charset>
       </encoder>
   </appender>
   <!-- ERROR 输入到文件,按日期和文件大小 -->
   <appender name="ERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <!--过滤器,只打ERROR级别的日志-->
           <level>ERROR</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/error/systemError.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <appender name="TRAINERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <!--过滤器,只打ERROR级别的日志-->
           <level>ERROR</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/error/trainError.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <appender name="USERERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <!--过滤器,只打ERROR级别的日志-->
           <level>ERROR</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/error/userError.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <appender name="PAYERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <!--过滤器,只打ERROR级别的日志-->
           <level>ERROR</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/error/payError.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <appender name="REVIEWERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <!--过滤器,只打ERROR级别的日志-->
           <level>ERROR</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/error/reviewError.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <!-- WARN 输入到文件,按日期和文件大小 -->
   <appender name="WARN-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>WARN</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/warn.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <!-- INFO 输入到文件,按日期和文件大小 -->
   <appender name="INFO-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>INFO</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/info.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <!-- DEBUG 输入到文件,按日期和文件大小 -->
   <appender name="DEBUG-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>DEBUG</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/debug.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <!-- DEBUG 输入到文件,按日期和文件大小 -->
   <appender name="PAYDEBUG-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>DEBUG</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/debug/payDebug.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <!-- TRACE 输入到文件,按日期和文件大小 -->
   <appender name="TRACE-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
       </encoder>
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>TRACE</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>${ROOT}%d/trace.%i.log</fileNamePattern>
           <maxHistory>${MAXHISTORY}</maxHistory>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>${FILESIZE}</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>
   <!-- Logger 根目录 -->
   <root level="INFO">
       <appender-ref ref="STDOUT"/>
       <!--<appender-ref ref="ERROR-OUT"/>-->
       <!--<appender-ref ref="WARN-OUT"/>-->
       <!--<appender-ref ref="INFO-OUT"/>-->
       <!--<appender-ref ref="TRACE-OUT"/>-->
       <!--<appender-ref ref="REVIEWERROR-OUT"/>-->
       <!--<appender-ref ref="PAYDEBUG-OUT"/>-->
       <!--<appender-ref ref="PAYERROR-OUT"/>-->
       <!--<appender-ref ref="USERERROR-OUT"/>-->
       <!--<appender-ref ref="TRAINERROR-OUT"/>-->
   </root>
   <logger name="com.xxx" additivity="false" level="DEBUG">
       <appender-ref ref="DEBUG-OUT"/>
   </logger>
   <logger name="com.xxx" additivity="false" level="ERROR">
       <appender-ref ref="ERROR-OUT"/>
   </logger>
   <logger name="com.xxx" additivity="false" level="INFO">
       <appender-ref ref="INFO-OUT"/>
   </logger>
   <logger name="com.xxx" additivity="false" level="TRACE">
       <appender-ref ref="TRACE-OUT"/>
   </logger>
   <logger name="com.xxx" level="STDOUT">
       <appender-ref ref="STDOUT"/>
       <appender-ref ref="ERROR-OUT"/>
       <appender-ref ref="WARN-OUT"/>
       <appender-ref ref="INFO-OUT"/>
       <appender-ref ref="TRACE-OUT"/>
       <appender-ref ref="REVIEWERROR-OUT"/>
       <appender-ref ref="DEBUG-OUT"/>
       <!--<appender-ref ref="PAYDEBUG-OUT"/>-->
       <appender-ref ref="PAYERROR-OUT"/>
       <appender-ref ref="USERERROR-OUT"/>
       <appender-ref ref="TRAINERROR-OUT"/>
   </logger>
   <!-- 不同的业务逻辑日志打印到指定文件夹-->
   <logger name="trainError" level="ERROR">
       <appender-ref ref="TRAINERROR-OUT"/>
   </logger>
   <logger name="userError" level="ERROR">
       <appender-ref ref="USERERROR-OUT"/>
   </logger>
   <logger name="payError" level="ERROR">
       <appender-ref ref="PAYERROR-OUT"/>
   </logger>
   <logger name="payDebug" additivity="false" level="DEBUG">
       <appender-ref ref="PAYDEBUG-OUT"/>
   </logger>
   <logger name="reviewError" level="ERROR">
       <appender-ref ref="REVIEWERROR-OUT"/>
   </logger>
   <logger name="systemError" level="ERROR">
       <appender-ref ref="ERROR-OUT"/>
   </logger>
</configuration>

来源:https://www.jianshu.com/p/6956ac6fdea9

标签:logback,打印日志,自定义,文件
0
投稿

猜你喜欢

  • Java动态显示文件上传进度实现代码

    2022-09-09 20:18:17
  • Spring boot2.0 日志集成方法分享(1)

    2023-05-12 20:10:25
  • C++索引越界的解决方法

    2023-07-21 21:53:17
  • C#实现Base64处理的加密解密,编码解码示例

    2023-07-15 12:11:31
  • C/C++ 左移<<, 右移>>的作用及说明

    2021-12-30 01:42:59
  • Java Web项目中解决中文乱码方法总结(三种最新方法)

    2023-07-18 18:13:22
  • C#实现Word转换TXT的方法详解

    2022-12-26 04:27:57
  • Spring Boot 动态数据源示例(多数据源自动切换)

    2021-07-03 04:27:02
  • 用SpringBoot+Vue+uniapp小程序实现在线房屋装修管理系统

    2023-11-12 04:10:48
  • 一篇文章弄懂Spring MVC的参数绑定

    2023-09-17 01:01:21
  • java程序中protobuf的基本用法示例

    2022-06-12 07:33:46
  • RandomId生成随机字符串详解实例

    2023-02-19 10:12:47
  • 使用java实现telnet-client工具分享

    2023-10-18 10:56:59
  • 详解Java Spring AOP

    2023-09-06 15:40:02
  • Android连接指定Wifi的方法实例代码

    2022-03-01 06:26:25
  • Spring Boot教程之提高开发效率必备工具lombok

    2021-08-23 11:12:43
  • 关于@RequestLine的使用及配置

    2023-09-23 20:52:19
  • 通过C#程序操作Config文件

    2023-11-30 14:24:06
  • Java 如何将网络资源url转化为File文件

    2023-05-28 09:23:37
  • mybatis-plus update更新操作的三种方式(小结)

    2023-10-08 14:05:08
  • asp之家 软件编程 m.aspxhome.com