springboot添加log4j日志配置log4j.xml生成日志文件
第一步:添加pom文件依赖
- <!-- log4j -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-log4j</artifactId>
- <version>1.3.8.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.6</version>
- </dependency>
第二步:在resources目录下新建一个log4j.xml文件
log4j.xml:
注:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE log4j:configuration SYSTEM "http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd">
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
- <appender name="CONSOLE-APPENDER" class="org.apache.log4j.ConsoleAppender">
- <param name="encoding" value="UTF-8" />
- <param name="threshold" value="debug"></param>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d %-5p %-32t - %m%n" />
- </layout>
- </appender>
- <appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="file" value="./logs/default.log"/>
- <param name="append" value="true"/>
- <param name="encoding" value="UTF-8"/>
- <param name="threshold" value="debug"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d %-5p %-32t - %m%n"/>
- </layout>
- </appender>
- <appender name="ERROR-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="file" value="./logs/error.log"/>
- <param name="append" value="true"/>
- <param name="encoding" value="UTF-8"/>
- <param name="threshold" value="error"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d %-5p %-32t - %m%n"/>
- </layout>
- </appender>
- <appender name="HOSPITAL-WEB" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="file" value="./logs/web.log" />
- <param name="append" value="true" />
- <param name="encoding" value="UTF-8" />
- <param name="threshold" value="debug" />
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d %-5p %-32t - %m%n" />
- </layout>
- </appender>
- <logger name="yxm.zyf.love" additivity="false"><!-包名->
- <level value="debug" /> <!-debug日志太多了可以改成info级别打印日志->
- <appender-ref ref="HOSPITAL-WEB" />
- <appender-ref ref="ERROR-APPENDER" />
- </logger>
- <!-- <logger name="yxm.zyf.love" additivity="false">
- <level value="debug" />
- <appender-ref ref="CONSOLE-APPENDER" />
- <appender-ref ref="ERROR-APPENDER" />
- <appender-ref ref="DEFAULT-APPENDER" />
- </logger> -->
- <root>
- <level value="debug" />
- <appender-ref ref="CONSOLE-APPENDER" />
- <appender-ref ref="ERROR-APPENDER" />
- <appender-ref ref="DEFAULT-APPENDER" />
- </root>
- </log4j:configuration>
第三步:给大家一个工具类参考一下,封装了4个级别的日志
- import java.text.MessageFormat;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.apache.log4j.Logger;
- /**
- * @author Zhangyufeng
- *
- */
- public class LoggerUtil {
- private static final String TRACE_MARKER = "[TraceId:{0}] ";
- /**
- * 生成trace的模板
- *
- * @param template
- * @param parameters
- * @return
- */
- public static String getMessage(String template, Object... parameters) {
- return MessageFormat.format(TRACE_MARKER, getTraceId()) + MessageFormat.format(template, parameters);
- }
- /**
- * <p>
- * 生成调试级别日志
- * </p>
- * <p>
- * 根据带参数的日志模板和参数集合,生成debug级别日志
- * 带参数的日志模板中以{数字}表示待替换为变量的日志点,如a={0},表示用参数集合中index为0的参数替换{0}处
- * </p>
- *
- * @param logger
- * logger引用
- * @param template
- * 带参数的日志模板
- * @param parameters
- * 参数集合
- */
- public static void debug(Logger logger, String template, Object... parameters) {
- if (logger.isDebugEnabled()) {
- logger.debug(getMessage(template, parameters));
- }
- }
- /**
- * <p>
- * 生成调试级别日志
- * </p>
- * <p>
- * 根据带参数的日志模板和参数集合,生成info级别日志
- * 带参数的日志模板中以{数字}表示待替换为变量的日志点,如a={0},表示用参数集合中index为0的参数替换{0}处
- * </p>
- *
- * @param logger
- * logger引用
- * @param template
- * 带参数的日志模板
- * @param parameters
- * 参数集合
- */
- public static void info(Logger logger, String template, Object... parameters) {
- if (logger.isInfoEnabled()) {
- logger.info(getMessage(template, parameters));
- }
- }
- /**
- * <p>
- * 生成调试级别日志
- * </p>
- * <p>
- * 根据带参数的日志模板和参数集合,生成warn级别日志
- * 带参数的日志模板中以{数字}表示待替换为变量的日志点,如a={0},表示用参数集合中index为0的参数替换{0}处
- * </p>
- *
- * @param logger
- * logger引用
- * @param template
- * 带参数的日志模板
- * @param parameters
- * 参数集合
- */
- public static void warn(Logger logger, String template, Object... parameters) {
- logger.warn(getMessage(template, parameters));
- }
- /**
- * <p>
- * 生成调试级别日志
- * </p>
- * <p>
- * 根据带参数的日志模板和参数集合,生成error级别日志
- * 带参数的日志模板中以{数字}表示待替换为变量的日志点,如a={0},表示用参数集合中index为0的参数替换{0}处
- * </p>
- *
- * @param logger
- * logger引用
- * @param template
- * 带参数的日志模板
- * @param parameters
- * 参数集合
- */
- public static void error(Logger logger, String template, Object... parameters) {
- logger.error(getMessage(template, parameters));
- }
- /**
- * <p>
- * exception日志
- * </p>
- * <p>
- * 根据带参数的日志模板和参数集合,生成warn级别日志
- * 带参数的日志模板中以{数字}表示待替换为变量的日志点,如a={0},表示用参数集合中index为0的参数替换{0}处
- * </p>
- *
- * @param logger
- * logger引用
- * @param template
- * 带参数的日志模板
- * @param parameters
- * 参数集合
- */
- public static void warn(Throwable e, Logger logger, String template, Object... parameters) {
- logger.warn(getMessage(template, parameters), e);
- }
- /**
- * <p>
- * exception日志
- * </p>
- * <p>
- * 根据带参数的日志模板和参数集合,生成error级别日志
- * 带参数的日志模板中以{数字}表示待替换为变量的日志点,如a={0},表示用参数集合中index为0的参数替换{0}处
- * </p>
- *
- * @param logger
- * logger引用
- * @param template
- * 带参数的日志模板
- * @param parameters
- * 参数集合
- */
- public static void error(Throwable e, Logger logger, String template, Object... parameters) {
- logger.error(getMessage(template, parameters), e);
- }
- /**
- * traceid
- *
- * @return
- */
- private static String getTraceId() {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");//格式化对象
- String tempD = sdf.format(new Date());
- return tempD+((int) (Math.random() * 900) + 100);
- }
- }
第四部:创建日志对象
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.log4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- import org.springframework.web.bind.annotation.RestController;
- import com.alibaba.fastjson.JSON;
- import yxm.zyf.love.domian.RoomDO;
- import yxm.zyf.love.mapper.RoomMapper;
- import yxm.zyf.love.utils.LoggerUtil;
- import yxm.zyf.love.utils.StringUtil;
- import yxm.zyf.love.utils.URLencord;
- import yxm.zyf.love.vo.payVo;
- @RestController
- public class hospitalpay {
- private final static Logger logger = Logger.getLogger(hospitalpay.class);//给类初始化日志对象
- @Autowired
- private RoomMapper roomMapper;
- @ResponseBody
- @RequestMapping(value = "pay")
- public void pay(HttpServletRequest req, @RequestBody String a) {
- System.out.println(req.getAttribute("industry"));
- System.out.println(req.getParameter("industry"));
- Map<String, Object> map = StringUtil.transStringToMap(URLencord.URLDecoderString(a), "&", "=");
- for (String key : map.keySet()) {
- System.out.println("key:" + key + ", value:" + map.get(key));
- }
- System.out.println(map);
- System.out.println(JSON.parseObject(JSON.toJSONString(map)));
- payVo payvo=JSON.parseObject(JSON.toJSONString(map), payVo.class);
- System.out.println(payvo);
- }
- @ResponseBody
- @RequestMapping(value = "room")
- public RoomDO room() {
- RoomDO roomdo= roomMapper.selectByPrimaryKey(1);
- LoggerUtil.info(logger, "出参roomdo:{0}", roomdo);//打印info级别的日志
- System.out.println(roomdo);
- return roomdo;
- }
- }
第五步:运行打印日志
会生成3个日志文件,这里只配置了3个文件,需要自行添加
打印的日志信息:
springboot添加log4j日志配置log4j.xml生成日志文件的更多相关文章
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用
log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n ---internationalization 不就是i和n之间有18个字母... http://logging.a ...
- 日志配置log4j 打印线程号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # Set root logger level to WARN and a ...
- 检查REDO日志相关信息并生成HTML文件的脚本
生成HTML格式的文件 内容有: 检查数据库版本.REDO日志组情况, 最近20次日志切换频率检查--日志间的归档时间间隔, 这对查看数据库的IO繁忙时段 统计指定日期当天每小时的归档日志产生量--日 ...
- jquery读取XML 生成页面文件
$.get("../../js/data.xml", function (xml) { $(xml).find("local").each(function ( ...
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- spring boot日志及Log4j日志配置
1.默认实现的日志配置 Spring boot默认已经集成了logging,同时也是默认开启的,如果想根据自己的需求对日志进行配置,方法很简单--只需要在配置文件中进行相应设置,这里提供我自己的配置如 ...
- log4j日志配置和使用
一.日志配置变量参数说明 1. 日志设置说明:# log4j.rootLogger = debug,stdout,D,E# 等号之后的值表示appender对象,每个apperder对象表示一个日志输 ...
- (转)Springboot日志配置(超详细,推荐)
Spring Boot-日志配置(超详细) 更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. Spring Boot-日志配置超详细 默认日志 L ...
- springboot 日志配置
maven依赖中添加了 spring-boot-starter-logging : <dependency> <groupId>org.springframework.boot ...
随机推荐
- 题解——洛谷P1550 [USACO08OCT]打井Watering Hole(最小生成树,建图)
题面 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to his N (1 <= N <= 300) pas ...
- Awesome Torch
Awesome Torch This blog from: A curated list of awesome Torch tutorials, projects and communities. T ...
- (转) How a Kalman filter works, in pictures
How a Kalman filter works, in pictures I have to tell you about the Kalman filter, because what it d ...
- vue的全局方法和局部方法
var infiniteScroll = require('vue-infinite-scroll') 等价写法 import infiniteScroll from 'vue-infinite-sc ...
- JZ2440之GPIO篇
买来开发板已经有一段时间了,刚接触时兴奋至极,后来跟着视频看下去发现似乎自己并没有学到太多东西,于是发现自己可能欠缺的太多以致从课程中无法提取出重要的东西来,所以并没有得到太多的营养成分.因此我个人认 ...
- maven web项目配置log4j,及log4j参数设置
本文为博主原创,转载须注明转载地址: 1.在maven项目中引入相关的依赖: 需要依赖的jar为: <!-- 配置日志 --> <dependency> <groupId ...
- Linux Shell脚本攻略:shell中各种括号()、(())、[]、[[]]、{}的作用
技巧小结: 字符串比较用双中括号[[ ]]:算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) :shell命令及输出用小括号( )——左右不留空格 快速替换用花括号{ }——左右留 ...
- 【三】php 数组
数组 1.数字索引数组:array('a','b','c'); 2.访问数组内容 $arr[下标] 3.新增数组元素 $arr[下标]=内容 4.使用循环访问数组 //针对数字索引 $arr=arr ...
- [原][osg]osg文件与osgb文件的区别
osgb是二进制文件 osg是文本文件 osgb可以通过osgconv.exe转换成osg文件 osgb可以包含纹理文件(就是贴图) osg只能连接外部纹理文件(是的,你看到的cow.osg都是用的外 ...
- Transactional cannot be resolved to a type
SpringBoot整合Mybatis时遇到“ Transactional cannot be resolved to a type ” ,以为是没有导入相应的包 “ import org.sprin ...