package slstool.utils.logging;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Appender;
import org.apache.log4j.ConsoleAppender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import slstool.utils.ResourceManager;
public final class LoggerWrapper implements Logger
{
private final Logger myLogger;
private volatile Writer writer = null;
private static ConsoleAppender consoleAppender = null;
private boolean mLogToFiles = false;
private static String mLogFilesPath = null;
public LoggerWrapper(final String caLoggerName)
{
synchronized (this)
{
this.myLogger = LoggerFactory.getLogger(caLoggerName);
}
}
public void setLogFilesPath(final String caLogFilesPath)
{
LoggerWrapper.mLogFilesPath = caLogFilesPath;
}
public void setAppender(final Appender consoleAppender)
{
LoggerWrapper.consoleAppender = (ConsoleAppender) consoleAppender;
}
public void setLogToFiles(final boolean caLogToFiles)
{
this.mLogToFiles = caLogToFiles;
}
private void initWriter()
{
if (this.mLogToFiles)
{
try
{
synchronized (this)
{
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = df.format(new Date());
final String logFile = LoggerWrapper.mLogFilesPath + "logfile_" + this.myLogger.getName() + "_" + formattedDate + ".txt";
FileWriter fw = new FileWriter(logFile, true);
this.writer = new PrintWriter(fw, true);
LoggerWrapper.consoleAppender.setWriter(this.writer);
}
}
catch (final Exception ex)
{
ex.printStackTrace();
}
}
}
@Override
public void debug(final String arg0)
{
this.initWriter();
this.myLogger.debug(arg0);
this.close(this.writer);
}
@Override
public void debug(final String arg0, final Object arg1)
{
this.initWriter();
this.myLogger.debug(arg0, arg1);
this.close(this.writer);
}
@Override
public void debug(final String arg0, final Object[] arg1)
{
this.initWriter();
this.myLogger.debug(arg0, arg1);
this.close(this.writer);
}
@Override
public void debug(final String arg0, final Throwable arg1)
{
this.initWriter();
this.myLogger.debug(arg0, arg1);
this.close(this.writer);
}
@Override
public void debug(final Marker arg0, final String arg1)
{
this.initWriter();
this.myLogger.debug(arg0, arg1);
this.close(this.writer);
}
@Override
public void debug(final String arg0, final Object arg1, final Object arg2)
{
this.initWriter();
this.myLogger.debug(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void debug(final Marker arg0, final String arg1, final Object arg2)
{
this.initWriter();
this.myLogger.debug(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void debug(final Marker arg0, final String arg1, final Object[] arg2)
{
this.initWriter();
this.myLogger.debug(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void debug(final Marker arg0, final String arg1, final Throwable arg2)
{
this.initWriter();
this.myLogger.debug(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void debug(final Marker arg0, final String arg1, final Object arg2, final Object arg3)
{
this.initWriter();
this.myLogger.debug(arg0, arg1, arg2, arg3);
this.close(this.writer);
}
@Override
public void error(final String arg0)
{
this.initWriter();
this.myLogger.error(arg0);
this.close(this.writer);
}
@Override
public void error(final String arg0, final Object arg1)
{
this.initWriter();
this.myLogger.error(arg0, arg1);
this.close(this.writer);
}
@Override
public void error(final String arg0, final Object[] arg1)
{
this.initWriter();
this.myLogger.error(arg0, arg1);
this.close(this.writer);
}
@Override
public void error(final String arg0, final Throwable arg1)
{
this.initWriter();
this.myLogger.error(arg0, arg1);
this.close(this.writer);
}
@Override
public void error(final Marker arg0, final String arg1)
{
this.initWriter();
this.myLogger.error(arg0, arg1);
this.close(this.writer);
}
@Override
public void error(final String arg0, final Object arg1, final Object arg2)
{
this.initWriter();
this.myLogger.error(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void error(final Marker arg0, final String arg1, final Object arg2)
{
this.initWriter();
this.myLogger.error(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void error(final Marker arg0, final String arg1, final Object[] arg2)
{
this.initWriter();
this.myLogger.error(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void error(final Marker arg0, final String arg1, final Throwable arg2)
{
this.initWriter();
this.myLogger.error(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void error(final Marker arg0, final String arg1, final Object arg2, final Object arg3)
{
this.initWriter();
this.myLogger.error(arg0, arg1, arg2, arg3);
this.close(this.writer);
}
@Override
public String getName()
{
return this.myLogger.getName();
}
@Override
public void info(final String arg0)
{
this.initWriter();
this.myLogger.info(arg0);
this.close(this.writer);
}
@Override
public void info(final String arg0, final Object arg1)
{
this.initWriter();
this.myLogger.info(arg0, arg1);
this.close(this.writer);
}
@Override
public void info(final String arg0, final Object[] arg1)
{
this.initWriter();
this.myLogger.info(arg0, arg1);
this.close(this.writer);
}
@Override
public void info(final String arg0, final Throwable arg1)
{
this.initWriter();
this.myLogger.info(arg0, arg1);
this.close(this.writer);
}
@Override
public void info(final Marker arg0, final String arg1)
{
this.initWriter();
this.myLogger.info(arg0, arg1);
this.close(this.writer);
}
@Override
public void info(final String arg0, final Object arg1, final Object arg2)
{
this.initWriter();
this.myLogger.info(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void info(final Marker arg0, final String arg1, final Object arg2)
{
this.initWriter();
this.myLogger.info(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void info(final Marker arg0, final String arg1, final Object[] arg2)
{
this.initWriter();
this.myLogger.info(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void info(final Marker arg0, final String arg1, final Throwable arg2)
{
this.initWriter();
this.myLogger.info(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void info(final Marker arg0, final String arg1, final Object arg2, final Object arg3)
{
this.initWriter();
this.myLogger.info(arg0, arg1, arg2, arg3);
this.close(this.writer);
}
@Override
public boolean isDebugEnabled()
{
return this.myLogger.isDebugEnabled();
}
@Override
public boolean isDebugEnabled(final Marker arg0)
{
return this.myLogger.isDebugEnabled(arg0);
}
@Override
public boolean isErrorEnabled()
{
return this.myLogger.isErrorEnabled();
}
@Override
public boolean isErrorEnabled(final Marker arg0)
{
return this.myLogger.isErrorEnabled(arg0);
}
@Override
public boolean isInfoEnabled()
{
return this.myLogger.isInfoEnabled();
}
@Override
public boolean isInfoEnabled(final Marker arg0)
{
return this.myLogger.isInfoEnabled(arg0);
}
@Override
public boolean isTraceEnabled()
{
return this.myLogger.isTraceEnabled();
}
@Override
public boolean isTraceEnabled(final Marker arg0)
{
return this.myLogger.isTraceEnabled();
}
@Override
public boolean isWarnEnabled()
{
return this.myLogger.isWarnEnabled();
}
@Override
public boolean isWarnEnabled(final Marker arg0)
{
return this.myLogger.isWarnEnabled(arg0);
}
@Override
public void trace(final String arg0)
{
this.initWriter();
this.myLogger.trace(arg0);
this.close(this.writer);
}
@Override
public void trace(final String arg0, final Object arg1)
{
this.initWriter();
this.myLogger.trace(arg0, arg1);
this.close(this.writer);
}
@Override
public void trace(final String arg0, final Object[] arg1)
{
this.initWriter();
this.myLogger.trace(arg0, arg1);
this.close(this.writer);
}
@Override
public void trace(final String arg0, final Throwable arg1)
{
this.initWriter();
this.myLogger.trace(arg0, arg1);
this.close(this.writer);
}
@Override
public void trace(final Marker arg0, final String arg1)
{
this.initWriter();
this.myLogger.trace(arg0, arg1);
this.close(this.writer);
}
@Override
public void trace(final String arg0, final Object arg1, final Object arg2)
{
this.initWriter();
this.myLogger.trace(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void trace(final Marker arg0, final String arg1, final Object arg2)
{
this.initWriter();
this.myLogger.trace(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void trace(final Marker arg0, final String arg1, final Object[] arg2)
{
this.initWriter();
this.myLogger.trace(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void trace(final Marker arg0, final String arg1, final Throwable arg2)
{
this.initWriter();
this.myLogger.trace(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void trace(final Marker arg0, final String arg1, final Object arg2, final Object arg3)
{
this.initWriter();
this.myLogger.trace(arg0, arg1, arg2, arg3);
this.close(this.writer);
}
@Override
public void warn(final String arg0)
{
this.initWriter();
this.myLogger.warn(arg0);
this.close(this.writer);
}
@Override
public void warn(final String arg0, final Object arg1)
{
this.initWriter();
this.myLogger.warn(arg0, arg1);
this.close(this.writer);
}
@Override
public void warn(final String arg0, final Object[] arg1)
{
this.initWriter();
this.myLogger.warn(arg0, arg1);
this.close(this.writer);
}
@Override
public void warn(final String arg0, final Throwable arg1)
{
this.initWriter();
this.myLogger.warn(arg0, arg1);
this.close(this.writer);
}
@Override
public void warn(final Marker arg0, final String arg1)
{
this.initWriter();
this.myLogger.warn(arg0, arg1);
this.close(this.writer);
}
@Override
public void warn(final String arg0, final Object arg1, final Object arg2)
{
this.initWriter();
this.myLogger.warn(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void warn(final Marker arg0, final String arg1, final Object arg2)
{
this.initWriter();
this.myLogger.warn(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void warn(final Marker arg0, final String arg1, final Object[] arg2)
{
this.initWriter();
this.myLogger.warn(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void warn(final Marker arg0, final String arg1, final Throwable arg2)
{
this.initWriter();
this.myLogger.warn(arg0, arg1, arg2);
this.close(this.writer);
}
@Override
public void warn(final Marker arg0, final String arg1, final Object arg2, final Object arg3)
{
this.initWriter();
this.myLogger.warn(arg0, arg1, arg2, arg3);
this.close(this.writer);
}
public void close(final Writer writer)
{
if (this.mLogToFiles)
{
synchronized (this)
{
ResourceManager.close(writer);
}
}
}
}