package test.singleton;

/**
 * 文件日志类
 *
 */
public class FileLogger implements Logger
{
	private static FileLogger logger;

	private FileLogger()
	{

	}

	public static FileLogger getFileLogger()
	{
		if(logger==null)
		{
			logger = new FileLogger();
		}
		return logger;

	}
	public synchronized void log(String msg) {
		FileUtil futil = new FileUtil();
		futil.writeToFile("log.txt", msg);
	}

}




package test.singleton;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileUtil 
{
	/**
	 * 写文件
	 * @param fileName
	 * @param message
	 */
	public void writeToFile(String fileName,String message)
	{
		try 
		{
			BufferedWriter out = new BufferedWriter(new FileWriter(fileName,true));
			out.write(message);
			out.write("\n");
			out.close();
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}

	}
}




package test.singleton;

/**
 * 日志接口
 *
 */
public interface Logger {
	/**
	 * 日志方法
	 * @param msg
	 */
	public void log(String msg);
}




package test.singleton;

import java.io.IOException;
import java.util.Properties;

/**
 * 日志工厂类
 */
public class LoggerFactory {
	/**
	 * 文件日志是否启用
	 * @return true:启用 false:未启用
	 */
	public boolean isFileLoggingEnabled()
	{

		Properties p = new Properties();
		try
		{
			p.load(ClassLoader.getSystemResourceAsStream("logger.properties"));
			String fileLoggingValue = p.getProperty("FileLogging");
			if(fileLoggingValue.equalsIgnoreCase("ON")==true)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		catch (IOException e) {
			return false;
		}
	}

	/**
	 * 
	 * @return
	 */
	public Logger getLogger()
	{
		if(isFileLoggingEnabled())
		{
			return FileLogger.getFileLogger();
		}
		return null;

	}
}




package test.singleton;

public class LoggerTest {
	public static void main(String[] args)
	{
		LoggerFactory factory = new LoggerFactory();
		Logger logger = factory.getLogger();
		logger.log("Test Message to Log1");
		logger.log("Test Message to Log2");
		logger.log("Test Message to Log3");
	}
}




FileLogging=ON