Log4j.properties dosyasını nereye koymalıyım?


135

Glassfish v2.1 ile netbeans 6.7.1 kullanarak bir web hizmeti projesi yazdım, log4j.properties'i projenin kök dizinine koydum ve şunu kullandım:

static Logger logger = Logger.getLogger(MyClass.class);

Yapıcıda:

PropertyConfigurator.configure("log4j.properties");

ve işlevlerde:

logger.info("...");
logger.error("...");
// ...

ama, bu hata bilgisidir (aslında, fark edebildiğim hemen hemen her dizini koymaya çalıştım):

log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
        at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
        at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

örnek proje http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8 adresinden alınabilir


2
PropertyConfigurator.configure'un ("log4j.properties") amacı nedir; hat ? Bunu asla kullanmıyorum. Log4j.xml dosyanız yalnızca sınıf yolunuzda "bir yerde" olmalıdır.
Antoine Claval

1
Log4j yapılandırmasının kendisinin nasıl günlüğe kaydedildiğini bulmak için stackoverflow.com/questions/1140358/… adresine bakın . Bunun size çok yardımcı olacağını düşünüyorum, çünkü bazı kapsayıcıların kendi log4j yapılandırması var.
dz.

@AntoineClaval Bu lanetli satırı kaldırdım ve bir cazibe gibi çalıştı. Dostum, ne yolculuk ..
Siddharth

Yanıtlar:


114

Bu soruyu cevaplamak için biraz geç olduğunu biliyorum ve belki de çözümü zaten buldunuz, ancak bulduğum çözümü yayınlıyorum (çok fazla araştırdıktan sonra), bu yüzden biraz yardımcı olabilir:

  1. Log4j.properties dosyasını bu iş parçacığında daha önce belirtildiği gibi projenin WEB-INF \ sınıfları altına koyun.
  2. Log4j-xx.jar dosyasını WEB-INF \ lib altına koyun
  3. Log4j'nin yüklenip yüklenmediğini test edin: tomcat'in -Dlog4j.debugjava seçeneklerinin sonuna @ ekleyin

Umarım bu yardımcı olur.

rgds


Tomcat'i ön plana getirmek için 'çalıştır' komutunu kullanın; java seçeneklerini komut satırı üzerinden geçirebilirsiniz. Ayrıca, bash için -x seçeneği, seçeneklerinize tam olarak ne olduğunu görmek için kullanışlıdır: JAVA_OPTS = -Dlog4j.debug bash -x /usr/local/tomcat/bin/catalina.sh run
RoyM

50

Daha önce de belirtildiği gibi, log4j.properties, sınıf yolunda bulunan bir dizinde olmalıdır, mavize edilmiş bir projede iyi bir yer olabileceğini eklemek istiyorum src/main/resources/log4j.properties


26

Yapılandırma dosyası konumunu VM bağımsız değişkeni -Dlog4j.configuration = "dosya: / C: /workspace3/local/log4j.properties" ile belirtebilirsiniz


bir unix sisteminde file: / veya file: /// veya sadece / yol / dosya mı?
morpheus

Windows için sadece dosya: /, sanırım unix aynıdır
Amalgovinus

Farklı günlük düzeylerine sahip birden çok ortamı hesaba katan tek cevap imo'dur.
Matt

MacOS'ta, Liberty Server'ın jvm.options'ında tırnak işareti kullanmayın ve file: ///
wnm3

Hayal kırıklığından kurtulmanıza yardımcı olabilecek bir güncelleme: log4j2 kullanıyorsanız, bağımsız değişkenin adı şu şekilde değiştirildilog4j.configurationFile
dan.m, 18'19

25

Yürütme bağlamınıza karşılık gelen kök dizine koymanız gerekir.

Misal:

    MyProject
       src
           MyClass.java
           log4j.properties

Yürütmeye farklı bir projeden başlarsanız, yürütmeyi başlatmak için kullanılan projede o dosyaya sahip olmanız gerekir. Örneğin, farklı bir proje bazı JUnit testleri içeriyorsa, log4j.properties dosyasına da sahip olması gerekir.


Log4j.properties yerine log4j.xml kullanmanızı öneririm. Daha fazla seçeneğiniz var, IDE'nizden yardım alın vb.


örneğin, neredeyse her dizine koyuyordum. ancak GF özellikleri doğru dizine kopyalamadığından, Glassfish projeyi dağıtmak yararlı değildir. Görünüşe göre GF onu kaybediyor.
mono

aslında, sorunun ağ fasulyelerinin otomatik konuşlandırılmasından kaynaklandığını düşünüyorum. Yönetici konsolunda savaş dosyasıyla dağıtmaya çalışıyorum, sorun değil. Haklı mıyım bilmiyorum. Haklıysam, netbeans projeyi otomatik olarak dağıtırken neden bu dosyaları dağıtmıyor?
mono

işe yaradı ! ama bu çok zarif değil mi ... "kaynak" türü bir klasöre yerleştirilmesinin daha iyi olduğunu düşünüyor.
Adams. H

17

Maven Tabanlı Proje için log4j.propertiesinizi src / main / kaynaklarda tutun. Yapacak başka bir şey yok!


İşte bu ve Maven Projelerinde XMLConfiguration gibi diğer özellik dosyaları için de aynı. Teşekkürler!
Ramon

13

Log4j.properties dosyasını src içine koyarsanız, ifadeyi kullanmanıza gerek yoktur -

PropertyConfigurator.configure("log4j.properties");

Özellikler dosyası sınıf yolunda olduğu için otomatik olarak alınacaktır.


10

Deneyin:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));

9

Dosya WEB-INF / classes dizininde yer almalıdır. Bu dizin yapısı, savaş dosyası içinde paketlenmelidir.


teoride cevap budur, ancak sorun, log4j.properties'in cam balığı savaş dosyasını konuşlandırdığında kaybolmasıdır.
mono

3
WEB-INF / sınıflarında olmalı ve savaş dosyasında paketlenmelidir
Martin OConnor

@mono - en azından indirilebilir arşivde web / WEB-INF / sınıflarında log4j. özelliği YOKTUR. Martin haklı, olması gereken yer orası.
fvu

İşin püf noktası, kodunuzu oluşturma sürecinde src klasörünüze (kök kaynak klasörünüz) koyun, dosya otomatik olarak sınıflar klasörüne aktarılır ...
Mostafa Zeinali

7

IDE'm NetBeans. Log4j.property dosyasını resimlerde gösterildiği gibi koydum

Kök

projenin kök klasörü

web klasörü

WEB-INF

WEB-INF klasörü

Bu özellik dosyasını kullanmak için şu kodu yazmalısınız:

package example;

import java.io.File;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import javax.servlet.*;
public class test {

public static ServletContext context;
static Logger log = Logger.getLogger("example/test");

public test() {

        String homeDir = context.getRealPath("/");
        File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
        PropertyConfigurator.configure(propertiesFile.toString());
        log.info("This is a test");
    }
}

Statik ServletContext bağlamını başka bir JSP dosyasından tanımlayabilirsiniz . Misal:

test.context = getServletContext(); 
test sample = new test(); 

Artık projelerinizde log4j.property dosyasını kullanabilirsiniz.


5

Teknik olarak doğru birkaç özel yanıt zaten sağlanmıştır, ancak genel olarak, çalışma zamanı sınıf yolunda, yani JVM tarafından sınıfların arandığı her yerde olabilir.

Bu, Eclipse'deki / src dizini veya konuşlandırılmış uygulamanızdaki WEB-INF / classes dizini olabilir, ancak sınıf yolu kavramının ve dosyanın neden buraya yerleştirildiğinin farkında olmak en iyisidir, yalnızca WEB-INF / "sihirli" bir dizin olarak sınıflar.


5

Log4j.properties dosyasının neden görünmediğini anlamak için çok zaman harcadım .
Daha sonra, projenin yalnızca hem MyProject / target / classes / hem de MyProject / src / main / kaynaklar klasörlerindeyken göründüğünü fark ettim .
Birisi için yararlı olacağını umuyorum.
Not: Proje maven tabanlıydı.


3

Glassfish'in varsayılan olarak [Glassfish yükleme konumu] \ glassfish \ domains [etki alanınız] \ 'a varsayılan çalışma dizini olarak baktığını buldum ... log4j.properties dosyasını bu konuma bırakabilir ve PropertyConfigurator kullanarak kodunuzda başlatabilirsiniz. daha önce bahsedildiği gibi...

Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");

1

Bunun doğru yol olduğunu bilmiyorum ama sorunumu çözdü. log4j.properties dosyasını "proje klasörü" / config içine koyun ve PropertyConfigurator.configure ("config // log4j.properties") kullanın;

IDE ile çalışır ancak jar dosyasını kendiniz çalıştırdığınızda çalışmaz. jar dosyasını kendiniz çalıştırdığınızda, log4j.properties dosyasını jar dosyasının bulunduğu klasöre kopyalayın. jar ve özellik dosyası aynı dizinde iyi çalıştığında.


1

Log4j.properties dosyasını sınıf yoluna koyun. İşte doğru konumu belirlemenize yardımcı olacak 2 durum: 1. Web uygulaması için sınıf yolu / WEB-INF / sınıflarıdır.

\WEB-INF      
    classes\
        log4j.properties
  1. Ana / birimden test etmek için sınıf yolu kaynak dizindir.

    \Project\
       src\
          log4j.properties

1

Bunu yapmanın birçok yolu var:

Way1: PropertyConfigurator'ı kullanmadan maven projesinde deniyorsanız

İlk olarak: scr / main'de kaynaklar dizinini kontrol edin

  if available,
       then: create a .properties file and add all configuration details.
  else
       then: create a directory named resources and a file with .properties     
write your configuration code/details.

ekran görüntüsünü takip eder:

! [resim açıklamasını buraya girin

Way2: java / maven projesi için Özellikler dosyasını deniyorsanız PropertyConfigurator'ı kullanın

Özellikler dosyasını projede herhangi bir yere yerleştirin ve doğru yolu verin. demek: src / javaLog4jProperties / log4j.properties

statik{

 PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");

}

görüntü açıklamasını buraya girin

Way3: xml ile java / maven projesinde deniyorsanız DOMConfigurator'ı kullanın

Özellikler dosyasını projede herhangi bir yere yerleştirin ve doğru yolu verin. demek: src / javaLog4jProperties / log4j.xml

statik{

 DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");

}

görüntü açıklamasını buraya girin


1

Standart proje kurulumunuz aşağıdaki gibi bir proje yapısına sahip olacaktır:

src/main/java
src/main/resources

Log4j.properties dosyasını kaynaklar klasörüne yerleştirirsiniz, yoksa kaynaklar klasörünü oluşturabilirsiniz



0

PropertyConfigurator.configure("log4j.properties");Log4j.properties'i proje yapınızda önceden tanımladıysanız, Log4J sınıfınızda belirtmenize gerek yoktur .

Web Dinamik Projesi durumunda: -

Log4j.properties dosyanızı WebContent -> WEB-INF -> log4j.properties altına kaydetmeniz gerekir.

Umarım bu size yardımcı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.