#log4j.rootLogger=[level],[Appender1],[Appender2],[Appender3]....
#这一句的意思就是设置日志输出级别以及输出目的地,可以设置多个输出目的地,
# 以逗号分隔,输出目的地的详细设置为下面的Appender设置.
# 注意:此处设置的Appender名称应与下面详细设置相对应,包括大小写;
# 此处配置了几个Appender,下面就应设置几个。
log4j.rootLogger=DEBUG, STDOUT,INF,ERR,HHT,SL,TCC
# 输出目的地详细设置:
#定义对应输出目的地:log4j.appender.appenderName = fully.qualified.name.of.appender.class.
#### ConsoleAppender:控制台输出 ####
log4j.appender.STDOUT = org.apache.log4j.ConsoleAppender
# 输出到控制台
log4j.appender.STDOUT.Target = System.out
# 指定控制台输出日志级别
log4j.appender.STDOUT.Threshold = INFO
# 默认值是 true, 表示是否立即输出
log4j.appender.STDOUT.ImmediateFlush = true
# 设置编码方式
log4j.appender.STDOUT.Encoding = UTF-8
# 日志输出布局
log4j.appender.STDOUT.layout = org.apache.log4j.PatternLayout
# 如果日志输出布局为PatternLayout 自定义级别,需要使用ConversionPattern指定输出格式
log4j.appender.STDOUT.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p] -%c -%r -%l.%M(%L) | %m%n
#### DailyRollingFileAppender: 指定周期输出到新文件 ####
log4j.appender.INF = org.apache.log4j.DailyRollingFileAppender
# 指定输出文件路径
log4j.appender.INF.File = D:/log/info.log
# 指定输出日志级别
log4j.appender.INF.Threshold = INFO
# 默认为true,意味着输出方式为追加,反之则为覆盖
log4j.appender.INF.Append = true
# 默认值是 true, 表示是否立即输出
log4j.appender.INF.ImmediateFlush = true
# 设置编码方式
log4j.appender.INF.Encoding = UTF-8
# 指定分隔周期:月,周,天,时,分
# '.': 每月
# '.'yyyy-ww: 每周
# '.'yyyy-MM-dd: 每天
# '.'yyyy-MM-dd-a: 每天两次
# '.'yyyy-MM-dd-HH: 每小时
# '.'yyyy-MM-dd-HH-mm: 每分钟
log4j.appender.INF.DatePattern ='.'yyyy-MM-dd-HH-mm
# 日志输出布局
log4j.appender.INF.layout = org.apache.log4j.PatternLayout
# 如果日志输出布局为PatternLayout 自定义级别,需要使用ConversionPattern指定输出格式
log4j.appender.INF.layout.ConversionPattern =DFA-[framework] [%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p] -%c -%r -%l.%M(%L) | %m%n
#### RollingFileAppender: 限定单个文件大小,达到阀值输出到新文件 ####
log4j.appender.ERR = org.apache.log4j.RollingFileAppender
# 指定输出文件路径
log4j.appender.ERR.File = D:/log/error.log
# 指定输出日志级别
log4j.appender.ERR.Threshold = INFO
# 默认为true,意味着输出方式为追加,反之则为覆盖
log4j.appender.ERR.Append = true
# 默认值是 true, 表示是否立即输出
log4j.appender.ERR.ImmediateFlush = true
# 设置编码方式
log4j.appender.ERR.Encoding = UTF-8
# 设置单个文件大小限制
log4j.appender.ERR.MaxFileSize = 2MB
# 设置最大备份文件记录数
log4j.appender.ERR.MaxBackupIndex = 20
# 日志输出布局
log4j.appender.ERR.layout = org.apache.log4j.PatternLayout
# 如果日志输出布局为PatternLayout 自定义级别,需要使用ConversionPattern指定输出格式
log4j.appender.ERR.layout.ConversionPattern =RFA-[framework] [%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p] -%c -%r -%l.%M(%L) | %m%n
####测试输出布局:HTMLLayout ####
log4j.appender.HHT = org.apache.log4j.RollingFileAppender
# 指定输出文件路径
log4j.appender.HHT.File = D:/log/log4jHtml.html
# 指定输出日志级别
log4j.appender.HHT.Threshold = DEBUG
# 默认为true,意味着输出方式为追加,反之则为覆盖
log4j.appender.HHT.Append = true
# 默认值是 true, 表示是否立即输出
log4j.appender.HHT.ImmediateFlush = true
# 设置编码方式
log4j.appender.HHT.Encoding = UTF-8
# 设置单个文件大小限制
log4j.appender.HHT.MaxFileSize = 2MB
# 设置最大备份文件记录数
log4j.appender.HHT.MaxBackupIndex = 20
# 日志输出布局
log4j.appender.HHT.layout = org.apache.log4j.HTMLLayout
####测试输出布局:SimpleLayout ####
log4j.appender.SL = org.apache.log4j.RollingFileAppender
# 指定输出文件路径
log4j.appender.SL.File = D:/log/log4jSL.html
# 指定输出日志级别
log4j.appender.SL.Threshold = INFO
# 默认为true,意味着输出方式为追加,反之则为覆盖
log4j.appender.SL.Append = true
# 默认值是 true, 表示是否立即输出
log4j.appender.SL.ImmediateFlush = true
# 设置编码方式
log4j.appender.SL.Encoding = UTF-8
# 设置单个文件大小限制
log4j.appender.SL.MaxFileSize = 2MB
# 设置最大备份文件记录数
log4j.appender.SL.MaxBackupIndex = 20
# 日志输出布局
log4j.appender.SL.layout = org.apache.log4j.HTMLLayout
####测试输出布局:TTCCLayout ####
log4j.appender.TCC = org.apache.log4j.RollingFileAppender
# 指定输出文件路径
log4j.appender.TCC.File = D:/log/log4jTCC.log
# 指定输出日志级别
log4j.appender.TCC.Threshold = INFO
# 默认为true,意味着输出方式为追加,反之则为覆盖
log4j.appender.TCC.Append = true
# 默认值是 true, 表示是否立即输出
log4j.appender.TCC.ImmediateFlush = true
# 设置编码方式
log4j.appender.TCC.Encoding = UTF-8
# 设置单个文件大小限制
log4j.appender.TCC.MaxFileSize = 2MB
# 设置最大备份文件记录数
log4j.appender.TCC.MaxBackupIndex = 20
# 日志输出布局
log4j.appender.TCC.layout = org.apache.log4j.SimpleLayout
文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义日志文件 输入位置 -->
<property name="log_dir" value="/customize/logs" />
<!-- 日志最大的历史 30天 -->
<property name="maxHistory" value="30"/>
<!-- ConsoleAppender 控制台输出日志 -->
<appender name="STDOUT" class="">
<!-- 对日志进行格式化 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
</encoder>
</appender>
<!-- ERROR级别日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
<appender name="ERROR" class="">
<!-- 过滤器,只记录WARN级别的日志 -->
<filter class="">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
<rollingPolicy class="">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。
<rollingPolicy class="">
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> -->
<!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动
<triggeringPolicy class="">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy> -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- WARN级别日志 appender -->
<appender name="WARN" class="">
<!-- 过滤器,只记录WARN级别的日志 -->
<filter class="">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- INFO级别日志 appender -->
<appender name="INFO" class="">
<!-- 过滤器,只记录INFO级别的日志 -->
<filter class="">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- DEBUG级别日志 appender -->
<appender name="DEBUG" class="">
<!-- 过滤器,只记录DEBUG级别的日志 -->
<filter class="">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- TRACE级别日志 appender -->
<appender name="TRACE" class="">
<!-- 过滤器,只记录ERROR级别的日志 -->
<filter class="">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<logger name="" value="DEBUG" />
<logger name="" value="DEBUG" />
<logger name="" value="DEBUG" />
<logger name="" value="DEBUG" />
<logger name="" value="DEBUG" />
<logger name="" level="DEBUG"/>
<logger name="" value="DEBUG" />
<!-- root级别 DEBUG -->
<root level="debug">
<!-- 控制台输出 -->
<appender-ref ref="STDOUT" />
<!-- 文件输出 -->
<appender-ref ref="ERROR" />
<appender-ref ref="INFO" />
<appender-ref ref="WARN" />
<appender-ref ref="DEBUG" />
<appender-ref ref="TRACE" />
</root>
</configuration>
<?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</contextName>
<springProperty scope="context" name="APP_NAME" source=""/>
<property name="LOG_HOME" value="logs/${APP_NAME}" />
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="" />
<conversionRule conversionWord="wex" converterClass="" />
<conversionRule conversionWord="wEx" converterClass="" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:}){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="">
<!--此日志appender是为开发使用,只配置最低级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="">
<level>DEBUG</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 2. 输出到文件 -->
<appender name="FILE" class="">
<!-- 当前记录的日志文档完整路径 -->
<file>${LOG_HOME}/log.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5level ---[%15.15thread] %-40.40logger{39} : %msg%n%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="">
<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数(非持续运行情况下,15天外不会清理)-->
<maxHistory>15</maxHistory>
<!-- 应对服务非持续偶尔运行,日志清理机制无法触发而导致日志得不到清理的情况-->
<totalSizeCap>500MB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、
以及指定<appender>。<logger>仅有一个name属性,
一个可选的level和一个可选的 addtivity 属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
-->
<!--
root节点是必选节点,用来指定通用的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能设置为INHERITED或者同义词NULL。默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<!-- cloud环境下,去掉nacos的日志打印信息 -->
<logger name="" level="OFF" addtivity="false"> </logger>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
<!-- 本地环境输出至控制台 -->
<!-- 如果使用了 springProfile, 需要将logback.xml名称改为logback-spring.xml-->
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
</configuration>