users@glassfish.java.net

Re: Configuring GlassFish logging format?

From: <forums_at_java.net>
Date: Thu, 8 Mar 2012 03:01:17 -0600 (CST)

The solution seems to be the first SO posting here:
http://stackoverflow.com/questions/3880452/install-log-formater-in-glassfish

I've hacked together a simple log formatter:

[code]package com.kawoolutions.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.LogRecord;
import com.sun.enterprise.server.logging.UniformLogFormatter;
public class JBossAS7LikeLogFormatter extends UniformLogFormatter
{
    private final String nl = System.getProperty("line.separator");
   
    @Override
    public synchronized String format(LogRecord lr)
    {
        StringBuffer sb = new StringBuffer();
        // time only
        Date dt = new Date();
        dt.setTime(lr.getMillis());
       
        sb.append(new SimpleDateFormat("HH:mm:ss,SSS").format(dt));
        sb.append(" ");
        // level (longest is "WARNING" = 7 chars, space fill for level
output)
        String sLevel = lr.getLevel().getName();
        int numSpaces = 7 - sLevel.length();
       
        sb.append(sLevel);
       
        for ( int i = 0 ; i < numSpaces + 1 ; i++ )
        {
            sb.append(" ");
        }
       
        // package
        sb.append("[");
        sb.append(lr.getSourceClassName());
        sb.append("] ");
       
        // thread (name?)
        sb.append("(");
        sb.append(lr.getThreadID());
        sb.append(") ");
       
        // message
        sb.append(formatMessage(lr));
        sb.append(nl);
        // optional stack trace
        if ( lr.getThrown() != null )
        {
            try
            {
                StringWriter sw = new StringWriter();
                PrintWriter pw = new PrintWriter(sw);
                lr.getThrown().printStackTrace(pw);
                pw.close();
                sb.append(sw.toString());
            }
            catch ( Exception e )
            {
            }
        }
       
        return sb.toString();
    }
}[/code]

It even fixes the double newline problem on Windows machines.

I got this to work by putting the JAR into domain/lib/ext *at first*, but for
newer tries, whatever the reason is, I now only keep getting a
ClassNotFoundException:

[code]Mrz 08, 2012 9:39:14 AM
com.sun.enterprise.admin.launcher.GFLauncherLogger info
Information: Successfully launched in 5 msec.
Launching GlassFish on Felix platform
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at
com.sun.enterprise.glassfish.bootstrap.GlassFishMain.main(GlassFishMain.java:97)
    at com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:55)
Caused by: java.lang.NoClassDefFoundError:
com/sun/enterprise/server/logging/UniformLogFormatter
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:410)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at
java.util.logging.LogManager.getFormatterProperty(LogManager.java:1048)
    at java.util.logging.StreamHandler.configure(StreamHandler.java:76)
    at java.util.logging.StreamHandler.<init>(StreamHandler.java:94)
    at java.util.logging.ConsoleHandler.<init>(ConsoleHandler.java:88)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
    at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at java.util.logging.LogManager$3.run(LogManager.java:419)
    at java.security.AccessController.doPrivileged(Native Method)
    at
java.util.logging.LogManager.loadLoggerHandlers(LogManager.java:405)
    at
java.util.logging.LogManager.initializeGlobalHandlers(LogManager.java:1076)
    at java.util.logging.LogManager.access$1100(LogManager.java:148)
    at
java.util.logging.LogManager$RootLogger.getHandlers(LogManager.java:1157)
    at java.util.logging.Logger.log(Logger.java:521)
    at com.sun.logging.LogDomains$1.log(LogDomains.java:372)
    at java.util.logging.Logger.doLog(Logger.java:543)
    at java.util.logging.Logger.log(Logger.java:587)
    at
com.sun.enterprise.server.logging.LogManagerService.postConstruct(LogManagerService.java:354)
    at
com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:131)
    at
com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91)
    at
com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82)
    at
com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67)
    at
com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139)
    at
com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:78)
    at
com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:229)
    at
com.sun.enterprise.v3.server.AppServerStartup.doStart(AppServerStartup.java:145)
    at
com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:136)
    at
com.sun.enterprise.glassfish.bootstrap.GlassFishImpl.start(GlassFishImpl.java:79)
    at
com.sun.enterprise.glassfish.bootstrap.GlassFishDecorator.start(GlassFishDecorator.java:63)
    at
com.sun.enterprise.glassfish.bootstrap.osgi.OSGiGlassFishImpl.start(OSGiGlassFishImpl.java:69)
    at
com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:117)
    ... 6 more
Caused by: java.lang.ClassNotFoundException:
com.sun.enterprise.server.logging.UniformLogFormatter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 53 more
Completed shutdown of GlassFish runtime
Command start-domain failed.
The DAS was stopped.[/code]

I saw the new format for a few tries, but the it stopped to work - strange.

If anybody finds out, please let me know. I've attached the JAR as is, if
anyone gets it to work (again) please let me know.

*Note*: I'm using the GlassFish plugin to start/stop the server, don't know
if this could be an issue.

Karsten


--
[Message sent by forum member 'kwutzke']
View Post: http://forums.java.net/node/883951