Spring log4j2.xml推荐配置
1.配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | <?xml version= "1.0" encoding= "UTF-8" ?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status= "WARN" monitorInterval= "1800" > <Properties> <!-- ==============================================公共配置============================================== --> <!-- 设置日志文件的目录名称 --> <property name= "logFileName" >qfxLog4jDemoLog</property> <!-- 日志默认存放的位置,可以设置为项目根路径下,也可指定绝对路径 --> <!-- 存放路径一:通用路径,window平台 --> <!-- <property name= "basePath" >d:/logs/${logFileName}</property> --> <!-- 存放路径二:web工程专用,java项目没有这个变量,需要删掉,否则会报异常,这里把日志放在web项目的根目录下 --> <!-- <property name= "basePath" >${web:rootDir}/${logFileName}</property> --> <!-- 存放路径三:web工程专用,java项目没有这个变量,需要删掉,否则会报异常,这里把日志放在tocmat的logs目录下 --> <property name= "basePath" >${sys:catalina.home}/logs/${logFileName}</property> <!-- 控制台默认输出格式, "%-5level" :日志级别, "%l" :输出完整的错误位置,是小写的L,因为有行号显示,所以影响日志输出的性能 --> <property name= "console_log_pattern" >%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %l - %m%n</property> <!-- 日志文件默认输出格式,不带行号输出(行号显示会影响日志输出性能);%C:大写,类名;%M:方法名;%m:错误信息;%n:换行 --> <!-- <property name= "log_pattern" >%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M - %m%n</property> --> <!-- 日志文件默认输出格式,另类带行号输出(对日志输出性能未知);%C:大写,类名;%M:方法名;%L:行号;%m:错误信息;%n:换行 --> <property name= "log_pattern" >%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M[%L line] - %m%n</property> <!-- 日志默认切割的最小单位 --> <property name= "every_file_size" >20MB</property> <!-- 日志默认输出级别 --> <property name= "output_log_level" >DEBUG</property> <!-- ===========================================所有级别日志配置=========================================== --> <!-- 日志默认存放路径(所有级别日志) --> <property name= "rolling_fileName" >${basePath}/all.log</property> <!-- 日志默认压缩路径,将超过指定文件大小的日志,自动存入按 "年月" 建立的文件夹下面并进行压缩,作为存档 --> <property name= "rolling_filePattern" >${basePath}/%d{yyyy-MM}/all-%d{yyyy-MM-dd-HH}-%i.log.gz</property> <!-- 日志默认同类型日志,同一文件夹下可以存放的数量,不设置此属性则默认为 7 个,filePattern最后要带%i才会生效 --> <property name= "rolling_max" > 500 </property> <!-- 日志默认同类型日志,多久生成一个新的日志文件,这个配置需要和filePattern结合使用; 如果设置为 1 ,filePattern是%d{yyyy-MM-dd}到天的格式,则间隔一天生成一个文件 如果设置为 12 ,filePattern是%d{yyyy-MM-dd-HH}到小时的格式,则间隔 12 小时生成一个文件 --> <property name= "rolling_timeInterval" > 12 </property> <!-- 日志默认同类型日志,是否对封存时间进行调制,若为 true ,则封存时间将以 0 点为边界进行调整, 如:现在是早上3am,interval是 4 ,那么第一次滚动是在4am,接着是8am,12am...而不是7am --> <property name= "rolling_timeModulate" > true </property> <!-- ============================================Info级别日志============================================ --> <!-- Info日志默认存放路径(Info级别日志) --> <property name= "info_fileName" >${basePath}/info.log</property> <!-- Info日志默认压缩路径,将超过指定文件大小的日志,自动存入按 "年月" 建立的文件夹下面并进行压缩,作为存档 --> <property name= "info_filePattern" >${basePath}/%d{yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz</property> <!-- Info日志默认同一文件夹下可以存放的数量,不设置此属性则默认为 7 个 --> <property name= "info_max" > 100 </property> <!-- 日志默认同类型日志,多久生成一个新的日志文件,这个配置需要和filePattern结合使用; 如果设置为 1 ,filePattern是%d{yyyy-MM-dd}到天的格式,则间隔一天生成一个文件 如果设置为 12 ,filePattern是%d{yyyy-MM-dd-HH}到小时的格式,则间隔 12 小时生成一个文件 --> <property name= "info_timeInterval" > 1 </property> <!-- 日志默认同类型日志,是否对封存时间进行调制,若为 true ,则封存时间将以 0 点为边界进行调整, 如:现在是早上3am,interval是 4 ,那么第一次滚动是在4am,接着是8am,12am...而不是7am --> <property name= "info_timeModulate" > true </property> <!-- ============================================Warn级别日志============================================ --> <!-- Warn日志默认存放路径(Warn级别日志) --> <property name= "warn_fileName" >${basePath}/warn.log</property> <!-- Warn日志默认压缩路径,将超过指定文件大小的日志,自动存入按 "年月" 建立的文件夹下面并进行压缩,作为存档 --> <property name= "warn_filePattern" >${basePath}/%d{yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz</property> <!-- Warn日志默认同一文件夹下可以存放的数量,不设置此属性则默认为 7 个 --> <property name= "warn_max" > 100 </property> <!-- 日志默认同类型日志,多久生成一个新的日志文件,这个配置需要和filePattern结合使用; 如果设置为 1 ,filePattern是%d{yyyy-MM-dd}到天的格式,则间隔一天生成一个文件 如果设置为 12 ,filePattern是%d{yyyy-MM-dd-HH}到小时的格式,则间隔 12 小时生成一个文件 --> <property name= "warn_timeInterval" > 1 </property> <!-- 日志默认同类型日志,是否对封存时间进行调制,若为 true ,则封存时间将以 0 点为边界进行调整, 如:现在是早上3am,interval是 4 ,那么第一次滚动是在4am,接着是8am,12am...而不是7am --> <property name= "warn_timeModulate" > true </property> <!-- ============================================Error级别日志============================================ --> <!-- Error日志默认存放路径(Error级别日志) --> <property name= "error_fileName" >${basePath}/error.log</property> <!-- Error日志默认压缩路径,将超过指定文件大小的日志,自动存入按 "年月" 建立的文件夹下面并进行压缩,作为存档 --> <property name= "error_filePattern" >${basePath}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz</property> <!-- Error日志默认同一文件夹下可以存放的数量,不设置此属性则默认为 7 个 --> <property name= "error_max" > 100 </property> <!-- 日志默认同类型日志,多久生成一个新的日志文件,这个配置需要和filePattern结合使用; 如果设置为 1 ,filePattern是%d{yyyy-MM-dd}到天的格式,则间隔一天生成一个文件 如果设置为 12 ,filePattern是%d{yyyy-MM-dd-HH}到小时的格式,则间隔 12 小时生成一个文件 --> <property name= "error_timeInterval" > 1 </property> <!-- 日志默认同类型日志,是否对封存时间进行调制,若为 true ,则封存时间将以 0 点为边界进行调整, 如:现在是早上3am,interval是 4 ,那么第一次滚动是在4am,接着是8am,12am...而不是7am --> <property name= "error_timeModulate" > true </property> <!-- ============================================控制台显示控制============================================ --> <!-- 控制台显示的日志最低级别 --> <property name= "console_print_level" >DEBUG</property> </Properties> <!--定义appender --> <appenders> <!-- =======================================用来定义输出到控制台的配置======================================= --> <Console name= "Console" target= "SYSTEM_OUT" > <!-- 设置控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level= "${console_print_level}" onMatch= "ACCEPT" onMismatch= "DENY" /> <!-- 设置输出格式,不设置默认为:%m%n --> <PatternLayout pattern= "${console_log_pattern}" /> </Console> <!-- ================================打印root中指定的level级别以上的日志到文件================================ --> <RollingFile name= "RollingFile" fileName= "${rolling_fileName}" filePattern= "${rolling_filePattern}" > <PatternLayout pattern= "${log_pattern}" /> <Policies> <TimeBasedTriggeringPolicy interval= "${rolling_timeInterval}" modulate= "${warn_timeModulate}" /> <SizeBasedTriggeringPolicy size= "${every_file_size}" /> </Policies> <!-- 设置同类型日志,同一文件夹下可以存放的数量,如果不设置此属性则默认存放 7 个文件 --> <DefaultRolloverStrategy max= "${rolling_max}" /> </RollingFile> <!-- =======================================打印INFO级别的日志到文件======================================= --> <RollingFile name= "InfoFile" fileName= "${info_fileName}" filePattern= "${info_filePattern}" > <PatternLayout pattern= "${log_pattern}" /> <Policies> <TimeBasedTriggeringPolicy interval= "${info_timeInterval}" modulate= "${info_timeModulate}" /> <SizeBasedTriggeringPolicy size= "${every_file_size}" /> </Policies> <DefaultRolloverStrategy max= "${info_max}" /> <Filters> <ThresholdFilter level= "WARN" onMatch= "DENY" onMismatch= "NEUTRAL" /> <ThresholdFilter level= "INFO" onMatch= "ACCEPT" onMismatch= "DENY" /> </Filters> </RollingFile> <!-- =======================================打印WARN级别的日志到文件======================================= --> <RollingFile name= "WarnFile" fileName= "${warn_fileName}" filePattern= "${warn_filePattern}" > <PatternLayout pattern= "${log_pattern}" /> <Policies> <TimeBasedTriggeringPolicy interval= "${warn_timeInterval}" modulate= "${warn_timeModulate}" /> <SizeBasedTriggeringPolicy size= "${every_file_size}" /> </Policies> <DefaultRolloverStrategy max= "${warn_max}" /> <Filters> <ThresholdFilter level= "ERROR" onMatch= "DENY" onMismatch= "NEUTRAL" /> <ThresholdFilter level= "WARN" onMatch= "ACCEPT" onMismatch= "DENY" /> </Filters> </RollingFile> <!-- =======================================打印ERROR级别的日志到文件======================================= --> <RollingFile name= "ErrorFile" fileName= "${error_fileName}" filePattern= "${error_filePattern}" > <PatternLayout pattern= "${log_pattern}" /> <Policies> <TimeBasedTriggeringPolicy interval= "${error_timeInterval}" modulate= "${error_timeModulate}" /> <SizeBasedTriggeringPolicy size= "${every_file_size}" /> </Policies> <DefaultRolloverStrategy max= "${error_max}" /> <Filters> <ThresholdFilter level= "FATAL" onMatch= "DENY" onMismatch= "NEUTRAL" /> <ThresholdFilter level= "ERROR" onMatch= "ACCEPT" onMismatch= "DENY" /> </Filters> </RollingFile> </appenders> <!--定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!-- 设置打印sql语句配置开始,以下两者配合使用,可以优化日志的输出信息,减少一些不必要信息的输出 --> <!-- 设置java.sql包下的日志只打印DEBUG及以上级别的日志,此设置可以支持sql语句的日志打印 --> <logger name= "java.sql" level= "DEBUG" additivity= "false" > <appender-ref ref= "Console" /> </logger> <!-- 设置org.mybatis.spring包下的日志只打印WARN及以上级别的日志 --> <logger name= "org.mybatis.spring" level= "WARN" additivity= "false" > <appender-ref ref= "Console" /> </logger> <!-- 设置org.springframework包下的日志只打印WARN及以上级别的日志 --> <logger name= "org.springframework" level= "WARN" additivity= "false" > <appender-ref ref= "Console" /> </logger> <!-- 设置com.qfx.workflow.service包下的日志只打印WARN及以上级别的日志 --> <logger name= "com.qfx.workflow.service" level= "WARN" additivity= "false" > <appender-ref ref= "Console" /> </logger> <!-- 设置打印sql语句配置结束 --> <!--建立一个默认的root的logger--> <root level= "${output_log_level}" > <appender-ref ref= "RollingFile" /> <appender-ref ref= "Console" /> <appender-ref ref= "InfoFile" /> <appender-ref ref= "WarnFile" /> <appender-ref ref= "ErrorFile" /> </root> </loggers> </configuration> |
2.web.xml文件中配置log4j2的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- log4j2设置 ,此处配置适用于Servlet的 3.0 及以上版本使用, 3.0 以下版本另有配置 --> <!-- 如果log4j2.xml放在classpath目录下(即 class 目录),纯web项目中,不需要log4j2的任何配置也能启用日志 --> <!-- 如果不是放在classpath目录下,则需要指定配置文件路径 --> <!-- 如果放在classpath下其他的目录中,即使指定路径也无法找到log4j2.xml --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j2.xml</param-value> <!-- 配置log4j2.xml文件路径在/WEB-INF/目录下,放置在这里可以被加载到文件 --> <!-- <param-value>/WEB-INF/log4j2.xml</param-value> --> </context-param> <listener> <listener- class >org.apache.logging.log4j.web.Log4jServletContextListener</listener- class > </listener> |
3.控制台不打印sql语句解决方案
日志默认输出级别"output_log_level"和控制台显示的日志最低级别"console_print_level"都设置为"DEBUG"即可
1 2 3 4 | <!-- 日志默认输出级别 --> <property name= "output_log_level" >DEBUG</property> <!-- 控制台显示的日志最低级别 --> <property name= "console_print_level" >DEBUG</property> |
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过
2013-11-24 Spring加载Hibernate 映射的几种方式及区别
2010-11-24 List的二种循环速度比较
2010-11-24 java 动态编译源代码
2010-11-24 jvm的内存调优