好用的日志输出工具类,java编写的

最近在做数据的转换处理,过程需要查看处理过程,所以要记录日志,就闲着来写了个日志工具类练练手,觉得用着还可以,贴出来,有需要的小朋友,可以直接拿去用:

package com.project.handlesapdata.material.syncMaterial;

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

/**
 * 
 * @author wangwuji
 * 2019年10月31日 
 * description: 日志输出工具类
 */
public class LogUtil {

    public static void main(String[] args) {
        LogUtil logUtil = new LogUtil();
        logUtil.setMaxLogsize(1);
        while (logUtil.fileIndex<2) {
            logUtil.info("yyyy-MM-dd-HH-mm-ss yyyy-MM-dd-HH-mm-ss yyyy-MM-dd-HH-mm-ss");
        } 
        logUtil.setWriteTimeONConsole(true);
        logUtil.refreshLogFileStorePathConfig("d:/logs/dd");
        while (logUtil.fileIndex<10) {
            logUtil.info("yyyy-MM-dd-HH-mm-ss yyyy-MM-dd-HH-mm-ss yyyy-MM-dd-HH-mm-ss");
        } 
    }

    int fileIndex = 1;
    private String formatStr = "yyyy-MM-dd HH-mm-ss";
    private SimpleDateFormat sdfDirName = new SimpleDateFormat("yyyyMMdd HHmmss");
    private SimpleDateFormat sdfConsoleOupt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private String logFileStorePath=null;
    private String logPath=null;
    private File logFile = null;
    private String originFileName="log.txt";
    private BufferedWriter bw = null;
    private boolean isWriteTimeONConsole=false;
    private boolean isCreateDirParentWithTime=true;
    private long maxSize=1024*1024*5;//文件最大大小,单位字节,大于这个数字后生成第二个日志文件

    public LogUtil() {
        initLogConfig();
    }
    
    public LogUtil(String logFileStorePath) {
        this.logFileStorePath=logFileStorePath;
        initLogConfig();
    }
    
    public LogUtil(String logFileStorePath,String originFileName) {
        this(logFileStorePath);
        this.originFileName=originFileName;
        initLogConfig();
    }
    
    public LogUtil(String logFileStorePath,String originFileName,boolean isWriteTimeONConsole) {
        this(logFileStorePath,originFileName);
        this.isWriteTimeONConsole=isWriteTimeONConsole;
        initLogConfig();
    }
    public LogUtil(String logFileStorePath,String originFileName,
            boolean isWriteTimeONConsole,boolean isCreateDirParentWithTime) {
        this(logFileStorePath,originFileName,isWriteTimeONConsole);
        this.isCreateDirParentWithTime=isCreateDirParentWithTime;
        initLogConfig();
    }
    
    public LogUtil(String logFileStorePath,String originFileName,
            boolean isWriteTimeONConsole,boolean isCreateDirParentWithTime,long maxSize) {
        this(logFileStorePath,originFileName,isWriteTimeONConsole,isCreateDirParentWithTime);
        this.maxSize=maxSize;
        initLogConfig();
    }
    
    private void initLogConfig() {
        initFormatStr(this.formatStr);
        initLogFileStorePath(this.logFileStorePath);
        initLogFile();
    }
    
    

    private void initFormatStr(String formatStr){
        sdfDirName = new SimpleDateFormat(formatStr);
    }
    
    private void initLogFileStorePath(String logFileStorePath){
        if(logFileStorePath==null){
            String currentAbsolutePath=this.getClass().getResource("").getPath();//当前class根路径
            String curDiskRootPath=currentAbsolutePath.substring(1,4);//当前磁盘分区根路径
            logFileStorePath = curDiskRootPath+"/logs";
        }
        if(isCreateDirParentWithTime){
            logPath = logFileStorePath + "/" + sdfDirName.format(new Date());
        }else{
            logPath = logFileStorePath;
        }
    }
    private void initLogFile(){
        File parentDirOflogFile = new File(logPath);
        if (!parentDirOflogFile.exists()) {
            parentDirOflogFile.mkdirs();
        }
        logFile = new File(logPath + "/"+this.originFileName);
        try {
            if (!logFile.exists()) {
                logFile.createNewFile();
            }
            Writer out = new FileWriter(logFile, true);
            bw = new BufferedWriter(out);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void createNewFile() throws IOException {
        String fileName=originFileName.substring(0,originFileName.lastIndexOf("."));
        String subfix = originFileName.substring(originFileName.lastIndexOf("."), originFileName.length());
        String newName = fileName + fileIndex + subfix;
        logFile = new File(logPath + "/" + newName);
        logFile.createNewFile();
        Writer out = new FileWriter(logFile, true);
        bw = new BufferedWriter(out);
        fileIndex++;
    }
    
    public void refreshLogConfig() {
        this.initLogConfig();
    }
    
    public void refreshDateFormatConfig(String formatStr) {
        sdfDirName = new SimpleDateFormat(formatStr);
    }
    
    public void refreshLogFileStorePathConfig(String logFileStorePath) {
        initLogFileStorePath(logFileStorePath);
        initLogFile();
    }

    private void writeToDoc(String str) {
        try {
            if (logFile.length() > maxSize) {
                createNewFile();
            }
            bw.write(str);
            bw.newLine();
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public void newLine() {
        try {
            bw.newLine();
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    
    public String debug(String str) {
        String outputInfo=null;
        if(isWriteTimeONConsole){
            String time = sdfConsoleOupt.format(new Date());
            outputInfo=time + ": " + str;
        }else{
            outputInfo=str;
        }
        System.out.println(outputInfo);
        return outputInfo;
    }
    
    public void info(String str) {
        writeToDoc(debug(str));
    }
    
    private void setFormatStr(String formatStr){
        this.formatStr=formatStr;
    }

    public void setLogFileStorePath(String logFileStorePath) {
        this.logFileStorePath = logFileStorePath;
    }
    
    public String getLogFileStorePath() {
        return logPath;
    }
    
    public void setOriginFileName(String originFileName) {
        this.originFileName=originFileName;
    }
    
    public String getOriginFileName() {
        return  originFileName;
    }
    
    public void setMaxLogsize(int size){
        maxSize=1024*1024*size;
    }
    
    public long getMaxLogsize(){
        return maxSize;
    }

    public boolean isCreateDirParentWithTime() {
        return isCreateDirParentWithTime;
    }

    public void setCreateDirParentWithTime(boolean isCreateDirParentWithTime) {
        this.isCreateDirParentWithTime = isCreateDirParentWithTime;
    }

    public boolean isWriteTimeONConsole() {
        return isWriteTimeONConsole;
    }

    public void setWriteTimeONConsole(boolean isWriteTimeONConsole) {
        this.isWriteTimeONConsole = isWriteTimeONConsole;
    }
}
 

 

代码中我封装了debug和info两个级别的输出,debug只输出到控制台,info输出到控制台同时输出到日志文件中。main方法中有调用的例子,需要的小伙伴,拿去用吧。有好的改进意见也可以提出来评论下,一块儿改进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值