Salut

join a ce mail un fichier de confugration log4j.properties
et un classe qui utilise cette log

les logs sont reglable par position dans les package
ex si je voulais logger tous le package facade
log4j.logger.com.xyleme.facade=DEBUG
seulement une classe
log4j.logger.com.xyleme.facade.Uneclasse=DEBUG
tou com.*
log4j.logger.com.=debug


on peut aussi utiliser Dans  PropertyConfigurator la methode
configureandwatch
pour modifier ses niveaux de log a chaud

pour eviter des couts sur les perf
il faut
malheuresement
faire
if(xylog.isInfoEnabled())xylog.info("test"+3+"tzesqt");
pour eviter l'�valuation de la chaine "test"+3+"tzesqt"
je vous file un parseur en python qui fait ca
Ps si qqun voulais le re�crire en java et me le filer je leremercie
d'avance
A+ marc
#################################################################
##    Appender   for debug                             ##
#################################################################
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A3=org.apache.log4j.net.SocketAppender
log4j.appender.A3.RemoteHost=10.0.0.189
log4j.appender.A3.Port=4445
log4j.appender.A3.LocationInfo=true


#################################################################
##    Appender   for production                                ##
#################################################################
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.File=c:/tracker.log
#log4j.appender.A2=org.apache.log4j.net.SyslogAppender
#log4j.appender.A2.SyslogHost=10.0.0.10

#################################################################
##    Appender layout  for production                          ##
################################################################
log4j.appender.A2.layout=org.apache.log4j.xml.XMLLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
#log4j.appender.A1.layout=org.apache.log4j.PatternLayout


#log4j.appender.A1.layout.ConversionPattern=%t %p %d{dd->HH:mm:ss}  msg->%m%n
log4j.appender.A1.layout.ConversionPattern=%t %p %d{dd->HH:mm:ss} [[%C{1}]:[%M]:%L] 
%m%n
#log4j.appender.A2.layout.ConversionPattern=%t %p %d{dd->HH:mm:ss} [[%C{1}]:[%M]:%L] 
%m%n
log4j.appender.A3.layout.ConversionPattern=%t %p %d{dd->HH:mm:ss} [[%C{1}]:[%M]:%L] 
%m%n

#############################################################
## level for appender 1                                    ##
############################################################


log4j.logger.com=DEBUG,A1,A2 
log4j.logger.fr=DEBUG,A1,A2
log4j.logger.com.xyleme.facade=DEBUG
log4j.logger.com.xyleme.application.journallemonde.action=DEBUG
log4j.logger.com.xyleme.facade.authentification=DEBUG



Attachment: temp.java
Description: application/unknown-content-type-jbuilder.javasource

import os, find,string,sys,re,getopt,shutil

def lancement(repertoiresrc,repertoiredest,mode,verbose,hotlog):
        shutil.copytree(repertoiresrc,repertoiredest,0)
        for i in find.find("*.java",repertoiredest):
                if verbose=="true":
                        print "preprocessing", os.path.basename(i)
                file=open(i,'r')
                file2=open(i[:-4]+'new','w')
                nbligne=0
                for j in file.readlines():
                        nbligne=nbligne+1
                        
j=traiteLigne(os.path.basename(i),j,nbligne,mode,hotlog,repertoiredest,verbose)
                        file2.writelines(j)
                file.close()
                file2.close()
                os.rename(i,i[:-4]+"old")
                os.rename(i[:-4]+'new',i)
 
def  traiteLigne(fichier,ligne,numeroligne,mode,hotlog,repertoire,verbose):
#enleve la log non utile en production
        strligne=str(numeroligne)
        val1=string.find(ligne,"DEBUG")
        val2=string.count(ligne,"xylog.")
        if val2>1:
                print "Pobably Incorrect syntax for precompiler only one xylog. in a 
ligne"
                print "Error in file",fichier,"lineno",numeroligne
                print "Force RESTORE"
                restore(repertoire,verbose)
                print "ABORDED incorrect format for logging"
                print "Incorrect syntax for precompiler only one xylog. in a ligne"
                print "Error in file",fichier,"lineno",numeroligne
                sys.exit(1)
        if mode=="prod":
            if val1>0:
                ligne=blockdebug.sub('/*DEBUG',ligne)
                ligne=enddebug.sub('ENDDEBUG*/',ligne)
            if val2>0:
                if hotlog=="false":
                    
ligne=info.sub('xylog.info("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                    
ligne=debug.sub('//xylog.debug("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                    
ligne=warn.sub('xylog.warn("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                    
ligne=error.sub('xylog.error("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                else:
                    
ligne=info.sub('if(xylog.isInfoEnabled())xylog.info("File:'+fichier+'::NL:'+strligne+':msg->\g<1>',ligne)
                    
ligne=debug.sub('//xylog.debug("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                    
ligne=warn.sub('if(xylog.isEnabledFor(org.apache.log4j.Priority.WARN))xylog.warn("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                    
ligne=error.sub('xylog.error("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                    
        else:
                if val2>0:
                        if hotlog=="false":
                                
ligne=info.sub('xylog.info("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                                
ligne=debug.sub('xylog.debug("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                                
ligne=warn.sub('xylog.warn("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                                
ligne=error.sub('xylog.error("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                        else:
                                
ligne=info.sub('if(xylog.isInfoEnabled())xylog.info("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                                
ligne=debug.sub('if(xylog.isDebugEnabled())xylog.debug("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                                
ligne=warn.sub('if(xylog.isEnabledFor(org.apache.log4j.Priority.WARN))xylog.warn("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                                
ligne=error.sub('xylog.error("File:'+fichier+'::NL:'+strligne+':msg->\\1',ligne)
                
        return ligne
        
        
        
def restore(repertoire,verbose):
    print "restoring previows source"
    for i in find.find("*.old",repertoire):
        if verbose=="true":
                print "restoring", os.path.basename(i)
        os.unlink(i[:-3]+"java")
        os.rename(i,i[:-3]+"java")
        

        

def usage():
    for i in range(len(sys.argv)):
        print "Arg",i,":",sys.argv[i]
          
    print "Bad number of arguments"
    print "use logformat [origine_directory] [dest_directory] [action] 
verbose[true|false] hotlog[true|false]"
    print "-------action-----:"
    print "     restore ->to undo"
    print "     prod for production logging "
    print "     norm for classic logging"
    print "-------option-----:"
    print "verbose=true or false"
    print "hotlog for hot logging"
    print "ex: logformat c:\\toto prod true true"
    print "generate log for production with verbose mode et hotlog enabled"
        
                        
        
if __name__ == '__main__':
#define compile pattern
    blockdebug=re.compile(r'//#DEBUG')
    enddebug=re.compile(r'//#ENDDEBUG')
    info= re.compile(r'xylog.info\("([^;])')
    debug= re.compile(r'xylog.debug\("([^;])')
    warn=re.compile(r'xylog.warn\("([^;])')
    error=re.compile(r'xylog.error\("([^;])')
    verbose="false"
    hotlog="false"
    print "nb arg",len(sys.argv)
    if len(sys.argv) < 4:
        usage()
    else:
            if len(sys.argv)> 4 and sys.argv[4]!=None and sys.argv[4]=="true":
                print "Verbose enabled"
                verbose="true"
            if len(sys.argv)> 5 and sys.argv[5]!=None and sys.argv[5]=="true":
                print "Hotlog enabled"
                hotlog="true"
            if sys.argv[3]=="restore":
                restore(sys.argv[2],verbose)
                sys.exit()
            if sys.argv[3]=="prod" or sys.argv[3]=="norm":
                print "processing..."
                lancement(sys.argv[1],sys.argv[2],sys.argv[3],verbose,hotlog)
                sys.exit()
            else:
                usage()
        
    


      
 

Répondre à