生产配置模板:(可以作为模板直接使用)
使用该配置会生成两个文件夹 info和error,分别存放info和error级别的日志文件,具体见配置文件。
<!--property用于配置变量,可通过${LOG_PATH} 取对应的值-->
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_PATH" value="c:/mylog/my"/>
<property name="PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss} === [%thread] === %-5level === %logger{50} ==== %msg%n"/>
<property name="CONSOLE_LOG_PATTERN"
value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%5p) | %green(%thread) | %boldMagenta(%logger) | %cyan(%msg%n)"/>
<contextName>logback</contextName>
<!--输出到控制台,一个appender定义一种输出策略,可以定义多个-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--filter中定义要输出的日志级别,例如:输出info级别以上的日志,默认是info-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<!--日志输出编码格式化-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 输出到文件info,日期滚动记录 -->
<appender name="logInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<Prudent>true</Prudent>-->
<!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,所以我们使用下面的策略,可以避免输出 Error 的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--过滤 其他只留info-->
<level>info</level>
<!--匹配到就禁止-->
<onMatch>ACCEPT</onMatch>
<!--没有匹配到就允许-->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy 每天会生成一个日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<fileNamePattern>${LOG_PATH}/info/iot-info-%d{yyyy-MM-dd}.log</fileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<append>true</append>
<!--展示格式 layout-->
<!--<layout class="ch.qos.logback.classic.PatternLayout">-->
<!--<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>-->
<!--</layout>-->
<!--日志输出编码格式化-->
<encoder>
<charset>GBK</charset>
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<!--输出到文件error,日期滚动记录 -->
<appender name="logErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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>${LOG_PATH}/error/iot-error-%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>90</maxHistory>
</rollingPolicy>
<!--追加记录-->
<append>true</append>
<encoder>
<charset>GBK</charset>
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<!--开发环境-->
<springProfile name="dev">
<!--必选节点,用来指定最基础的日志输出级别-->
<root level="DEBUG">
<appender-ref ref="logInfoFile"/>
<appender-ref ref="logErrorFile"/>
<appender-ref ref="console"/>
<!--<appender-ref ref="DBAPPENDER"/>-->
</root>
</springProfile>
<!--生产环境-->
<springProfile name="pro">
<!--必选节点,用来指定最基础的日志输出级别-->
<root level="INFO">
<appender-ref ref="logInfoFile"/>
<appender-ref ref="logErrorFile"/>
<appender-ref ref="console"/>
<!--<appender-ref ref="DBAPPENDER"/>-->
</root>
</springProfile>
<!--日志异步到数据库 -->
<!--<appender name="DBAPPENDER" class="ch.qos.logback.classic.db.DBAppender">-->
<!--<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">-->
<!--<dataSource class="com.zaxxer.hikari.HikariDataSource">-->
<!--<driverClassName>com.mysql.jdbc.Driver</driverClassName>-->
<!--<jdbcUrl>jdbc:mysql://localhost:3306/albedo-new?useUnicode=true&characterEncoding=utf8&useSSL=false</jdbcUrl>-->
<!--<username>root</username>-->
<!--<password>123456</password>-->
<!--<poolName>HikariPool-logback</poolName>-->
<!--</dataSource>-->
<!--</connectionSource>-->
<!--<!– 此日志文件只记录info级别的 –>-->
<!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--<level>warn</level>-->
<!--<onMatch>ACCEPT</onMatch>-->
<!--<onMismatch>DENY</onMismatch>-->
<!--</filter>-->
<!--<!– 此日志文件只记录info级别的 –>-->
<!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--<level>error</level>-->
<!--<onMatch>ACCEPT</onMatch>-->
<!--<onMismatch>DENY</onMismatch>-->
<!--</filter>-->
<!--</appender>-->
转载自https://blog.csdn.net/gexiaoyizhimei/article/details/93907932
根据自己的实际情况略有改动