GlassFish 3:如何更改(默认)日志记录格式? [英] GlassFish 3: how do you change the (default) logging format?

查看:147
本文介绍了GlassFish 3:如何更改(默认)日志记录格式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题来源于: http:/ /www.java.net/forum/topic/glassfish/glassfish/configuring-glassfish-logging-format - 没有答案。

默认的GlassFish 3日志格式非常烦人,太长了。

  [#| 2012-03-02T09:22:03.165 + 0100 | SEVERE | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | _ThreadID = 113; _ThreadName = AWT-EventQueue的-0; | MESSAGE ...] 

这只是一个可怕的默认IMO。该文档只是解释所有的领域,但不是如何改变格式: http://docs.oracle.com/cd/E18930_01/html/821-2416/abluk.html



请注意,我部署了SLF4J以及我应该选择格式的webapp。



您如何更改记录格式?



仅供参考:

这里的链接已经过时: ...



这里的问题还没有得到解答:如何配置GlassFish日志记录以显示时间戳中的毫秒数? ...



这里发布的内容没有任何结果: HTTP: //www.java.net/forum/topic/glassfish/glassfish/cant-seem-configure- ...



它看起来像GlassFish日志配置是它自己的问题。可以 anybody 帮助吗?

解决方案

解决方案似乎是第一个SO发布:在glassfish中安装日志formater



I我一起砍了一个简单的日志格式器(随意调整):

pre $ import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;

public class JBossAS7LikeFormatter extends SimpleFormatter
{
private final String nl = System.getProperty(line.separator);
private final DateFormat df = new SimpleDateFormat(HH:mm:ss,SSS);

@Override
public synchronized String format(LogRecord lr)
{
StringBuffer sb = new StringBuffer();

//仅限时间
Date dt = new Date();
dt.setTime(lr.getMillis());

sb.append(df.format(dt));
sb.append();

// level(最长是WARNING= 7个字符,空间填充用于电平输出)
String level = lr.getLevel()。getName();

int numSpaces = 7 - level.length();

sb.append(level);

for(int i = 0; i {
sb.append();
}

// package
sb.append([);
sb.append(lr.getSourceClassName());
sb.append(]);

//线程(名称?)
sb.append(();
sb.append(lr.getThreadID());
sb.append ());

//消息
sb.append(formatMessage(lr));
sb.append(nl);

//可选堆栈跟踪
if(lr.getThrown()!= null)
{
try
{
StringWriter sw =新的StringWriter();
PrintWriter pw = new PrintWriter(sw);
lr.getThrown()。printStackTrace(pw);
pw.close();
sb.append(sw.toString());

catch(Exception e)
{
}
}

return sb.toString();
}

}

它甚至修复了双换行问题在Windows机器上。






我通过将JAR放入 domain / lib / ext 起初,但对于较新的尝试,无论原因如何,我现在只会收到一个ClassNotFoundException:

  Mrz 08,2012 9:39:14 AM com.sun.enterprise.admin.launcher.GFLauncherLogger info 
信息:在5毫秒内成功启动。
在Felix平台上启动GlassFish
线程main中的异常java.lang.reflect.InvocationTargetException $ b $ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)$ b $ sun at sun.reflect .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在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 )
由java.lang.NoClassDefFoundError引发:com / sun / enterprise / server / logging / UniformLogFormatter在java.lang.ClassLoader.defineClass1上的
(Native方法)$在java.lang中的
。 ClassLoader.defineClass(ClassLoader.java:791)$ java.util.SecureClassLoader.defineClass(SecureClassLoader.java:142)上的
在java.net.URLClassLoader.defineClass上的
(URLClassLoader.java:449)在java.net.URLClassLoader.access上
$ 100(URLClassLoader.java:71)在java.net.URLClassLoader上
$ 1.run(URLClassLoader.java:361)在java.net.URLClassLoader上
$ 1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)$ b $ 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)
位于java.util.logging.StreamHandler。< init>(StreamHandler.java:94)
位于java.util.logging。 ConsoleHandler。< init>(ConsoleHandler.java:88)
at sun.reflect.NativeConstructorAccessorImpl.new Instance0(本机方法)处是java sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

。 lang.reflect.Constructor.newInstance(Constructor.java:525)$ b $在java.lang.Class.newInstance0(Class.java:372)
在java.lang.Class.newInstance(Class.java: 325)java.util.logging.LogManager中的
$ 3.run(LogManager.java:419)$ java.util.AccessController.doPrivileged中的$ b $(本地方法)$ java.util.logging中的
LogManager.loadLoggerHandlers(LogManager.java:405)$ java.util.logging.LogManager.initializeGlobalHandlers(LogManager.java:1076)
java.util.logging.LogManager.access
(LogManager。 java:148)
在java.util.logging.LogManager $ RootLogger.getHandlers(LogManager.java:1157)
在java.util.logging.Logger.log(Logger.java:521)
在com.sun.logging.LogDomains $ 1.l (LogDomains.java:372)
在java.util.logging.Logger.doLog(Logger.java:543)
在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)
在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
导致:java.lang.ClassNotFoundException:com.sun.enterprise.server。 logging.UniformLogFormatter在java.net.URLClassLoader上
$ 1.run(URLClassLoader.java:366)在java.net.URLClassLoader上
$ 1.run(URLClassLoader.java:355)
at java。 security.AccessController.doPrivileged(本地方法)$ b $在java.net.URLClassLoader.findClass(URLClassLoader.java:354)
在java.lang.ClassLoader.loadClass(ClassLoader.java:423)
在java.lang.ClassLoader.loadClass(ClassLoad er.java:356)
... 53 more
GlassFish运行时完成关闭
命令启动域失败。
DAS已停止。

我看了几次尝试的新格式,但它停止工作 - 很奇怪。 p>

我在原始的GlassFish论坛帖子中附加了JAR。我基本上只是使用我的ZIP工具,并将其重命名为JAR,但这不应该是一个问题(?)。如果有人让它工作(再次)请让我知道。



注意:我使用GlassFish插件来启动/停止服务器,不知道是否这可能是一个问题。



在此处继续讨论GlassFish论坛: http://www.java.net/forum/topic/glassfish/glassfish/configuring-glassfish-logging-格式



PS:对不起,我需要在这里发布堆栈跟踪,因为GF论坛有些破碎。



更新

扩展java.util.logging.SimpleFormatter的确有用。 GlassFish现在生成如下日志条目:

  12:13:02,400 INFO [com.sun.enterprise.web.WebContainer](1 )WEB0172:虚拟服务器[server]加载默认web模块[] 
12:13:07,700 INFO [org.hibernate.validator.util.Version](1)Hibernate Validator 4.2.0.Final
12 :13:08,919 WARNING [null](1)存在多个[2] JMX MBeanServer实例,我们将使用索引为[0]的服务器:[com.sun.enterprise.v3.admin.DynamicInterceptor@1a53cab6]。
12:13:08,920警告[null](1)使用中的JMX MBeanServer:来自索引[0]的[com.sun.enterprise.v3.admin.DynamicInterceptor@1a53cab6]
12:13:08,920警告[null](1)正在使用的JMX MBeanServer:来自索引[1]的[com.sun.jmx.mbeanserver.JmxMBeanServer@2f740f7e]

再一次,在Windows上:没有双重换行符。


The question originated from here: http://www.java.net/forum/topic/glassfish/glassfish/configuring-glassfish-logging-format - without an answer.

The default GlassFish 3 logging format is very annoying, much too long.

[#|2012-03-02T09:22:03.165+0100|SEVERE|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=113;_ThreadName=AWT-EventQueue-0;| MESSAGE... ]

This is just a horrible default IMO. The docs just explain all the fields, but not how to change the format: http://docs.oracle.com/cd/E18930_01/html/821-2416/abluk.html

Note, that I deploy SLF4J along with my webapp which should pick up the format as well.

How do you change the logging format?

FYI:

The links here are outdated: Install log formater in glassfish...

The question here hasn't been answered: How to configure GlassFish logging to show milliseconds in timestamps?...

The posting here resulted in nothing: http://www.java.net/forum/topic/glassfish/glassfish/cant-seem-configure-...

It looks like GlassFish logging configuration is an issue of its own. Can anybody help?

解决方案

The solution seems to be the first SO posting here: Install log formater in glassfish

I've hacked together a simple log formatter (adjust at will):

import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;

public class JBossAS7LikeFormatter extends SimpleFormatter
{
    private final String nl = System.getProperty("line.separator");
    private final DateFormat df = new SimpleDateFormat("HH:mm:ss,SSS");

    @Override
    public synchronized String format(LogRecord lr)
    {
        StringBuffer sb = new StringBuffer();

        // time only
        Date dt = new Date();
        dt.setTime(lr.getMillis());

        sb.append(df.format(dt));
        sb.append(" ");

        // level (longest is "WARNING" = 7 chars, space fill for level output)
        String level = lr.getLevel().getName();

        int numSpaces = 7 - level.length();

        sb.append(level);

        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();
    }

}

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 only keep getting a ClassNotFoundException now:

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.

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

I've attached the JAR as is in my original GlassFish forum post. I've basically just used my ZIP tool and renamed it to JAR, but this shouldn't be a problem (?). If anybody 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.

Please continue any discussions in the GlassFish forum here: http://www.java.net/forum/topic/glassfish/glassfish/configuring-glassfish-logging-format

PS: sorry I needed to post the stack trace here as the GF forum is somewhat broken.

UPDATE:

Extending java.util.logging.SimpleFormatter did the trick. GlassFish now produces log entries like:

12:13:02,400 INFO    [com.sun.enterprise.web.WebContainer] (1) WEB0172: Virtual server [server] loaded default web module []
12:13:07,700 INFO    [org.hibernate.validator.util.Version] (1) Hibernate Validator 4.2.0.Final
12:13:08,919 WARNING [null] (1) Multiple [2] JMX MBeanServer instances exist, we will use the server at index [0] : [com.sun.enterprise.v3.admin.DynamicInterceptor@1a53cab6].
12:13:08,920 WARNING [null] (1) JMX MBeanServer in use: [com.sun.enterprise.v3.admin.DynamicInterceptor@1a53cab6] from index [0] 
12:13:08,920 WARNING [null] (1) JMX MBeanServer in use: [com.sun.jmx.mbeanserver.JmxMBeanServer@2f740f7e] from index [1] 

Again, on Windows: no double newlines.

这篇关于GlassFish 3:如何更改(默认)日志记录格式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆