2011-11-23 17 views
20

Jdk günlüğe kaydetme yapılandırması hakkında bir sorum var. Mesajlar için JDK Logging kullanan bir EJB (glassfish'e yerleştirilmiş) var. Therefor böyle bir kod ile adlandırılmış kayıt kullanımı:Java Günlüğü - çıkış kaydediciye özel bir günlük dosyasına nasıl yönlendirilir?

private static Logger logger = Logger.getLogger("org.imixs.workflow"); 
..... 
     logger.fine(" some info..."); 
.... 

ben GlassFish gelen logging.properties Dosya içine aşağıdaki satırı ekleyerek benim logger için loglevel yapılandırabilirsiniz biliyoruz:

..... 
org.imixs.workflow.level=FINE 

Ama kaydedicim için çıkış dosyasını nasıl belirleyebilirim? Tüm iletileri "org.imixs.workflow" adlı kaydediciden ayrı bir dosyaya koymak istiyorum. Mümkün mü? Bir FileHandler kullanmalıdır herhangi bir yardım

cevap

28
FileHandler biraz kafa karıştırıcı desen özelliği bir model çalışma zamanında değiştirilir aşağıdaki özel bileşenleri içeren bir dize oluşan bu

handlers=java.util.logging.FileHandler 
# Default global logging level. 
.level=INFO 

#logging level for the foo.bar package 
foo.bar.level=CONFIG 
java.util.logging.FileHandler.pattern=%h/java%u.log 

kullanılabilir

:

"/" yerel yol adı ayırıcı

"% t" sistem geçici dizini

"% h" "user.home" sistem pervane değeri erty

"% g" döndürülmüş günlükleri

"% u" ayırt etmek nesil numarası benzersiz bir sayı çözmek için çatışmalar

"%%" Tek bir yüzde işareti çevirir "%"

Eğer birden fazla dosya için giriş yapmak istiyorsanız

o zaman birden adında kaydediciler

#FileHandler for file1  
java.util.logging.FileHandler.pattern = logging_property_test.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

#FileHandler for file2 
logging.FileHandler2.pattern = logging_property_test2.log 
logging.FileHandler2.limit = 50000 
FileHandler.count = 1 
logging.FileHandler2.formatter = java.util.logging.SimpleFormatter 


#setting handler for logger1 
logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler 

#setting handler for logger2 
logging.PropertyTestingLogger2.handlers=logging.FileHandler2 

için ayarlanmış birden işleyicileri tarafından yapabiliriz gördüğünüz gibi hile olmasıdır maalesef Java yaratıcıları bekleniyor değildi kimse birden fazla dosya oturum: Özel bir sınıftır ve hiçbir şey yapmaz ama FileHandler

package logging; 

import java.io.IOException; 
import java.util.logging.FileHandler; 

public class FileHandler2 extends FileHandler { 

    public FileHandler2() throws IOException, SecurityException { 
     super(); 
    } 

} 

Arkaplan uzanan bir logging.FileHandler2. o DEĞİL, java.util.logging ile

public class FileHandler extends StreamHandler { 

    private String pattern; 

    private void configure() { 

     String cname = getClass().getName(); 
     pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log"); 
+0

Ancak, bu kalıpları yalnızca adlandırılmış günlükleyicim (org.imixs.workflow) için etkileneceğini belirtmek için nasıl kullanabilirim? Genel sunucu iletilerini uygulamaya özel günlük dosyasına yönlendirmek istemiyorum. – Ralph

+0

Gönderiyi buna göre güncelledim. Örnekte varsayılan günlük seviyesi bilgi olarak ayarlanmıştır, ancak foo.bar paketi –

+0

'u konfigüre eder - ama sorum şu: 'foo.bar' logger'ı için ayrı bir çıktı dosyası ayarlamak mümkündür. Her paket için ayrı bir günlük seviyesi belirtebileceğinizi biliyorum. Ama ayrı günlük dosyaları nasıl tanımlanır? – Ralph

10

için

teşekkürler. Bazı açık örnekler için kaydedicilerin yapılandırılması amacıyla bkz. Example Depot Bkz..

Özellikler dosyasından ayarlamak için these answers'u yararlı bulabilirsiniz.

+3

Ancak bunu yapılandırma dosyasında yapmak da mümkün - bu yüzden kaynak kodumda log dosyası için kodlanmış bir dosya adı belirtmem gerekmiyor mu? – Ralph

3

: Eğer java.util.logging.FileHandler kaynağı bakarsanız desen özelliği sınıf adıyla yüklenmiş olduğundan, bulacaksınız sadece yapılandırma dosyasını değiştirerek mümkündür.Ne yazık ki, FileHandler'ı genişletmeli ve bu işleyiciyi, oturum açmak istediğinizi filtreleyecek şekilde yapılandırmalısınız.

İlgili konular