005 使用log4j2输出日志(重构)
来源:互联网 发布:linux php编译 编辑:程序博客网 时间:2024/06/02 01:12
005 使用log4j2输出日志(重构)
视频发布在youtube上面了
https://youtu.be/0IJPTKJGNhA
优酷上面的链接
http://v.youku.com/v_show/id_XMjc4NzY2NTcyOA==.html?f=49760672
接着004的项目操作。
添加log4j2依赖,这个会自动添加相关依赖包
<!-- 日志依赖 --><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.8.2</version></dependency>
添加log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><!-- status 是否记录log4j2本身的event信息默认OFF print level:TRACE < DEBUG < INFO < WARN < ERROR < FATAL monitorInterval 300秒检查一下配置,如果有变化不需要重启服务,会自动更新--><Configuration package="log4j.test" status="WARN" monitorInterval="300"> <properties> <!-- sys:user.home catalina.base --> <property name="LOG_HOME">${sys:user.home}/logs</property> </properties> <!-- output destination --> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout charset="UTF-8" pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <!-- fileName:当前日志存储路径 filePattern 历史日志存储路径 --> <RollingRandomAccessFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd HH-mm}-%i.log.gz"> <Filters> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" /> </Filters> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <Policies> <!-- 这里的1的单位是filePattern里面的%d{yyyy-MM-dd HH-mm}-%i.log 最小的单位mm表示分钟 --> <TimeBasedTriggeringPolicy interval="1" /> <!-- 日志文件大小 --> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <!-- 最多保留文件数 --> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> <RollingRandomAccessFile name="RollingFileWarn" fileName="${LOG_HOME}/warn.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd HH-mm}-%i.log.gz"> <Filters> <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL" /> </Filters> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <Policies> <!-- 这里的1的单位是filePattern里面的%d{yyyy-MM-dd HH-mm}-%i.log 最小的单位mm表示分钟 --> <TimeBasedTriggeringPolicy interval="1" /> <!-- 日志文件大小 --> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <!-- 最多保留文件数 --> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> <RollingRandomAccessFile name="RollingFileError" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd HH-mm}-%i.log.gz"> <ThresholdFilter level="ERROR" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <Policies> <!-- 这里的1的单位是filePattern里面的%d{yyyy-MM-dd HH-mm}-%i.log 最小的单位mm表示分钟 --> <TimeBasedTriggeringPolicy interval="1" /> <!-- 日志文件大小 --> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <!-- 最多保留文件数 --> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> </Appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 --> <Loggers> <Logger name="com.study.test.TestUser" level="trace" additivity="false"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFileInfo" /> <AppenderRef ref="RollingFileWarn" /> <AppenderRef ref="RollingFileError" /> </Logger> <logger name="org.mybatis" level="trace" additivity="false"> <AppenderRef ref="Console" /> </logger> <Root level="all"> <AppenderRef ref="Console" /> </Root> </Loggers></Configuration>
注意这里Logger后面的name是类的名字,可以根据灵活配置,这里Root设置为all是为了方便看输出信息,正常使用时根据需要配置,additivity是表示会不会叠加输出日志,没有声明的logger都是继承Root的设置,如果没有additivity=false,会输出2次同样的信息
删除24小时之前的日志
<DefaultRolloverStrategy max="24"> <Delete basePath="${MSG_LOG_HOME}" maxDepth="2"> <IfFileName glob="*/msg.*.zip" /> <IfLastModified age="24H" /> </Delete> </DefaultRolloverStrategy>
备注:
1. age的单位:D、H、M、S,分别表示天、小时、分钟、秒
2. basePath表示日志存储的基目录,maxDepth=“1”表示当前目录。因为我们封存的历史日志在basePath里面的backup目录,所以maxDepth设置为2。
在类里面创建一个对象,注意引入的包
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;...private static final Logger logger = LogManager.getLogger(TestUser.class.getName());
调用样例
for (int i = 0; i < 10; ++i){ logger.trace("trace level"); logger.debug("debug level"); logger.info("info level"); logger.warn("warn level"); logger.error("error level"); logger.fatal("fatal level"); try { Thread.sleep(1000 ); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }}
输出类对象格式化使用fastjson
引入依赖包
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.32</version></dependency>
代码里面直接调用即可 logger.info(JSON.toJSONString(user));
这里数据库增加了时间字段,所以json输出的时候需要换个接口
logger.info(JSON.toJSONStringWithDateFormat(user,"yyyy-MM-dd HH:mm:ss"));
修改springMVC.xml里面的druid数据源配置,增加log4j2输出
... <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 配置监控统计拦截的filters,采用log4j2作为日志实现 --> <!-- <property name="filters" value="stat" /> --> <property name="filters" value="mergeStat,log4j2" /></bean>
配置mybatis支持log4j2输出,在resources目录下创建mybatis.xml文件
参考官方网址
http://www.mybatis.org/mybatis-3/configuration.html
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <settings> <!-- 配置日志类,默认是Commons Logging --> <setting name="logImpl" value="LOG4J2" /> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="true" /> <setting name="multipleResultSetsEnabled" value="true" /> <setting name="useColumnLabel" value="true" /> <setting name="useGeneratedKeys" value="false" /> <setting name="defaultExecutorType" value="SIMPLE" /> <setting name="defaultStatementTimeout" value="100" /> <setting name="safeRowBoundsEnabled" value="false" /> <setting name="mapUnderscoreToCamelCase" value="false" /> <setting name="localCacheScope" value="SESSION" /> <setting name="jdbcTypeForNull" value="OTHER" /> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" /> </settings></configuration>
上面的大部分内容都是网上考过来的,具体用途目前还没用到,所以没去研究,只有第一个logImpl是本次要用到的,配置mybatis的日志系统。
还要配置一下springMVC.xml把mybatis的配置文件包含进去,找到如下字段然后添加
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="mapperLocations" value="classpath:com/test/t2/mapping/*.xml"></property> <property name="configLocation" value="classpath:mybatis.xml" /> </bean>
正常就可以看到mybatis的输出信息了
如果有需要交流的,或者有更好的实现方法的同学,欢迎通过电子邮件来互通有无,共同进步。ascomtohom@126.com
- 005 使用log4j2输出日志(重构)
- iBatis使用log4j2输出日志
- Log4j2入门(1)-控制台日志输出
- SpringBoot 配置log4j2日志输出
- SpringBoot Log4j2日志分级输出
- Log4j2使用总结(异步日志)
- 使用log4j2打印日志
- log4j2入门(2)-日志多appender输出
- 使用slf4j + Log4j2构建日志
- log4j2配置输出日志到Kafka
- log4j2日志管理xml配置方式实现日志分类输出
- 日志采集之log4j2.x的使用
- 使用log4j2实现日志数据脱敏
- idea中使用log4j2打印日志
- spring boot 使用log4j2日志工具
- Log4j2介绍和特性实例(三)--日志的异步输出
- Log4j2介绍和特性实例(三)--日志的异步输出
- Log4j2介绍和特性实例(三)--日志的异步输出
- 一文看懂NB-IoT所有猫腻:华为如此青睐的原因?
- Android端上传图片到后台,存储到数据库中 详细代码
- arm linux内核源码级调试器kgdb配置与使用
- [LeetCode]Longest Substring Without Repeating Characters
- DOM模型中的常用对象及其方法?
- 005 使用log4j2输出日志(重构)
- History对象,location对象
- navicat premium连接Oracle几个步骤
- Android代码编写规范
- 字符串函数
- 贪心专题
- location document 对象及属性
- window对象的属性及方法
- location对象、document对象