मावेन का उपयोग करते समय, आमतौर पर आप जावा या संसाधनों के तहत log4j.properties डालते हैं?


128

पारंपरिक मावेन निर्देशिकाओं का उपयोग करते समय मुझे log4j.properties फ़ाइल कहाँ डालनी चाहिए?


6
src / test / Resources - आपकी कलाकृतियों का उपभोक्ता परिनियोजन के लिए आवश्यक लॉगिंग स्तर निर्धारित करेगा। लेकिन अगर आप वाणिज्यिक कार्य के लिए ऐसा कर रहे हैं तो मैं आपको slf4j की सलाह दूंगा। यह तैनाती पर रूपरेखा लॉगिंग स्विचिंग का विकल्प देता है। slf4j.org
डेविड विक्टर

2
BTW यदि आप केवल गुण / xml config फाइल के बिना log4j का उपयोग करना चाहते हैं। ' Logging.apache.org/log4j/1.2/manual.html - कॉन्फ़िगरेशन' से "BasicConfigurator.configure विधि का आह्वान एक सरल log4j सेटअप बनाता है।" यह भी देखें: logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/… maven.apache.org/plugins/maven-resources-plugin/examac//
डेविड विक्टर

जवाबों:


141

src/main/resources इसके लिए "मानक प्लेसमेंट" है।

अपडेट: उपरोक्त प्रश्न का उत्तर देता है, लेकिन इसका सबसे अच्छा समाधान नहीं है। इस पर अन्य उत्तरों और टिप्पणियों की जांच करें ... आप संभवत: जार के साथ अपने स्वयं के लॉगिंग गुणों को शिपिंग नहीं करेंगे, बल्कि वांछित लॉगिंग को कॉन्फ़िगर करने के लिए क्लाइंट (उदाहरण के लिए ऐप-सर्वर, स्टेज पर्यावरण, आदि) पर छोड़ दें। इस प्रकार, यह src/test/resourcesमेरे पसंदीदा समाधान है।

नोट: ग्राहक / उपयोगकर्ता के लिए ठोस लॉग config छोड़ने की बात हो रही है, तो आप की जगह पर विचार करना चाहिए log4jके साथ slf4jअपने अनुप्रयोग में।


मुझे लगा कि कोई संसाधन नहीं बनाया जाएगा। क्या मुझे इसे मैन्युअल रूप से करने की आवश्यकता है?
user496949

3
हां। मैन्युअल रूप से बनाएं resourcesऔर log4j.propertiesउत्तर में उल्लिखित फ़ोल्डर में।
निशांत

@ user496949: के तहत फाइलों को src/main/resourcesडिफ़ॉल्ट रूप से कॉपी किया जाएगाtarget/classes
छप

17
जब तक आप अपनी कलाकृति के हिस्से के रूप में अपनी log4j सेटिंग्स को निर्यात करने का इरादा नहीं रखते हैं - इसे src / test / Resources के तहत रखना बेहतर है
डेविड विक्टर

1
@FerasOdeh इसे उत्पन्न कलाकृतियों (जार, युद्ध, आदि) से बाहर करने के लिए है और केवल परीक्षण के दौरान उपयोग किया जाता है, "जब तक आप अपनी कलाकृति के भाग के रूप में अपने लॉग 4j सेटिंग्स को निर्यात करने का इरादा नहीं रखते हैं"।
अली शाकिबा

60

बस src/main/resourcesइसे अंदर डालकर इसे कलाकृतियों के अंदर बांध दिया जाएगा। उदाहरण के लिए, यदि आपकी कलाकृति एक JAR है, तो आपके पास इसके log4j.propertiesअंदर फ़ाइल होगी , जो लॉगिंग को विन्यास योग्य बनाने के अपने प्रारंभिक बिंदु को खो देती है।

मैं आमतौर पर इसे अंदर डालता हूं src/main/resources, और इसे सेट करने के लिए आउटपुट देता हूं ताकि लक्ष्य:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <targetPath>${project.build.directory}</targetPath>
            <includes>
                <include>log4j.properties</include>
            </includes>
        </resource>
    </resources>
</build>

इसके अतिरिक्त, वास्तव में इसे देखने के लिए log4j के लिए, आपको आउटपुट निर्देशिका को वर्ग पथ में जोड़ना होगा। यदि आपकी कलाकृति निष्पादन योग्य JAR है, तो संभवतः आपने इसे बनाने के लिए मावेन-असेंबली-प्लगइन का उपयोग किया है। उस प्लगइन के अंदर, आप JAR के वर्तमान फ़ोल्डर को वर्ग पथ में जोड़ सकते हैं Class-Pathजैसे कि एक प्रकट प्रविष्टि जोड़कर :

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.your-package.Main</mainClass>
            </manifest>
            <manifestEntries>
                <Class-Path>.</Class-Path>
            </manifestEntries>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

अब log4j.properties फ़ाइल आपकी JAR फ़ाइल के ठीक बगल में होगी, स्वतंत्र रूप से कॉन्फ़िगर करने योग्य।

ग्रहण से सीधे अपने आवेदन चलाने के लिए, जोड़ने के resourcesअपने रन विन्यास में अपने classpath के लिए निर्देशिका: Run->Run Configurations...->Java Application->Newचयन Classpathटैब, का चयन Advancedकरें और अपने को ब्राउज़ src/resourcesनिर्देशिका।


2
एक अन्य विकल्प यह हो सकता है कि इसे src / test / Resources के नीचे रखा जाए ताकि यह बंडल में न आए।
रोज़रपैक

वाह। उसके लिए धन्यवाद। यह वही था जो मुझे चाहिए था!
ब्लिसफूल

@ ज़ोल्टन, मुझे लगता है कि आपने सलाह के अनुसार आउटपुट डायरेक्टरी को क्लासपाथ में जोड़ना मुश्किल समझा। क्या कोई ऐसा तरीका है जो मैं इसे मैन्युअल रूप से कर सकता हूं, जैसे किसी विशेष प्रोजेक्ट की .classpath फ़ाइल में जाएं और वहां इस log4j आउटपुट डायरेक्टरी को जोड़ें ताकि लॉग 4j .warperties फ़ाइल को ऐप को एक .war फ़ाइल में बंडल करने के बाद देख सकें। इसके अलावा, targetPath टैग, क्या मान का उपयोग किया ${project.build.directory}जाना चाहिए - या वास्तविक पथ पर संपादित किया जाना चाहिए जो परियोजना मेरे स्थानीय ड्राइव में रहती है?
इरेटी

26

उसके लिए कुछ "डेटा माइनिंग" खाते src/main/resourcesविशिष्ट स्थान हैं।

Google कोड खोज पर परिणाम :

  • src/main/resources/log4j.properties: 4877
  • src/main/java/log4j.properties: 215

4
20 मिनट पहले दिए गए उत्तर की तुलना में यह उत्तर किसी भी तरह से अलग कैसे है? इसके अलावा, यह resourcesनहीं है resource, अगर मुझे सही याद है।
निशांत

6
@ निशांत: यह अलग नहीं है, क्योंकि जब मैंने उत्तर बॉक्स खोला तो मैंने पीसी छोड़ दिया। वापस आने और प्रश्न का उत्तर देने के बाद मैंने याद किया कि प्रश्न पहले ही उत्तर दे दिया गया था। resourceकेवल एक टाइपो था।
छप

1
मैं मावेन के आसपास कुछ पढ़ने का सुझाव दूंगा, मावेन कंपाइलर प्लगइन, मावेन परियोजनाओं के लेआउट के लिए सम्मेलनों। हो सकता है कि आपकी कलाकृतियों के निर्माण के दौरान 'लक्ष्य' के तहत क्या हो। तब शायद आप अपना उत्तर संशोधित कर सकते हैं।
डेविड विक्टर

4
सही उत्तर src / xxx / संसाधन है - यह एक सम्मेलन नहीं है। देखें: maven.apache.org/plugins/maven-resources-plugin/examples/… - यहाँ 'xxx' 'मुख्य' या 'परीक्षण' हो सकता है। जब तक आप पहले से कॉन्फ़िगर किए गए लॉगिंग स्तरों को प्रदान करने की इच्छा नहीं करते हैं, तो यह आम तौर पर परीक्षण के लिए लॉगिंग को कॉन्फ़िगर करने के लिए समझदार होता है - 'src / test / Resources' के माध्यम से - और लॉगिंग स्तर सेट करने के लिए अपनी कलाकृतियों के उपभोक्ता को अनुमति दें।
डेविड विक्टर

22
"परिणाम एक पुल से कूद" के लिए Google परिणाम: 18.200.000। "एक पुल से कूद मत करो" के लिए Google परिणाम: 137.000
djjeck

9

परियोजना को आरम्भ करने के लिए उपयोग किए जाने वाले संसाधनों को अधिमानतः src / main / resource फ़ोल्डर में रखा जाता है। निर्माण के दौरान इन संसाधनों को लोड करने में सक्षम करने के लिए, कोई बस संसाधन के रूप में मावेन परियोजना में pom.xml में प्रविष्टियाँ जोड़ सकता है

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> 
        </resource>
    </resources>
</build> 

इनिशियलाइज़ेशन के लिए उपयोग किए जाने वाले इस फ़ोल्डर में अन्य .properties फाइलें भी रखी जा सकती हैं। यदि आप संसाधन फ़ोल्डर की संपत्तियों की फ़ाइलों में कुछ चर रखना चाहते हैं और उन्हें फ़िल्टर फ़िल्टर गुण फ़ाइलों से पॉप्युलेट करना चाहते हैं, तो फ़िल्टर करना सही है, जो कि src / main / फ़िल्टर में रखे जाते हैं, जो प्रोफाइल के रूप में सेट है, लेकिन यह पूरी तरह से एक अलग उपयोग मामला है । अभी के लिए, आप उन्हें अनदेखा कर सकते हैं।

यह एक महान संसाधन मावेन संसाधन प्लगइन्स है , यह उपयोगी है, बस अन्य अनुभागों के माध्यम से भी ब्राउज़ करें।


यदि आप सिर्फ उपरोक्त मावेन स्निपेट को कॉपी और पेस्ट करते हैं, तो कृपया ध्यान दें कि यह </ संसाधन> </ बिल्ड> है
rdesilva

6

संसाधन फ़ाइलों को किसी अन्य स्थान पर रखना सबसे अच्छा समाधान नहीं है जिसका आप उपयोग कर सकते हैं:

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <excludes>
        <exclude>**/*.java</exclude>
      </excludes>
    </resource>
  </resources>
<build>

उदाहरण के लिए जब संसाधन फाइलें (जैसे jaxb.properties) जावा कक्षाओं के साथ-साथ संकुल के अंदर गहराई से जाती हैं।


1

यदि आपकी log4j.properties या log4j.xml फ़ाइल src / main / resource के अंतर्गत नहीं मिली है तो इस PropertyConfigurator.configure ("log4j.xml") का उपयोग करें;

   PropertyConfigurator.configure("log4j.xml");
   Logger logger = LoggerFactory.getLogger(MyClass.class);
   logger.error(message);

0

बिल्ड टैग के अंदर अपने pom.xml में संसाधन टैग से नीचे कोड जोड़ें। तो इसका मतलब है कि संसाधन टैग आपके pom.xml में बिल्ड टैग के अंदर होने चाहिए

<build>
    <resources>
        <resource>
            <directory>src/main/java/resources</directory>
                <filtering>true</filtering> 
         </resource>
     </resources>
<build/>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.