第一步:添加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个文件,需要自行添加
打印的日志信息: