zoukankan      html  css  js  c++  java
  • 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个文件,需要自行添加

    打印的日志信息:

  • 相关阅读:
    HTML5文件上传前本地预览
    sql(2) DISTINCT
    sql (1)
    delphi 第4课
    delphi 第3课
    Delphi 第2课
    delphi 用户可以点击格式修改进行模板修改
    delphi 流程单打印
    Delphi 第一课
    【BZOJ4530】[Bjoi2014]大融合 LCT维护子树信息
  • 原文地址:https://www.cnblogs.com/zyf-yxm/p/9201202.html
Copyright © 2011-2022 走看看