log4j2 配置(mybatis | 日志分级 | 打印指定类SQL)
2018-01-25 14:13
846 查看
上次急于做个小项目,直接copy一个项目框架,结果上线不到几天,“网管”说日志文件已经几十G了,差点被打死,
原因是把debug模式 把SQL 全部打印出来了,还有日志文件也没设置压缩,这次网上找找资料就改造了一下日志,(我也 一知半解,如有缺陷请留言) 日志采用 log4j2, (据说多线程下性能10倍于 log4j, logback)
1. 在 web.xml 中配置如下:
error > warn > info > debug
这里是做了日志的分级别存储,例如 warn-log 中 配置为
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
表示 如果出现error 的日志 因为 error > warn 所以这个也会记录error级别的日志,所以配置了上面表示不记录error的日志,
由于info ,debug 均小于 warn 所以不会记录,
日志输出的样子:
参数 <DefaultRolloverStrategy max="90" /> 表示 只保留最新的90个压缩文件
<SizeBasedTriggeringPolicy size="10 MB" /> 表示超过10M就会压缩,
TimeBasedTriggeringPolicy 这个参数表示根据时间来触发压缩间隔
大家可以如下代码测试一下 , (可以写for循环打印更多日志)
LogManager.getLogger(); 这里不用写成 LogManager.getLogger(Xxx.class);(我看别人log4j都是这么写,不明嚼栗)
也可以指定 log4j2.xml 中配置的 RollingFile 名字 例如: LogManager.getLogger("info-log");
如果你想测试指定的 包下的SQL日志,或指定类的,
可以如下配置:在 <Loggers> 标签下加入
<appender-ref ref="Console"/> 引用的就是上方打印控制台的日志
TRACE 还会打印查询出的数据。
差点忘记 mybatis配置文件中需要添加
完成了。
原因是把debug模式 把SQL 全部打印出来了,还有日志文件也没设置压缩,这次网上找找资料就改造了一下日志,(我也 一知半解,如有缺陷请留言) 日志采用 log4j2, (据说多线程下性能10倍于 log4j, logback)
1. 在 web.xml 中配置如下:
<!-- log4j2- 配置 begin --> <listener> <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener> <filter> <filter-name>log4jServletFilter</filter-name> <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> </filter> <filter-mapping> <filter-name>log4jServletFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <!-- log4j2- 配置 end -->项目类路径下 ,一般为src/main/resources 添加文件 log4j2.xml ( 对就是这个名字) 内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="OFF" monitorInterval="1800"> <properties> <!-- 下面这二行随意,sys:catalina.home为tomcat的路径,这里的monitor只是我项目的名字 --> <property name="LOG_HOME">${sys:catalina.home}/logs/monitor</property> <property name="FILE_NAME">monitor</property> </properties> <Appenders> <!-- 控制台日志 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%-5level %logger{36} - %msg%n" /> </Console> <!-- error 日志 --> <RollingFile name="error-log" fileName="${LOG_HOME}/${FILE_NAME}_error.log" filePattern="${LOG_HOME}/error/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.%level_log.gz" immediateFlush="true"> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="90" /> </RollingFile> <!-- warn 日志 --> <RollingFile name="warn-log" fileName="${LOG_HOME}/${FILE_NAME}_warn.log" filePattern="${LOG_HOME}/warn/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.%level_log.gz" immediateFlush="true"> <Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="90" /> </RollingFile> <!-- info 日志 --> <RollingFile name="info-log" fileName="${LOG_HOME}/${FILE_NAME}_info.log" filePattern="${LOG_HOME}/info/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.%level_log.gz" immediateFlush="true"> <Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="90" /> </RollingFile> <!-- debug 日志 --> <RollingFile name="debug-log" fileName="${LOG_HOME}/${FILE_NAME}_debug.log" filePattern="${LOG_HOME}/debug/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="true"> <Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="90" /> </RollingFile> </Appenders> <Loggers> <!-- 正式环境↓ 改为 info 级别 --> <Root level="debug"> <!-- 这里是输入到文件--> <appender-ref ref="error-log" /> <appender-ref ref="warn-log" /> <appender-ref ref="info-log" /> <!-- 正式环境 下面 ↓ 两项删除 --> <appender-ref ref="debug-log" /> <appender-ref ref="Console" /> </Root> </Loggers> </Configuration>
error > warn > info > debug
这里是做了日志的分级别存储,例如 warn-log 中 配置为
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
表示 如果出现error 的日志 因为 error > warn 所以这个也会记录error级别的日志,所以配置了上面表示不记录error的日志,
由于info ,debug 均小于 warn 所以不会记录,
日志输出的样子:
参数 <DefaultRolloverStrategy max="90" /> 表示 只保留最新的90个压缩文件
<SizeBasedTriggeringPolicy size="10 MB" /> 表示超过10M就会压缩,
TimeBasedTriggeringPolicy 这个参数表示根据时间来触发压缩间隔
大家可以如下代码测试一下 , (可以写for循环打印更多日志)
@RequestMapping("/log4j2") @Controller public class TestLog4j2Controller { public static final Logger logger = LogManager.getLogger(); @RequestMapping("/debug") public void debug() { logger.debug("ddddddddddddddddddddddddddddddd"); } @RequestMapping("/info") public void info() { logger.info("iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"); } @RequestMapping("/error") public void error() { logger.error("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); } @RequestMapping("/warn") public void warn() { logger.warn("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"); } }
LogManager.getLogger(); 这里不用写成 LogManager.getLogger(Xxx.class);(我看别人log4j都是这么写,不明嚼栗)
也可以指定 log4j2.xml 中配置的 RollingFile 名字 例如: LogManager.getLogger("info-log");
如果你想测试指定的 包下的SQL日志,或指定类的,
可以如下配置:在 <Loggers> 标签下加入
<logger name="com.XXX.monitor.mapping.XXXXMapper" level="TRACE" additivity="false"> <appender-ref ref="Console"/> </logger>name 可以写为指定的类,或者包名, (没测试过正则表达式)
<appender-ref ref="Console"/> 引用的就是上方打印控制台的日志
TRACE 还会打印查询出的数据。
差点忘记 mybatis配置文件中需要添加
<setting name="logImpl" value="LOG4J2"/>还有 相关jar 包
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.10.0</version> </dependency>
完成了。
相关文章推荐
- Mybatis 日志文件配置-打印SQL语句
- 在maven web项目中配置log4j打印日志及Mybatis sql语句
- Mybatis基本配置、日志文件(sql语句)打印
- mybatis打印sql日志配置
- MyBatis笔记之配置输出日志并打印输出SQL语句
- mybatis3.2.8配置log4j2打印sql
- 在maven web项目中配置log4j打印日志及Mybatis sql语句
- 日志框架只打印出Mybatis SQL的配置
- mybatis配置log4j打印sql日志
- spring boot 与mybatis 整合配置 日志打印
- 配置logback使mybatis打印sql
- ssm框架配置log4j打印mybatis的sql语句
- log4j配置打印mybatis sql语句
- mybatis 打印sql语句配置
- Mybatis中在log日志或控制台打印执行的sql
- 如何在控制台打印出mybatis sql语句日志
- java web 项目log 配置 (将log 和hibernate的hql/sql 信息打印到控制台和日志文件中)
- springboot整合mybatis将sql打印到日志
- log4j2配置mybatis日志
- mybatis配置log4j日志输出sql文及sql参数和结果集