Package railo.commons.io.log

Source Code of railo.commons.io.log.LogResource

package railo.commons.io.log;


import java.io.IOException;

import railo.commons.io.IOUtil;
import railo.commons.io.res.Resource;

/**
* Simple Logger to log data to a file
*/
public class LogResource implements Log {
   
    private Resource res;


  /**
     * maximum number of files (history of files)
     */
    public static final int MAX_FILES=10;

    private long maxFileSize;
    private int maxFiles;
    private int count=0;
    private int logLevel;
  private String charset;
   
   
    /**
     * Constructor of the Logger
     * @param res resource to log to
     * @param logLevel
     * @throws IOException
     */
    public LogResource(Resource res, int logLevel, String charset) throws IOException {
        this(res,MAX_FILE_SIZE,MAX_FILES,logLevel,charset);
    }
   
    /**
     * Constructor of the Logger
     * @param res resource to log to
     * @param maxFileSize max file size if file is greater creates a backup file of the actuell file and creates a new one.
     * @param logLevel
     * @throws IOException
     */
    public LogResource(Resource res, long maxFileSize, int logLevel, String charset) throws IOException {
        this(res,maxFileSize,MAX_FILES,logLevel,charset);
    }
   
    /**
     * Constructor of the Logger
     * @param res resource to log to
     * @param maxFileSize max file size if file is greater creates a backup file of the actuell file and creates a new one.
     * @param maxFiles max count of files
     * @param logLevel
     * @throws IOException
     */
    public LogResource(Resource res, long maxFileSize, int maxFiles, int logLevel, String charset) throws IOException {
        this.res=res;
        this.maxFileSize=maxFileSize;
        this.maxFiles=maxFiles;
        this.logLevel=logLevel;
        this.charset=charset;
        checkFile();
       
    }
   
   
    /**
     * check files and creates a new one if to great or not exist
     * @throws IOException
     */
    private void checkFile() throws IOException {
        boolean writeHeader=false;
        // create file
        if(!res.exists()) {
            res.createFile(true);
            writeHeader=true;
        }
        else if(res.length()==0) {
            writeHeader=true;
        }
        // creaste new file
        else if(res.length()>maxFileSize) {
            Resource parent = res.getParentResource();
            String name = res.getName();
                       
            for(int i=maxFiles;i>0;i--) {
             
                Resource to=parent.getRealResource(name+"."+i+".bak");
                Resource from=parent.getRealResource(name+"."+(i-1)+".bak");
                if(from.exists()) {
                    if(to.exists())to.delete();
                    from.renameTo(to);
                }
            }
            res.renameTo(parent.getRealResource(name+".1.bak"));
            res=parent.getRealResource(name);//new File(parent,name);
            res.createNewFile();
            writeHeader=true;
        }
        if(writeHeader) {
            writeHeader=false;
            write(LogUtil.getHeader());
        }  
    }

    @Override
    public void log(int level, String application, String message) {
        if(level<logLevel) return;
        count++;
        if(count++>100) {
            try {
                checkFile();
            } catch (IOException e) {}
            count=0;
        }
        String line=LogUtil.getLine(level,application,message);
        write(line);
       
    }
    private void write(String str) {
        try {
            IOUtil.write(res,str,charset,true);
        } catch (IOException e) {}
    }
    @Override
    public void info(String application, String message) {
        log(LEVEL_INFO,application,message);
    }
    @Override
    public void debug(String application, String message) {
        log(LEVEL_DEBUG,application,message);   
    }
    @Override
    public void warn(String application, String message) {
        log(LEVEL_WARN,application,message);
    }
    @Override
    public void error(String application, String message) {
        log(LEVEL_ERROR,application,message);
    }
    @Override
    public void fatal(String application, String message) {
        log(LEVEL_FATAL,application,message);
    }
    /**
     * @return Returns the resource.
     */
    public Resource getResource() {
        return res;
    }

    @Override
    public int getLogLevel() {
        return logLevel;
    }

    @Override
    public void setLogLevel(int level) {
        this.logLevel=level;
    }
   

    @Override
    public String toString(){
      return res.getAbsolutePath();
    }
   
    /**
     * maximum file size of for a log file
     */
    public static final long MAX_FILE_SIZE=1024*1024;
    /**
   * @return the maxFileSize
   */
  public long getMaxFileSize() {
    return maxFileSize;
  }

  /**
   * @return the maxFiles
   */
  public int getMaxFiles() {
    return maxFiles;
  }
}
TOP

Related Classes of railo.commons.io.log.LogResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.