24. marts 2004 - 12:05Der er
36 kommentarer og 1 løsning
hvordan kommer jeg igang med log4j ?
Jeg skal til at implementere en logning på en web applikation jeg vedligeholder, og jeg har hørt at log4j skulle være god. Men hvordan kommer jeg igang.
Jeg bruger en websphere 3.5.4 server - så den er ikke helt ny. Jeg tror ikke den har log4j. men jeg kan jo blot includere log4j.jar i mit eget projekt ( det har vi i forvejen gjort med Struts ) God artikel iøvrigt. I din artikels eksempel hedder din klasse log4 og den kalder en logger der hedder log4 - men der behøver vel ikke være navnesammenfald ? Er det rigtigt forstået at man i sin konfiguration definerer de forskellige loggere man vil have og så kan hente dem med logger.getLogger("navn") ? - og kan bruge den i mange forskellige klasser Det med navn indikerer at man bør have en loggerkonfiguration for hver klasse man logger fra ?? eller i det mindste fra hver pakke ?? Hvis man har konfigureret en logger med navn log4 og så beder om en logger der hedder log4.log får man så log4 konfigurationen eller en fejl fordi der ikke er en logger konfiguration til det navn ?
Til en lille test med en main metode tænker jeg at det er nemmest at sætte den inde fra koden. hedder det så System.setProperty("Dlog4j.configuration","der hvor filen er"); ? Du skriver at der også er et par klasser til det ??
Når jeg logger til c:/log4j.log som i din artikel får jeg en logfil på c, men hvis jeg forsøger at få logfilen på d:/log4j.log så kommer der ikke nogen fil
Jeg kører test fra Intellij Idea, hvor jeg har en main metode. Jeg har fundet ud af at der skrives til en fil der hedder niceweblogslog4j placeret i d:/niceweb. Men lige nu står der i min config fil at der skal skrives til c:/log4j. # Log3 logger: minimum level=debug, two appenders (logfile + console) log4j.category.Log3 = info, logfile # console: minimum level=info, special format #log4j.appender.console.threshold = info #log4j.appender.console=org.apache.log4j.ConsoleAppender #log4j.appender.console.layout = org.apache.log4j.PatternLayout #log4j.appender.console.layout.ConversionPattern = %-30c %d %-5p %m%n # logfile: minmum level=debug, fil=log4.log, special format log4j.appender.logfile.threshold = info log4j.appender.logfile = org.apache.log4j.FileAppender log4j.appender.logfile.file = C:\log4j.log log4j.appender.logfile.layout = org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern = %-30c %d %-5p %m%n
desuden skrives der også debug linjer, det skulle der vel ikke når jeg har skrevet level=info ? Det er som om at properties ikke rigtigt bliver genindlæst - men hvordan tvinger jeg den til det ?
Nu har jeg fået styr på det med filen - det var slashene der skulle vendes ( og så skulle det være i den version af properties filen som blev brugt :-())
Nu mangler jeg bare at få slukket for den der consol. Det har måske noget med disse linjer som står øverst i properties filen at gøre
log4j.rootCategory=, A1
# A1 is set to be a LF5Appender which outputs to a swing # logging console.
Har jeg forstået dig ret: du har en file appender for alle loggere, du har en special logger for en enkelt logger - og nu vil du undgå at få det du outputter til special loggeren ud i fil loggeren - selvom level tillader det ?
Jeg ville gerne have det således at jeg kunne skrive al min logning i f.eks en fil pr javapakke - og så de forskellige loggere blot skrev på forskellig niveau (debug, info, etc.) Men det ser ud til at det er filens threshold der bestemmer om en loglinje skal udskrives og ikke loggeren selv ? Kan det virkeligt være rigtigt?
Så har jeg lige et problem med det med at loggere arver loglevel fra loggere højere oppe i hierakiet. Hvis man har defineret en logger der hedder dk.minsti.mitprojekt Skulle man så ikke kunne instantiere loggere der hedder dk.minsti.mitprojekt.pakke.klasse - og så arver de efter dk.minsti.mitprojekt ?? Eller skal man have defineret en logger der hedder dk.minsti.mitprojekt.pakke.klasse som så bare ikke har fået tildelt et level, for at den arver efter dk.minsti.mitprojekt ?
Jeg tror at jeg har fået det til at virke. Jeg havde vist bare et problem med at når først jeg havde instantieret en logger der hed dk.minsti.mitprojekt.pakke.klasse så kunne jeg ikke bare fjerne den igen ved at fjerne konfigurationen. Objektet eksisterede stadig og blev så ikke påvirket at at konfigurationen blev fjernet. Det forvirrede mig lidt i mine forsøg med arv af loglevel, men vil nok ikke have nogen betydning i praksis, hvor man jo nok vil lade konfigurationen stå, blot med et ændret loglevel når man skal modellere logningen runtime Så nu er jeg igang med at implementere log4j i mit projekt. Der var en herude er spurgte mig om det var lovlig kode - hun havde hørt noget om en eller anden logger der vist havde "lånt" noget kode fra microsoft - og sådan noget kan vi jo ikke bare bruge i vores forretning. Kender du noget til det ??
log4j bruges formentlig af 75% af alle J2EE projekter i hele verden.
Apache Group er en yderst respektabel open source organisation.
Jeg er ret sikker på at det er lovligt.
Jeg har iøvrigt lidt svært ved at se hvad man skulle have hapset fra Microsoft. De gør jo ikke meget i Java. Og de har ikke et tilsvarende logging framework. Eneste berørings punkt må være den appender som skriver til NT/2000/XP event log.
Det lyder fint. Det var vist heller ikke log4j hun havde hørt om, men heller være på den sikre side. Tak for hjælpen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.