【超哥原創分享】自定義實現日誌輸出,拋棄任何依賴包,日誌輸出隨心走,棄繁就簡,簡而不凡

簡要說明:

現在日誌輸出框架太多,想找個簡單的用用,結果沒找到.日誌輸出中又不想做任何依賴處理,所以就自己做了一個日誌輸出.完整代碼如下:

package com.liangchao.luckdraw.netty;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 用戶自定義日誌輸出,支持控制檯輸出, 文件輸出,全輸出. 不依賴其他依賴包.
 *
 * @Author: 超哥分享
 * @Email: [email protected]
 * @Description: 其他用戶轉載請添加原始鏈接, 否則侵權.親尊重勞動成果, 交流建議請聯繫本人.謝謝你的支持.
 */
public class Logs {
    
    private String           filePath      = "./";//文件保存路徑
    private String           fileName      = "logs.log";//文件名稱
    private Integer          maxFileSize   = 1024 * 1024 * 10;//文件分割大小
    private String           outStrPrefix  = "❖☛";//輸出前綴
    private Boolean          isConsoleMode = false;//控制檯模式
    private LogsType         logsType      = LogsType.FILE;//輸出位置
    private LogsLevel        logsLevel     = LogsLevel.INFO;//輸出級別
    private String           dateFormatStr = "yyyy-MM-dd HH:mm:ss";//日期格式化
    private SimpleDateFormat dateFormat;//日期格式化
    private StringBuffer     msgCacheData  = new StringBuffer();//日誌信息緩存容器
    private long             readSize      = 1024;//寫入文件更新數據限制大小
    
    /**
     * 默認模式
     */
    public Logs() {
        init();
    }
    
    /**
     * 文件變更模式
     */
    public Logs(String filePath, String fileName) {
        this(filePath, fileName, null, null, null, null, null, null);
    }
    
    /** 輸出變更模式 **/
    public Logs(LogsType logsType, LogsLevel logsLevel) {
        this(null, null, null, null, null, logsType, logsLevel, null);
    }
    
    /**
     * 文件 輸出變更模式
     */
    public Logs(String filePath, String fileName, LogsType logsType, LogsLevel logsLevel) {
        this(filePath, fileName, null, null, null, logsType, logsLevel, null);
    }
    
    /**
     * 自定義日誌 (全參數)
     *
     * @param filePath      文件路徑
     * @param fileName      文件名稱
     * @param maxFileSize   文件分割塊大小
     * @param outStrPrefix  控制檯模式輸出前綴
     * @param isConsoleMode 控制檯模式:true 控制檯方式, false:通常日誌輸出格式
     * @param logsType      輸出日誌類型
     * @param logsLevel     輸出日誌級別
     * @param dateFormatStr 日期時間戳格式化
     */
    public Logs(String filePath, String fileName, Integer maxFileSize, String outStrPrefix, Boolean isConsoleMode, LogsType logsType, LogsLevel logsLevel, String dateFormatStr) {
        if (filePath != null) {
            this.filePath = filePath;
        }
        if (fileName != null) {
            this.fileName = fileName;
        }
        if (maxFileSize != null) {
            this.maxFileSize = maxFileSize;
        }
        if (outStrPrefix != null) {
            this.outStrPrefix = outStrPrefix;
        }
        if (isConsoleMode != null) {
            this.isConsoleMode = isConsoleMode;
        }
        if (logsType != null) {
            this.logsType = logsType;
        }
        if (logsLevel != null) {
            this.logsLevel = logsLevel;
        }
        if (dateFormatStr != null) {
            this.dateFormatStr = dateFormatStr;
        }
        
        init();
    }
    
    /**
     * 允許操作輸出處理
     */
    public boolean allow(LogsLevel logsLevel) {
        // @formatter:off
        if ((this.logsLevel.equals(LogsLevel.INFO)  && logsLevel.equals(LogsLevel.INFO) ) ||
            (this.logsLevel.equals(LogsLevel.DEBUG) && (logsLevel.equals(LogsLevel.INFO)  || logsLevel.equals(LogsLevel.DEBUG))) ||
             this.logsLevel.equals(LogsLevel.ERROR)
        ) {
            // @formatter:on
            return true;
        }
        else {
            return false;
        }
    }
    
    /**
     * debug 輸出
     *
     * @param msg 輸出數據
     */
    public void debug(Object msg) {
        write(LogsLevel.DEBUG, msg);
    }
    
    /**
     * error 輸出
     *
     * @param msg 輸出數據
     */
    public void error(Object msg) {
        write(LogsLevel.ERROR, msg);
    }
    
    /**
     * 執行寫入日誌操作
     */
    private void executeReadFile() throws IOException {
        String path = filePath + fileName;
        if (path == null || path.isEmpty()) {
            throw new LogException("文件路徑無效");
        }
        
        File file = new File(path);
        //文件切片處理
        if (file.exists() && file.length() >= maxFileSize) {
            int    index   = file.getParentFile().listFiles().length + 1;
            String newPath = filePath + fileName.substring(0, fileName.indexOf(".")) + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "-" + index + ".log";
            file.renameTo(new File(newPath));
        }
        
        if (!file.exists()) {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            
            file.createNewFile();
        }
        
        //寫入數據
        BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
        writer.append(msgCacheData.toString());
        writer.flush();
        writer.close();
        
        file   = null;
        writer = null;
        //清空數據
        msgCacheData.setLength(0);
    }
    
    /**
     * 類路徑顯示首字母縮寫
     *
     * @param classPath 類路徑
     */
    public String format(String classPath) {
        if (classPath == null || classPath.isEmpty()) {
            return null;
        }
        
        String   newStr = "";
        String[] split  = classPath.split("\\.");
        for (int i = 0; i < split.length; i++) {
            if (i == split.length - 1) {
                newStr += "." + split[i];
            }
            else {
                newStr += "." + split[i].charAt(0);
            }
        }
        
        return newStr != "" && newStr.length() > 0 ? newStr.substring(1) : null;
    }
    
    /**
     * 獲取:類名(首字母縮寫);方法名;執行行號
     */
    public String getClassInfo() {
        StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
        int                 index              = 3;
        if (stackTraceElements.length >= index) {
            // @formatter:off
            return String.format("[%-20s][%-10s][%-5d]",
                                format(stackTraceElements[index].getClassName()),
                                stackTraceElements[index].getMethodName(),
                                stackTraceElements[index].getLineNumber()
                   );
            // @formatter:on
        }
        else {
            return null;
        }
    }
    
    /**
     * info 輸出
     *
     * @param msg 輸出數據
     */
    public void info(Object msg) {
        write(LogsLevel.INFO, msg);
    }
    
    /**
     * 初始化數
     */
    private void init() {
        dateFormat = new SimpleDateFormat(dateFormatStr);
        
        if (logsType.equals(LogsType.FILE)) {
            //註冊關閉處理事件
            Runtime.getRuntime().addShutdownHook(new Thread() {
                @Override
                public void run() {
                    try {
                        executeReadFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
    
    /**
     * 添加日誌文件信息, 達到readSize 限制後寫入數據(同步)
     */
    private synchronized void readFile(Object msg) {
        msgCacheData.append(msg);
        
        if (msgCacheData.length() >= readSize) {
            try {
                executeReadFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 輸出到文件
     *
     * @param logsLevel 級別
     * @param str       信息
     */
    private void write(LogsLevel logsLevel, Object str) {
        //當單次數據超過分塊大小 異常
        if (this.logsType.equals(LogsType.FILE) && str.toString().length() > this.maxFileSize) {
            throw new LogException("單次輸出數據超出文件分塊大小:" + this.maxFileSize);
        }
        
        String msg;
        //控制檯模式
        if (isConsoleMode) {
            msg = String.format("%-3s%s\n", outStrPrefix, str);
        }
        else {
            // @formatter:off
              msg = String.format("[%s] [%-5s] %-40s:%s\n",
                                dateFormat.format(new Date()),
                                logsLevel.name().toUpperCase(),
                                getClassInfo(),
                                str
                     );
            // @formatter:on
        }
        
        if (logsType.equals(LogsType.CONSOLE) || logsType.equals(LogsType.ALL)) {
            if (allow(logsLevel)) {
                System.out.print(msg);
            }
        }
        
        if (logsType.equals(LogsType.FILE) || logsType.equals(LogsType.ALL)) {
            if (allow(logsLevel)) {
                readFile(msg);
            }
        }
    }
    
    /**
     * 輸出級別
     */
    public enum LogsLevel {
        /** INFO **/
        INFO,
        /** DEBUG **/
        DEBUG,
        /** ERROR **/
        ERROR;
    }
    
    /**
     * 輸出類型
     */
    public enum LogsType {
        /**
         * 控制檯
         */
        CONSOLE,
        /**
         * 文件
         */
        FILE,
        /**
         * 全部
         */
        ALL,
    }
    
    /**
     * 日誌異常
     */
    public class LogException extends RuntimeException {
        public LogException() {
        }
        
        public LogException(String message) {
            super(message);
        }
        
        public LogException(String message, Throwable cause) {
            super(message, cause);
        }
        
        public LogException(Throwable cause) {
            super(cause);
        }
    }
}

測試代碼:

 /**
     * 測試
     */
    @Deprecated
    public static void main(String[] args) {
        Logs logs;
        //默認模式
        logs = new Logs();
        //文件變更模式
        //logs = new Logs("c:\\", "xp.log");
        //輸出變更模式
        //logs = new Logs(LogsType.ALL, LogsLevel.INFO);
        //文件 輸出變更模式
        //logs = new Logs("c:\\", "xp.log", LogsType.CONSOLE, LogsLevel.ERROR);
        //全參數
        //logs = new Logs("c:\\", "xp1.log", 1024 * 1024, ">", false, LogsType.FILE, LogsLevel.ERROR, "yy-MM-dd");
        //Logs logs = new Logs("./logs/");
        int i = 0;
        while (i < 10000) {
            logs.info("我是測試數據1." + i);
            logs.debug("我是測試數據2." + i);
            logs.error("我是測試數據3." + i);
            i++;
        }
    }

輸出效果展示

1. 控制檯輸出

1.格式一

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:C:\JetBrains\IntelliJ IDEA 2019.3\lib\idea_rt.jar=55109:C:\JetBrains\IntelliJ IDEA 2019.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator\ConceptWork\LuckDraw\luckdraw-netty\target\classes;C:\MavenLibDB\com\esotericsoftware\kryo\5.0.0-RC5\kryo-5.0.0-RC5.jar;C:\MavenLibDB\com\esotericsoftware\reflectasm\1.11.8\reflectasm-1.11.8.jar;C:\MavenLibDB\org\objenesis\objenesis\3.0.1\objenesis-3.0.1.jar;C:\MavenLibDB\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\MavenLibDB\io\netty\netty-all\4.1.45.Final\netty-all-4.1.45.Final.jar;C:\MavenLibDB\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar" com.liangchao.luckdraw.netty.Logs
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.0
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.1
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.2
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.3
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.4
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.5
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.6
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.7
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.8
[2020-04-23 15:25:08] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.9

Process finished with exit code 0

2.格式二

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:C:\JetBrains\IntelliJ IDEA 2019.3\lib\idea_rt.jar=55122:C:\JetBrains\IntelliJ IDEA 2019.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator\ConceptWork\LuckDraw\luckdraw-netty\target\classes;C:\MavenLibDB\com\esotericsoftware\kryo\5.0.0-RC5\kryo-5.0.0-RC5.jar;C:\MavenLibDB\com\esotericsoftware\reflectasm\1.11.8\reflectasm-1.11.8.jar;C:\MavenLibDB\org\objenesis\objenesis\3.0.1\objenesis-3.0.1.jar;C:\MavenLibDB\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\MavenLibDB\io\netty\netty-all\4.1.45.Final\netty-all-4.1.45.Final.jar;C:\MavenLibDB\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar" com.liangchao.luckdraw.netty.Logs
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.0
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.0
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.1
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.1
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.2
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.2
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.3
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.3
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.4
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.4
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.5
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.5
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.6
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.6
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.7
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.7
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.8
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.8
[2020-04-23 15:25:57] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.9
[2020-04-23 15:25:57] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.9

Process finished with exit code 0

3.格式三

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:C:\JetBrains\IntelliJ IDEA 2019.3\lib\idea_rt.jar=55135:C:\JetBrains\IntelliJ IDEA 2019.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator\ConceptWork\LuckDraw\luckdraw-netty\target\classes;C:\MavenLibDB\com\esotericsoftware\kryo\5.0.0-RC5\kryo-5.0.0-RC5.jar;C:\MavenLibDB\com\esotericsoftware\reflectasm\1.11.8\reflectasm-1.11.8.jar;C:\MavenLibDB\org\objenesis\objenesis\3.0.1\objenesis-3.0.1.jar;C:\MavenLibDB\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\MavenLibDB\io\netty\netty-all\4.1.45.Final\netty-all-4.1.45.Final.jar;C:\MavenLibDB\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar" com.liangchao.luckdraw.netty.Logs
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.0
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.0
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.0
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.1
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.1
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.1
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.2
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.2
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.2
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.3
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.3
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.3
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.4
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.4
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.4
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.5
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.5
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.5
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.6
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.6
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.6
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.7
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.7
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.7
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.8
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.8
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.8
[2020-04-23 15:26:46] [INFO ] [c.l.l.n.Logs        ][main      ][117  ]:我是測試數據1.9
[2020-04-23 15:26:46] [DEBUG] [c.l.l.n.Logs        ][main      ][118  ]:我是測試數據2.9
[2020-04-23 15:26:46] [ERROR] [c.l.l.n.Logs        ][main      ][119  ]:我是測試數據3.9

Process finished with exit code 0

  1. 控制檯模式
"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:C:\JetBrains\IntelliJ IDEA 2019.3\lib\idea_rt.jar=55166:C:\JetBrains\IntelliJ IDEA 2019.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator\ConceptWork\LuckDraw\luckdraw-netty\target\classes;C:\MavenLibDB\com\esotericsoftware\kryo\5.0.0-RC5\kryo-5.0.0-RC5.jar;C:\MavenLibDB\com\esotericsoftware\reflectasm\1.11.8\reflectasm-1.11.8.jar;C:\MavenLibDB\org\objenesis\objenesis\3.0.1\objenesis-3.0.1.jar;C:\MavenLibDB\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\MavenLibDB\io\netty\netty-all\4.1.45.Final\netty-all-4.1.45.Final.jar;C:\MavenLibDB\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar" com.liangchao.luckdraw.netty.Logs
❖☛ 我是測試數據1.0
❖☛ 我是測試數據2.0
❖☛ 我是測試數據3.0
❖☛ 我是測試數據1.1
❖☛ 我是測試數據2.1
❖☛ 我是測試數據3.1
❖☛ 我是測試數據1.2
❖☛ 我是測試數據2.2
❖☛ 我是測試數據3.2
❖☛ 我是測試數據1.3
❖☛ 我是測試數據2.3
❖☛ 我是測試數據3.3
❖☛ 我是測試數據1.4
❖☛ 我是測試數據2.4
❖☛ 我是測試數據3.4
❖☛ 我是測試數據1.5
❖☛ 我是測試數據2.5
❖☛ 我是測試數據3.5
❖☛ 我是測試數據1.6
❖☛ 我是測試數據2.6
❖☛ 我是測試數據3.6
❖☛ 我是測試數據1.7
❖☛ 我是測試數據2.7
❖☛ 我是測試數據3.7
❖☛ 我是測試數據1.8
❖☛ 我是測試數據2.8
❖☛ 我是測試數據3.8
❖☛ 我是測試數據1.9
❖☛ 我是測試數據2.9
❖☛ 我是測試數據3.9

Process finished with exit code 0

2. 文件模式輸出

在這裏插入圖片描述

3. 文件,控制檯模式輸出

控制檯輸出日誌信息與日誌保存到文件兩者並存.不在做多說明.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章