CasualLogOutput.java

package eu.javaexperience.log;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import eu.javaexperience.interfaces.simple.SimpleGet;
import eu.javaexperience.semantic.references.MayNull;
import eu.javaexperience.time.TimeCalc;

public class CasualLogOutput extends RotaLogOutput
{
	protected final String logPrefix;
	protected final SimpleGet<Logger> newDayAllLoglevelWriter;
	
	public CasualLogOutput(String logPrefix, @MayNull SimpleGet<Logger> newDayAllLoglevelWriter)
	{
		this.logPrefix = logPrefix;
		this.newDayAllLoglevelWriter = newDayAllLoglevelWriter;
	}
	
	@Override
	protected File getNextLogfile()
	{
		String s = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
		return new File(logPrefix+s+".log");
	}
	
	public long getNextCutDate()
	{
		return TimeCalc.addToDate
		(
			TimeCalc.setToDate
			(
				new Date(),
				-1,
				-1,
				-1,
				0,
				0,
				0,
				0
			),
		0,
		0,
		1,
		0,
		0,
		0,
		0).getTime()+1000;
	}
	
	protected long nextCutTime = getNextCutDate();
	
	@Override
	protected boolean needCut()
	{
		if(System.currentTimeMillis() >= nextCutTime)
		{
			nextCutTime = getNextCutDate();
			return true;
		}
		else
		{
			return false;
		}
	}
	
	@Override
	protected void afterOpenNewUnit()
	{
		if(null != newDayAllLoglevelWriter)
		{
			Logger LOG = newDayAllLoglevelWriter.get();
			if(null != LOG)
			{
				//kiírunk minden naplózási szintet
				ArrayList<Logger> loggers = new ArrayList<>();
				JavaExperienceLoggingFacility.listIssuedLoggers(loggers);
				LoggingTools.tryLogSimple(LOG, ExtraLogLevel.MANDATORY, "New day, new log file");
				for(Logger l:loggers)
				{
					LoggingTools.tryLogFormat(LOG, ExtraLogLevel.MANDATORY, "Loglevel of %s is %s", l, l.getLogLevel().getLabel());
				}
			}
		}
	}
}