diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/view/web/template/NamlLogger.java	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,45 @@
+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());
+	}
+}