view src/nabble/view/web/template/NamlLogger.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line source

package nabble.view.web.template;

import java.util.Map;
import java.util.HashMap;
import nabble.model.Init;
import nabble.model.Site;


final class NamlLogger {
	// log size varies between NAML_LOG_SIZE and 2*NAML_LOG_SIZE
	private static final int NAML_LOG_SIZE = Init.get("NAML_LOG_SIZE",1000000);

	private String old = "";
	private final StringBuilder buf = new StringBuilder();

	private NamlLogger() {}

	synchronized void log(String msg) {
		buf.append(msg).append("\r\n");
		if( buf.length() >= NAML_LOG_SIZE ) {
			old = buf.toString();
			buf.setLength(0);
		}
	}

	synchronized String getLog() {
		return old + buf;
	}

	private static final Map<Long,NamlLogger> loggers = new HashMap<Long,NamlLogger>();

	static synchronized NamlLogger getLogger(Site site) {
		Long id = site.getId();
		NamlLogger logger = loggers.get(id);
		if( logger == null ) {
			logger = new NamlLogger();
			loggers.put(id,logger);
		}
		return logger;
	}

	static synchronized void removeLogger(Site site) {
		loggers.remove(site.getId());
	}
}