2010-06-21 9 views
5

जब मैं एक टैग एंट में चलाता हूं या प्रत्येक कार्य के आउटपुट को मिश्रित करता है तो लॉग मल्टीप्लेक्स करता है। मैं कुछ और आसानी से पढ़ा/grokked चाहते हैं।मैं अपनी लॉग प्रविष्टियों को मल्टीप्लेक्स/इंटरलीव नहीं करने के लिए चींटी समानांतर कैसे प्राप्त कर सकता हूं?

मैंने निम्नलिखित दृष्टिकोणों का प्रयास किया है और वे कुछ भी नहीं से बेहतर हैं, लेकिन फिर भी मैं जो खोज रहा हूं वह नहीं है। लॉग के अंत में गैर-अंतःस्थापित लॉग आउटपुट निम्न echos है, लेकिन यह पहले दो कार्यों के संयुक्त और मिश्रित आउटपुट भी है।

क्या कोई तरीका है कि मैं केवल फाइल में चींटी को आउटपुट बता सकता हूं और कॉलर को लॉग आउटपुट को बबल नहीं कर सकता? मेरे अपने antcall कार्य लिखते हैं कि अलग ढंग से प्रवेश करने हैंडल

  • कंसोल के बारे में भूल जाते हैं और रिकॉर्ड का उपयोग एक फ़ाइल
  • करने के लिए लॉगिंग को नियंत्रित करने के

    • :

      <parallel> 
          <ant target="task1" output=${log.dir}/task1.log"/> 
          <ant target="task2" output=${log.dir}/task2.log"/> 
      </parallel> 
      <loadfile property="task1" srcfile="${log.dir}/task1.log"/> 
      <loadfile property="task2" srcfile="${log.dir}/task2.log"/> 
      <echo>Results: 
      Task1: ${task1} 
      --- 
      Task2: ${task2} 
      </echo> 
      
    +0

    का उपयोग भीतर इंटरलिविंग कर पाएगा, लेकिन आप समानांतर टास्किंग की वास्तविक लाभ से वंचित। http://ant.apache.org/manual/Tasks/sequential.html – JoseK

    उत्तर

    3

    मैं दो संभव समाधान है मैं दूसरे के साथ जाने जा रहा हूं क्योंकि इसे कार्यान्वित करना सबसे आसान है और क्योंकि मैं शायद बाद में आगे बढ़ने जा रहा हूं जहां मैं इसे एक अलग तरीके से हल करूंगा (लेकिन शायद फोल एक समान पैटर्न को कम करना)

    मुख्य चींटी कार्य किसी build.log पर लॉगिंग चालू और बंद करने के लिए रिकॉर्ड का उपयोग करेगा। समानांतर से पहले यह लॉगिंग अक्षम कर देगा, सब-चींटी लॉग फ़ाइलों को लॉग इन करने दें। चींटी को पूरा करने के बाद आउटपुट लोड और गूंज जाएगा। कंसोल आउटपुट मिश्रित है और build.log serialized है।

    यह थोड़ा सा कर्कश है लेकिन बहुत बुरा नहीं है।

    <project name="antExperiments" default="para" basedir="."> 
    
        <!-- Logging Control --> 
        <property name="build.log.dir" location="${basedir}/logs"/> 
    
    
        <!-- - - - - - - - - - - - - - - - - - 
          macro: activate logging (defaults to ${build.log.dir}/build.log)      
         - - - - - - - - - - - - - - - - - --> 
        <macrodef name="start.log"> 
         <attribute name="name" default="build"/> 
         <attribute name="dir" default="${build.log.dir}"/> 
         <attribute name="append" default="false"/> 
         <sequential> 
         <record action="start" append="@{append}" name="@{dir}/@{name}.log"/> 
         </sequential> 
        </macrodef> 
    
        <!-- - - - - - - - - - - - - - - - - - 
          macro: deactivate logging (defaults to ${build.log.dir}/build.log)      
         - - - - - - - - - - - - - - - - - --> 
        <macrodef name="stop.log"> 
         <attribute name="name" default="build"/> 
         <attribute name="dir" default="${build.log.dir}"/> 
         <attribute name="append" default="false"/> 
         <sequential> 
         <record action="stop" append="@{append}" name="@{dir}/@{name}.log"/> 
         </sequential> 
        </macrodef> 
    
        <target name="clean"> 
         <delete dir="${build.log.dir}"/> 
         <mkdir dir="${build.log.dir}"/> 
        </target> 
    
        <!-- - - - - - - - - - - - - - - - - - 
          target: main.init 
          Initialization for Top Level build - not used by subants      
         - - - - - - - - - - - - - - - - - --> 
        <target name="main.init"> 
         <start.log/> 
        </target> 
    
        <!-- ================================= 
          target: para 
          top level build runs 2 jobs in parallel producing interleaved hard to read 
          on to standard output and non interleaved more easily understood logging 
          to build.log 
         ================================= --> 
        <target name="para" depends="main.init,clean"> 
         <stop.log/> <!-- disable top level logging --> 
         <parallel threadcount="4" pollinterval="50"> 
          <ant output="${build.log.dir}/proc1.log" target="proc1"> 
           <property name="proc" value="proc1"/> 
          </ant> 
          <ant output="${build.log.dir}/proc2.log" target="proc2"> 
           <property name="proc" value="proc2"/>      
          </ant> 
         </parallel> 
         <start.log/> <!-- enable top level logging --> 
    
         <!-- Non interleaved output --> 
         <loadfile property="p1" srcfile="${build.log.dir}/proc1.log"/> 
         <loadfile property="p2" srcfile="${build.log.dir}/proc2.log"/> 
         <echo> 
    -------------------------- 
    BuildJob: proc1   
    OUTPUT: ****************** 
    ${p1} 
    ************************** 
    -------------------------- 
    BuildJob: proc2   
    OUTPUT: ****************** 
    ${p2} 
    ************************** 
    
    
    BUILD LOG: ${build.log.dir}/build.log   
    </echo>  
        </target> 
    
    
        <target name="init"> 
         <echo>Init called by ${proc}</echo> 
        </target> 
    
        <target name="proc1" depends="init"> 
         <echo>PROC1....................... 
         </echo> 
         <exec dir="${basedir}" executable="cmd"> 
          <arg line="/c dir \"/> 
         </exec> 
        </target> 
        <target name="proc2" depends="init"> 
         <echo>PROC2..........2222222....... 
         </echo> 
         <exec dir="${basedir}" executable="cmd"> 
          <arg line="/c dir \sandbox"/> 
         </exec> 
        </target> 
    </project> 
    
    संबंधित मुद्दे

     संबंधित मुद्दे