Misschien lijkt het gek om dit te vragen, maar ik ben in de war. Ik heb verwezen naar Log4j-eigenschap configurerenmaar het lijkt niet te helpen.
Ik heb een eenvoudige webservice HelloWorld geschreven. En tijdens het uitvoeren krijg ik de fout ongeveer als volgt:
log4j:WARN Er zijn geen appenders gevonden voor logger (org.apache.axis.transport.http.AxisServlet).
log4j:WARN Initialiseer het log4j-systeem op de juiste manier.
Ik weet niet zeker waarom het gebeurt.
Ik genereer de webservice met Eclipse en geïmplementeerd in Tomcat 6.0. Ik bekijk de Axis Developer’s Guideen volgens hen
log4j.configuration=log4j.properties
Gebruik deze systeemeigenschap om de naam van een Log4J-configuratiebestand op te geven. Indien niet opgegeven, is het standaardconfiguratiebestand log4j.properties. Een log4j.properties-bestand wordt geleverd in axis.jar.
Ik heb log4j.properties niet gevonden in de axis.jar
.
Heeft u hier hulp bij?
Antwoord 1, autoriteit 100%
Die berichten zijn iets lastigs, genoeg zodat mensen dit hebben gemaakt om het duidelijker te maken:
https://issues.apache.org/bugzilla/show_bug.cgi?id=25747
Het lastige hieraan is dat de waarschuwingen worden geschreven als Log4j zijn bestand log4j.properties
(of log4j.xml
) niet kan vinden, maar ook als het bestand is prima en dandy, maar de inhoud is niet compleet vanuit het oogpunt van configuratie.
De volgende alinea is hier overgenomen:
http://svn.apache.org/repos /asf/logging/log4j/tags/v1_2_9/docs/TROUBLESHOOT.html
Logboekuitvoer wordt naar een doel geschreven met behulp van een appender. Als er geen appenders zijn gekoppeld aan een categorie of aan een van zijn voorouders, krijgt u het volgende bericht wanneer u probeert in te loggen:
log4j: No appenders could be found for category (some.category.name).
log4j: Please initialize the log4j system properly.
Log4j heeft geen standaard logboekdoel. Het is de verantwoordelijkheid van de gebruiker om ervoor te zorgen dat alle categorieën een bijlage kunnen erven. Dit kan eenvoudig worden bereikt door een bijlage aan de hoofdcategorie toe te voegen.
Je kunt informatie vinden over het configureren van de rootlogger (log4j.rootLogger
) in de log4j documentatie, in feite iets simpels als dit toevoegen aan het begin van het bestand:
log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Dit zou de WARN-berichten moeten wissen die je krijgt bij het opstarten(zorg ervoor dat je niet al een bijlage hebt met de naam stdout
; let ook op welk niveau je de root logger, debug
zal zeer uitgebreid zijn en elke bibliotheek in uw app zal dingen naar de console gaan schrijven).
Zoals over de log4j.properties
/ log4j.xml
, ik raad u aan om dit bestand in /WEB-INF/classes
AS te plaatsen is belangrijk om het te laten belichten voor verschillende tweaks (het activeren / deactiveren van logboeken, het veranderen van logiveaus enz.). Je kunt het ook in een pot in het klassepad hebben (zoals je opgegeven in je reactie), maar het zal in het archief worden ingesloten (hopelijk op de juiste plaats in het archief) en zal het niet zo gemakkelijk te hanteren alsof waren in /WEB-INF/classes
.
Antwoord 2, Autoriteit 12%
U moet uw eigen log4j.properties
in de klassenmap maken.
Antwoord 3, Autoriteit 5%
Nou, als je de log4j.properties al had gemaakt, zou je zijn pad naar het klassenpad toevoegen, dus het zou worden gevonden tijdens de uitvoering.
Ja, het ding zal zoeken naar dit bestand in het klassenpad.
Sinds je zei dat je naar Axis keek en er een hebt gevonden, ik neem aan dat je geen log4j.properties hebt, dus hier is een ruwe maar compleet voorbeeld.
Maak het ergens en voeg toe aan je klassenpad. Zet het bijvoorbeeld, in c: /proj/resources/log4j.properties
In uw klassenpad voeg je eenvoudig toe …….; c: / proj / bronnen
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Antwoord 4, autoriteit 2%
Waarschuwing Er zijn geen appenders gevonden voor loggerbetekent dat u log4j
logsysteem, maar u heeft geen appenders (zoals FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, enz.) aan uw configuratiebestand toegevoegd of het configuratiebestand ontbreekt.
Er zijn drie manieren om log4j te configureren: met een eigenschappenbestand (log4j.properties
), met een XML-bestand en via Java-code (rootLogger.addAppender(new NullAppender());
).
Als je een eigenschappenbestand hebt (bijvoorbeeld bij het installeren van Solr), moet je dit bestand in je classpathmap.
klassenpad
Hier zijn enkele suggesties voor opdrachten om uw classpath-waarde te bepalen:
$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf
of van Java: System.getProperty("java.class.path")
.
Kater
Als u Tomcat gebruikt, kunt u uw log4j.properties
plaatsen in: /usr/share/tomcat?/lib/
of /var/lib/tomcat?/webapps/*/WEB-INF/lib/
map.
Zonne
Ter referentie, Solr log4j.properties
ziet er als volgt uit:
# Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n
#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9
#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN
# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
Antwoord 5, autoriteit 2%
Als de onderstaande verklaring aanwezig is in uw klasse, dan zou uw log4j.properties in de map java source(src) moeten staan, als het een uitvoerbaar bestand is, moet het in een jar worden verpakt en niet in een apart bestand.
static Logger log = Logger.getLogger(MyClass.class);
Bedankt,
Antwoord 6
Als u Logger.getLogger(ClassName.class)
gebruikt, plaats dan uw log4j.properties
-bestand in uw klassenpad:
yourproject/javaresoures/src/log4j.properties (Put inside src folder)
Antwoord 7
U kunt log4j.properties configureren zoals bovenstaande antwoorden, of org.apache.log4j.BasicConfigurator
gebruiken
public class FooImpl implements Foo {
private static final Logger LOGGER = Logger.getLogger(FooBar.class);
public Object createObject() {
BasicConfigurator.configure();
LOGGER.info("something");
return new Object();
}
}
Zo onder de tabel, configureren DOEN:
configure() {
Logger root = Logger.getRootLogger();
root.addAppender(new ConsoleAppender(
new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
}