/* * Log.java * * Copyright (C) 2006-2012 Gabriel Burca (gburca dash virtmus at ebixio dot com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package com.ebixio.util; import com.ebixio.virtmus.stats.StatsLogger; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.logging.FileHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; import java.util.logging.MemoryHandler; import java.util.logging.SimpleFormatter; /** * Log various operational info to var/log/messages.log in the user's * .virtmus directory. * * @author Gabriel Burca <gburca dash virtmus at ebixio dot com> */ public class Log { private static final Logger logger = Logger.getLogger("com.ebixio.virtmus"); private static final boolean ENABLED = true; /** Log an INFO message. * @param msg Message */ public static void log(String msg) { log(msg, Level.INFO, false); } public static void log(Level lev, String msg) { log(msg, lev, false); } public static void log(Level level, String msg, Object param) { logger.log(level, msg, param); } public static void log(String msg, Level lev, boolean printStackDump) { if (!ENABLED) return; //logger.log(lev, getElapsedTime() + " - " + msg); logger.log(lev, msg); if (printStackDump) { logger.log(lev, "{0}\n", getStackTrace()); } } public static void log(Throwable t) { // The stack trace includes the exception info. No need to log it. //log(t.toString()); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); log(sw.toString()); //Exceptions.printStackTrace(t); LogRecord rec = new LogRecord(Level.WARNING, "VirtMus Exception"); rec.setThrown(t); StatsLogger.getLogger().log(rec); // Could also do: //Logger logger = Logger.getLogger("org.netbeans.ui.virtmus"); //logger.log(Level.SEVERE, "Example exception record", t); } public static String getStackTrace() { StringBuilder res = new StringBuilder(); StackTraceElement[] ste = (new Throwable()).getStackTrace(); for (StackTraceElement e: ste) { res.append("Class: ").append(e.getClassName()); res.append(" Method: ").append(e.getMethodName()); res.append(" Line: ").append(e.getLineNumber()).append("\n"); } return res.toString(); } /** Turns on full NetBeans logging for debug purposes. * This creates a VirtMus.log file (typically in the app's var/log directory) * which contains just the SEVERE entries. Everything else can be found in * ~/.virtmus/var/log/messages.log (or build/testuserdir/var/log/messages.log) * and in the IDE log. * * To log to VirtMus.log: * Logger.getLogger("org.netbeans").log(Level.SEVERE, "Test log msg"); */ public static void enableDebugLogs() { // Pick the loggers to enable //Enumeration<String> loggers = LogManager.getLogManager().getLoggerNames(); String[] loggers = { //"org.netbeans.modules.options.OptionsDisplayerImpl", //"org.netbeans.core.windows.services.NbPresenter" //"org.netbeans.ui", //"org.netbeans.modules.uihandler", //"org.netbeans.modules.uihandler.Installer", //"org.netbeans.modules.uihandler.Installer.class", //"com.ebixio.virtmus.metrics", // From branding //"org.netbeans.ui" // From branding }; try { boolean append = false; String fn = StatsLogger.getLogFile("VirtMusDebug-%g.log").getPath(); FileHandler fHandler = new FileHandler(fn, append); fHandler.setFormatter(new SimpleFormatter()); Handler mHandler = new MemoryHandler(fHandler, 1000, Level.SEVERE); Logger log; //log = Logger.getLogger("org.netbeans"); //log.addHandler(mHandler); //log.setLevel(Level.ALL); for (String lgr: loggers) { log = Logger.getLogger(lgr); log.addHandler(mHandler); log.setLevel(Level.ALL); } } catch (IOException | SecurityException ex) { Logger.getLogger("global").log(Level.SEVERE, null, ex); } } }