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
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()
