2012-02-10 112 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 
相關問題