ThreadLocalHookableLogFacility.java

package eu.javaexperience.log;

import java.io.IOException;
import java.io.PrintWriter;

import eu.javaexperience.io.IOTools;
import eu.javaexperience.resource.ReferenceCounted;

public class ThreadLocalHookableLogFacility
{
	protected static final ReferenceCounted<PrintWriter> NULL_OUTPUT = new ReferenceCounted<PrintWriter>(IOTools.nullPrintWriter, 1024)
	{
		@Override protected void onFree(){}
	};
	
	public static final LogOutput LOG_OUTPUT = new LogOutput()
	{
		@Override
		public ReferenceCounted<PrintWriter> getLogOutput() throws IOException
		{
			ReferenceCounted<PrintWriter> pw = OUTS.get();
			if(null == pw)
			{
				return NULL_OUTPUT;
			}
			
			pw.acquire();
			return pw;
		}
	};
	
	protected static final ThreadLocal<ReferenceCounted<PrintWriter>> OUTS = new ThreadLocal<>(); 
	
	
	public static ReferenceCounted<PrintWriter> getLocalOutput()
	{
		return OUTS.get();
	}
	
	public static void setLocalOutput(ReferenceCounted<PrintWriter> pw)
	{
		OUTS.set(pw);
	}
}