2010-06-21 13 views
5

Bir karınca anteni çalıştırdığımda veya içinde bulunduğumda, günlükler her görevin çıkışını bir araya getiriyor. Daha kolay bir şey okumak isterim.Günlük girişlerimi çoğullama/araya sokmamak için karıncaya nasıl paralel gidebilirim?

Aşağıdaki yaklaşımları denedim ve hiçbir şeyden daha iyi değiller ama hala aradığım şey değil. Aşağıdaki, logun sonundaki interleaved log çıktısını gösterir, ancak ilk olarak iki görevin karma ve karma çıkışını da içerir.

Söz konusu dosyaya SADECE çıkış verebileceğimin bir yolu var mı ve günlük çıktısını arayana kadar kabarmıyor mu? farklı giriş

  • konsola unutup bir dosyaya
  • için günlüğünü kontrol etmek kaydı kullanın işleme kendi antcall görevi yazma

    • :

      <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

    içinde Interleaving'i önleyecektir kullanarak, ancak paralel tasking gerçek yararı kaybetmek. http://ant.apache.org/manual/Tasks/sequential.html – JoseK

    cevap

    3

    Ben iki olası çözümler var Ben ikinci ile gidiyorum çünkü uygulamak için en kolay ve çünkü muhtemelen daha sonra bu farklı bir şekilde çözeceğim nerede (belki de muhtemelen) benzer bir deseni indirme)

    Ana karınca görevi, bir build.log dosyasına giriş yapmak ve kapatmak için kaydı kullanacaktır. Paralelden önce, günlüğe kaydetmeyi devre dışı bırakır, alt-ant dosyasının dosyalara bırakılmasını sağlar. Karınca tamamladıktan sonra çıktı yükler ve yankılanır. Konsol çıkışı karıştırılmaya devam eder ve build.log serileştirilir.

    Bu biraz klunky ama çok da kötü değil.

    <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> 
    
    İlgili konular