2012-02-10 83 views
1

我有码头6下运行在Linux上Solr的服务器,我试图建立了Java记录自定义格式,但是我似乎无法得到它认识我的自定义类。我是Java新手,因此可能引用它是我输出我的类或类似的问题。请注意,这几乎是同样的问题,可以发现here,但答案有没有帮助,因为我有一个公共的无参数的构造函数。SolrJetty日志记录 - 如何让自定义日志格式化程序工作?

我的格式如下所示(描述here):

package myapp.solr; 

import java.text.MessageFormat; 
import java.util.Date; 
import java.util.logging.Formatter; 
import java.util.logging.LogRecord; 

public class LogFormatter extends Formatter { 

    private static final MessageFormat fmt = new MessageFormat("{0,date,yyyy-MM-dd HH:mm:ss} {1} [{2}] {3}\n"); 

    public LogFormatter() { 
    super(); 
    } 

    @Override public String format(LogRecord record) { 
    Object[] args = new Object[5]; 
    args[0] = new Date(record.getMillis()); 
    args[1] = record.getLevel(); 
    args[2] = record.getLoggerName() == null ? "root" : record.getLoggerName(); 
    args[3] = record.getMessage(); 
    return fmt.format(args); 
    } 

} 

在我的logging.properties文件,然后我有下面的(以及性能配置文件路径/模式和旋转极限,数):

handlers = java.util.logging.FileHandler 
java.util.logging.FileHandler.formatter = myapp.solr.LogFormatter 

我然后导出我的课到myapp.jar,并把它在lib/ext文件夹中jetty.home(我也试过把它直接lib下,我试图指定的路径,将其与-Djetty.class.path参数)。但是,当我运行我的solr应用程序时,它仍然使用XmlFormatter。我能够成功地将其更改为使用SimpleFormatter,而不是我自己的自定义格式器。

我还创建了进口我LogFormatter,创建一个实例变量,并调用格式化方法并打印结果到控制台测试类,并没有任何问题,即工作在Eclipse中。

如果有帮助,我使用启动的Solr /码头的命令是:

nohup java -DSTOP.PORT=8079 -DSTOP.KEY=secret -Dsolr.solr.home=../solr_home/local -Djava.util.config.file=../solr_home/local/logging.properties -jar start.jar > /var/log/solr/stdout.log 2&>1 & 

所以我在做什么错,为什么会不是用我的自定义格式?

回答

1

得到它的工作多亏了一些有益的建议here。问题在于,在自定义类从lib或lib/ext文件夹加载之前设置了java日志记录,所以我需要将它添加到start.jar中。

我怎么没这是我创造了我自己,我叫org.mortbay.start并添加我的自定义LogFormatter类到一个新的包。 Eclipse从bin/org/mortbay/start文件夹中自动构建LogFormatter.class。然后我打开start.jar文件并添加了我的自定义类,所以我有start.jar/org/mortbay/start/LogFormatter.class。一旦在那里我当时能够设置我的格式化使用:

handlers = java.util.logging.FileHandler 
java.util.logging.FileHandler.formatter = org.mortbay.start.LogFormatter 
相关问题