Initialiseer het log4j-systeem op de juiste manier. Tijdens het uitvoeren van webservice

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, debugzal 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/classesAS 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.propertiesin 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 log4jlogsysteem, 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.propertiesplaatsen in: /usr/share/tomcat?/lib/of /var/lib/tomcat?/webapps/*/WEB-INF/lib/map.

Zonne

Ter referentie, Solr log4j.propertiesziet 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)));
  }

Other episodes