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個文件,需要自行添加

打印的日志信息:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM