मुझे log4j.properties फ़ाइल कहाँ डालनी चाहिए?


135

मैंने ग्लासबिश v2.1 के साथ netbeans 6.7.1 का उपयोग करते हुए एक वेब सेवा परियोजना लिखी, log4j.properties को परियोजना के रूट डायर और उपयोग के लिए रखा:

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

निर्माता में:

PropertyConfigurator.configure("log4j.properties");

और कार्यों में:

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

लेकिन, यह त्रुटि की जानकारी है (वास्तव में, मैंने इसे लगभग हर डीआर में डालने की कोशिश की है जिसे मैं महसूस कर सकता हूं):

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.

उदाहरण परियोजना http://www.91files.com/?N3F0QGQPWMDGPBRN0Q8 से मिल सकती है


2
PropertyConfigurator.configure ("log4j.properties") का उद्देश्य क्या है; रेखा? मैं इस एक का उपयोग कभी नहीं। आपकी log4j.xml फ़ाइल आपके classpath में केवल "कहीं" होनी चाहिए।
एंटोनी क्लैवल

1
को देखो stackoverflow.com/questions/1140358/... लगता है, कैसे log4j विन्यास ही लॉग हो रहा है। मुझे लगता है कि इससे आपको बहुत मदद मिलनी चाहिए, क्योंकि कुछ कंटेनरों का अपना लॉग 4 जे कॉन्फ़िगरेशन होता है।
डी.जे.

@AntoineClaval मैंने उस शापित लाइन को हटा दिया और इसने एक आकर्षण की तरह काम किया। यार, क्या सवारी ..
सिद्धार्थ

जवाबों:


114

मुझे पता है कि इस प्रश्न का उत्तर देने में थोड़ी देर हो गई है, और हो सकता है कि आप पहले से ही इसका हल ढूंढ लें, लेकिन मैं जो समाधान पा रहा हूं उसे पोस्ट कर रहा हूं (मेरे बहुत जाने के बाद) तो यह थोड़ा मदद कर सकता है:

  1. इस धागे में पहले बताए गए प्रोजेक्ट की WEB-INF \ Classes के तहत log4j.properties डालें।
  2. WEB-INF \ lib के तहत log4j-xx.jar रखो
  3. यदि log4j लोड किया गया था तो टेस्ट -Dlog4j.debugकरें: tomcat के अपने जावा विकल्पों के अंत में @ जोड़ें

आशा है कि यह मदद करेगा।

rgds


अग्रभूमि में टॉमकैट प्राप्त करने के लिए 'रन' कमांड का उपयोग करें; आप कमांड लाइन के माध्यम से जावा विकल्पों में पास कर सकते हैं। इसके अलावा, बैश करने के लिए -x विकल्प आपके विकल्पों के साथ वास्तव में क्या होता है, यह देखने के लिए उपयोगी है: JAVA_OPTS = -Dlog4j.debug bash -x
/usr/local/tomcat/bin/catalina.sh

50

जैसा कि पहले ही कहा गया है, log4j.properties एक निर्देशिका में होना चाहिए जो कि क्लासपाथ में शामिल है, मैं उसे जोड़ना चाहता हूं कि एक mavenized प्रोजेक्ट में एक अच्छी जगह हो सकती है src/main/resources/log4j.properties


26

आप VM तर्क -Dlog4j.configuration = "फ़ाइल: / C: /workspace3/local/log4j.properties" के साथ फ़ाइल स्थान निर्दिष्ट कर सकते हैं


क्या यह फाइल है: / या फाइल: /// या जस्ट / पाथ / टू / फाइल एक यूनिक्स सिस्टम पर?
मोरफियस

खिड़कियों के लिए यह सिर्फ फ़ाइल है: /, मैं अनुमान लगा रहा हूँ कि यूनिक्स एक ही है
अमलगोविनस

यह केवल एक ही उत्तर है जो विभिन्न वातावरणों को ध्यान में रखते हुए विभिन्न लॉग स्तरों को लेता है।
मैट

MacOS पर, लिबर्टी सर्वर के jvm.options में उद्धरण और फ़ाइल का उपयोग न करें: ///
wnm3

बस एक अपडेट जो कुछ हताशा को बचाने में मदद कर सकता है: यदि आप log4j2 का उपयोग कर रहे हैं, तो तर्क का नाम बदल दिया गया हैlog4j.configurationFile
dan.m user2321368

25

आपको इसे रूट डायरेक्टरी में रखना होगा, जो आपके निष्पादन के संदर्भ से मेल खाती है।

उदाहरण:

    MyProject
       src
           MyClass.java
           log4j.properties

यदि आप किसी अन्य प्रोजेक्ट से निष्पादित करना शुरू करते हैं, तो आपको निष्पादन शुरू करने के लिए उपयोग किए जाने वाले प्रोजेक्ट में उस फ़ाइल की आवश्यकता होगी। उदाहरण के लिए, यदि कोई भिन्न प्रोजेक्ट कुछ JUnit परीक्षण रखता है, तो उसे अपनी log4j.properties फ़ाइल भी रखनी होगी।


मैं log4j.properties के बजाय log4j.xml का उपयोग करने का सुझाव देता हूं। आपके पास और विकल्प हैं, अपनी आईडीई से सहायता प्राप्त करें इत्यादि ...


उदाहरण के लिए, मैंने इसे लगभग हर निर्देशिका में रखा है। लेकिन यह ग्लासफ़िश की तैनाती परियोजना के लिए उपयोगी नहीं है, क्योंकि GF गुणों को सही निर्देशिका में कॉपी नहीं करते हैं। ऐसा लगता है कि GF इसे खो देती है।
मोनो

वास्तव में, मुझे लगता है कि समस्या नेटबिन की ऑटो-तैनाती से है। मैं व्यवस्थापक कंसोल में युद्ध फ़ाइल द्वारा तैनात करने का प्रयास करता हूं, यह ठीक है। मुझे नहीं पता कि मैं सही था या नहीं। अगर मैं सही था, तो नेटबाइन्स ने इन फाइलों को ऑटो-परिनियोजित करने के लिए क्यों नहीं तैनात किया।
मोनो

इसने काम कर दिया ! लेकिन यह असभ्य नहीं है ... यह लगता है कि यह बेहतर "संसाधन" तरह के फ़ोल्डर में रखा गया है।
एडम्स।

17

मावेन बेस्ड प्रोजेक्ट के लिए अपने log4j.properties को src / main / resource में रखें। और कुछ करने को नहीं!


यह वही है, और यह मावेन प्रोजेक्ट्स में XMLConfiguration जैसी अन्य गुण फ़ाइलों के लिए समान है। धन्यवाद!
रेमन

13

यदि आप src के अंदर log4j.properties डालते हैं, तो आपको कथन का उपयोग करने की आवश्यकता नहीं है -

PropertyConfigurator.configure("log4j.properties");

इसे गुण फ़ाइल के रूप में स्वचालित रूप से लिया जाएगा।



9

फ़ाइल WEB-INF / कक्षाओं निर्देशिका में स्थित होना चाहिए। इस निर्देशिका संरचना को युद्ध फ़ाइल के भीतर पैक किया जाना चाहिए।


सिद्धांत रूप में, यह जवाब है, लेकिन समस्या log4j है। कांच फ़ाइल युद्ध फाइल तैनात करते समय नुकसान हो जाता है।
मोनो

3
यह WEB-INF / कक्षाओं में होना चाहिए और युद्ध फ़ाइल के भीतर पैक किया जाना चाहिए
मार्टिन OConnor

@mono - कम से कम डाउनलोड करने योग्य संग्रह में वेब / WEB-INF / कक्षाओं में कोई log4j.properties नहीं है। मार्टिन सही है, बस यहीं होना चाहिए।
fvu

चाल है, आप इसे अपने src फ़ोल्डर में डालते हैं, (आपका रूट स्रोत फ़ोल्डर), आपके कोड के निर्माण की प्रक्रिया में, फ़ाइल को स्वचालित रूप से क्लासेस फ़ोल्डर में स्थानांतरित कर दिया जाता है ...
Mostafa Zeinali

7

माई आईडीई नेटबींस है। मैं log4j.property फ़ाइल डालती हूं जैसा कि चित्रों में दिखाया गया है

जड़

प्रोजेक्ट का रूट फ़ोल्डर

वेब

वेब फ़ोल्डर

वेब-INF

WEB- जानकारी फ़ोल्डर

इस संपत्ति फ़ाइल का उपयोग करने के लिए आपको यह कोड लिखना चाहिए:

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

आप किसी अन्य JSP फ़ाइल से स्थिर ServletContext संदर्भ को परिभाषित कर सकते हैं । उदाहरण:

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

अब आप अपनी परियोजनाओं में log4j.property फ़ाइल का उपयोग कर सकते हैं।


5

कुछ तकनीकी रूप से सही विशिष्ट उत्तर पहले से ही दिए गए हैं, लेकिन सामान्य तौर पर, यह रनटाइम क्लासपाथ पर कहीं भी हो सकता है, यानी जहां भी कक्षाएं जेवीएम द्वारा मांगी जाती हैं।

यह ग्रहण या WEB-INF / कक्षाएं निर्देशिका में आपके तैनात ऐप में / src dir हो सकता है, लेकिन क्लासपैथ अवधारणा के बारे में पता होना सबसे अच्छा है और इसमें फ़ाइल क्यों रखी गई है, बस WEB-INF / का इलाज न करें "जादू" निर्देशिका के रूप में कक्षाएं।


5

मैंने यह पता लगाने के लिए बहुत समय बिताया है कि log4j.properties फ़ाइल क्यों नहीं देखी जाती है।
तब मैंने देखा कि यह प्रोजेक्ट के लिए तभी दिखाई दे रहा था जब यह MyProject / target / classes / और MyProject / src / main / resource फोल्डर दोनों में था।
आशा है कि यह किसी के लिए उपयोगी होगा।
पुनश्च: परियोजना मावेन-आधारित थी।


3

मैंने पाया है कि डिफ़ॉल्ट रूप से ग्लासफ़िश [ग्लासफ़िश इंस्टॉल लोकेशन] को देख रहा है। [आपका डोमेन] आपके डोमेन को डिफ़ॉल्ट वर्किंग डायरेक्टरी के रूप में ... आप इस स्थान में log4j.properties फ़ाइल को छोड़ सकते हैं और प्रॉपर्टीफ़ोनफ़िगरेटर का उपयोग करके इसे अपने कोड में इनिशियलाइज़ कर सकते हैं। जैसा कि पहले उल्लिखित है...

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

1

मुझे नहीं पता कि यह सही तरीका है। लेकिन यह मेरी समस्या का हल है। "प्रोजेक्ट फ़ोल्डर" / config में log4j.properties फ़ाइल डालिए और PropertyConfigurator.configure का उपयोग करें ("config // log4j.properties");

यह आईडीई के साथ काम करेगा, लेकिन जब जार फ़ाइल को स्वयं चलाएं। जब आप अपने आप जार फ़ाइल चलाते हैं, तो बस log4j.properties फ़ाइल को उस फ़ोल्डर में कॉपी करें जहाँ जार फ़ाइल in.when होती है जब जार और प्रॉपर्टी फ़ाइल उसी निर्देशिका में होती है जो अच्छी तरह से चलती है।


1

Classpath में log4j.properties डालें। यहां 2 मामले दिए गए हैं जो आपको उचित स्थान की पहचान करने में मदद करेंगे- 1. वेब एप्लिकेशन के लिए क्लासपैथ / वेब-इन / क्लासेस है।

\WEB-INF      
    classes\
        log4j.properties
  1. मुख्य / इकाई परीक्षण से परीक्षण करने के लिए क्लासपाथ स्रोत निर्देशिका है

    \Project\
       src\
          log4j.properties

1

इसे करने के कई तरीके हैं:

Way1: यदि आप PropertyConfigurator का उपयोग किए बिना maven प्रोजेक्ट में प्रयास कर रहे हैं

पहला: स्क्रब / मेन में रिसोर्स डायरेक्टरी के लिए जाँच करें

  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.

स्क्रीनशॉट इस प्रकार है:

[यहाँ छवि विवरण दर्ज करें

Way2: यदि आप java / maven प्रोजेक्ट के लिए Properties फ़ाइल के साथ प्रयास कर रहे हैं तो PropertyConfigurator का उपयोग करें

प्रॉपर्टी को प्रोजेक्ट में कहीं भी रखें और सही रास्ता दें। कहो: src / javaLog4jProperties / log4j.properties

स्थिर {

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

}

यहाँ छवि विवरण दर्ज करें

Way3: यदि आप java / maven प्रोजेक्ट पर DOM का उपयोग करें DOMConfigurator पर xml के साथ प्रयास कर रहे हैं

प्रॉपर्टीज को प्रोजेक्ट में कहीं भी रखें और सही रास्ता दें। कहो: src / javaLog4jProperties / log4j.xml

स्थिर {

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

}

यहाँ छवि विवरण दर्ज करें


1

आपके मानक प्रोजेक्ट सेटअप में प्रोजेक्ट संरचना कुछ इस तरह होगी:

src/main/java
src/main/resources

यदि आप संसाधन फ़ोल्डर के अंदर log4j.properties रखते हैं, तो आप संसाधन फ़ोल्डर बना सकते हैं यदि कोई मौजूद नहीं है


0

वास्तव में, मैंने इस समस्या को एक स्टारडार्ड प्रोजेक्ट प्रोजेक्ट संरचना में निम्नानुसार अनुभव किया है:

\myproject
    \src
    \libs
    \res\log4j.properties

ग्रहण में मुझे पथ बनाने के लिए रेस फ़ोल्डर को जोड़ने की आवश्यकता है, हालांकि, Intellij में, मुझे res फ़ोल्डर के रूप में रिस फ़ोल्डर को चिह्नित करने की आवश्यकता है क्योंकि लिंक किए गए स्क्रीनशॉट से पता चलता है: रिस फ़ोल्डर पर राइट क्लिक करें और संसाधनों के रूप में चिह्नित करें


0

आपको निर्दिष्ट करने की आवश्यकता नहीं है PropertyConfigurator.configure("log4j.properties"); अपने Log4J वर्ग में , यदि आपने पहले से ही अपने प्रोजेक्ट संरचना में log4j.properties को परिभाषित किया है।

वेब डायनामिक प्रोजेक्ट के मामले में: -

आपको WebContent -> WEB-INF -> log4j.properties के तहत अपने log4j.properties को बचाने की आवश्यकता है

मुझे उम्मीद है कि यह आपकी मदद कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.