Irsz esetleg egy sajat appendert?
Page
viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
13 Comments
Auth Gábor
Kérdésem az lenne, hogy lehet-e olyat, hogy a root logger több fájlba (appender-be) loggol, mégpedig level szerint szétválasztva?
<root>
A DTD szerint egy root lehet és abban egy priority... van valami kerülő út?<priority value ="info" />
<appender-ref ref="log-info"/>
</root>
Auth Gábor
<?xml version="1.0" encoding="UTF-8" ?>
Ezt használja is, mert a log4j nélkül ezt írta:<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender>
<root>
<priority value ="info" />
<appender-ref ref="ConsoleAppender"/>
</root>
</log4j:configuration>
2007.01.24. 17:36:45 org.apache.catalina.startup.HostConfig checkResources
Most ezt írja (tehát SimpleLayout):INFO: Reloading context [/JavaForum]
2007.01.24. 17:36:50 org.apache.catalina.core.ApplicationContext log
INFO: Manager: restart: Reloading web application at '/JavaForum'
2007.01.24. 17:36:50 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
INFO - Manager: init: Associated with Deployer 'Catalina:type=Deployer,host=localhost'
A JavaForum kontext classes alatti XML ilyen:INFO - Manager: init: Global resources are available
INFO - Manager: restart: Reloading web application at '/JavaForum'
INFO - Reloading this Context has started
<root>
És a debug appender állománya tele van ilyesmivel:<priority value ="debug" />
<appender-ref ref="debug"/>
<appender-ref ref="warn"/>
<appender-ref ref="error"/>
</root>
2007-01-24 18:29:54,542 org.apache.tomcat.util.digester.Digester startDocument()
Debug alatt én a saját debug naplómat szeretném látni... van rá mód? :)2007-01-24 18:29:54,543 org.apache.tomcat.util.digester.Digester startElement(,,web-app)
2007-01-24 18:29:54,543 org.apache.tomcat.util.digester.Digester Pushing body text ''
2007-01-24 18:29:54,544 org.apache.tomcat.util.digester.Digester New match='web-app'
2007-01-24 18:29:54,545 org.apache.tomcat.util.digester.Digester Fire begin() for org.apache.catalina.startup.SetPublicIdRule@3a5794
2007-01-24 18:29:54,545 org.apache.catalina.startup.SetPublicIdRule org.apache.catalina.core.StandardContext.setPublicId(null)
tvik
Pl:
package x.y.z;
class MyClass {
private static final Logger logger = Logger.getLogger(MyClass.class);
vagy:
private static final Logger logger = Logger.getLogger("myapp.moduleX.logger1");
}
Ezután a config fájlban lehet hangolni a különböző loggerek vagy hierarchiák loggolási szintjét. Pl:
<category name="org">
<priority value="INFO"/>
</category>
<category name="tomcat">
<priority value="INFO"/>
</category>
Ezután jön a <root> szekció.
Ez egy tipikus példa JBoss-ban a szerver és egyéb "org" komponensek elhallgattatására, mert azok is folyton belepampognak a logba. Szerintem bővebb magyarázat nélkül is érthető.
tvik
<appender name="warn-app" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${user.home}/logs/log.warn"/>
<param name="Threshold" value="WARN" />
<param name="Append" value="true"/>
<param name="datePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %C{2} %m\n"/>
</layout>
</appender>
<appender name="error-app" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${user.home}/logs/log.error"/>
<param name="Threshold" value="ERROR" />
<param name="Append" value="true"/>
<param name="datePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %C{2} %m\n"/>
</layout>
</appender>
...
<root>
<appender-ref ref="warn-app"/>
<appender-ref ref="error-app"/>
</root>
Auth Gábor
Megvan egyben is... mégpedig a debug.log fájlban, aztán a warn.log fájlban a WARN és afeletti, az error.log fájlban ERROR és afeletti. Azért jó ez, az error.log mellé van egy SMTPAppender is, ami ezeket levélben is elküldi, csak nem akartam erre külön nevesített logger példányt kérni minden osztályban, a getRootLogger() elégnek tűnt... :)
Kissé hülye vagyok még a logj4-hez, ma használom először... :)
Hogy szokás ezt egyébként az osztályokban megoldani? Mert most minden osztály végére szórok egy
private static org.apache.log4j.Logger logger=org.apache.log4j.Logger.getRootLogger();
sort, és a logger példányt használom loggolásra. Jó ez így?tvik: Ez nem jó?
Ez jónak néz ki, legalábbis kiindulásnak jó... még finomítom... de nagyon köszönöm! :)
tvik
<param name="Threshold" value="WARN"/> csak a WARN és afölötti fontosságúakat loggolja.
De olyanról nem tudok hogy felülről lehetne korlátozni az appendert és szerintem nincs is sok értelme. Ami engem illet igencsak morcos lennék ha különböző fájlokból kellene összeszednem a debug, info, warn, error logokat. Rendszerint ezek nagyon keverednek és egymás nélkül nem értelmezhetőek. Én legalábbis így használom.
Auth Gábor
Gyakorlatilag azt szeretném, hogy legyen egy nagy log, amibe minden belemegy (debugtól felfelé) és legyen még kettő kategória (például log.warn, log.error), amelyekbe így szűkül a beletett adat (log.error tartalma ERROR és FATAL). Mindegy, hogy kinek mennyire tetszik, nekem ez kellene... :D
Úgy látszik nincs erre official megoldás, azért gondoltam, hogy van, mert a UNIX-ok syslogng programja tud ilyen szűrést, de gyanús volt, hogy sehol nem látok ilyen példát... :)
Irsz esetleg egy sajat appendert?
Ez is lehetőség, de ennyire nem égető, megoldom egy debug root és kettő másik nevesített loggerrel. :)
tvik
Auth Gábor
<appender name="debug-app" class="org.apache.log4j.DailyRollingFileAppender">
Én ilyesmit szeretnék:<param name="File" value="${user.home}/logs/log.debug"/>
<param name="Append" value="true"/>
<param name="datePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %C %m\n"/>
</layout>
</appender>
<appender name="warn-app" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${user.home}/logs/log.warn"/>
<param name="Append" value="true"/>
<param name="datePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %C{2} %m\n"/>
</layout>
</appender>
<appender name="error-app" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${user.home}/logs/log.error"/>
<param name="Append" value="true"/>
<param name="datePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %l\n%-10p %m\n"/>
</layout>
</appender>
<logger name="log-warn">
<level value="warn"/>
<appender-ref ref="warn-app"/>
</logger>
<logger name="log-error">
<level value="error"/>
<appender-ref ref="error-app"/>
</logger>
<root>
<priority value ="debug" />
<appender-ref ref="debug-app"/>
</root>
<root>
Hogy ne kelljen elkérnem a loggoláshoz a nevesített loggereket.<priority value ="debug" />
<appender-ref ref="debug-app"/>
<level value="warn"/>
<appender-ref ref="warn-app"/>
<level value="error"/>
<appender-ref ref="error-app"/>
</root>
Laszlo Hornyak
Auth Gábor
Auth Gábor
Azt szeretném, hogy ha a programban elkérem a rootLogger példányt:
logger=org.apache.log4j.Logger.getRootLogger();
akkor a különféle szintű bejegyzések (.info, .warn, .fatal, stb) különféle fájlokba kerüljenek (log.debug, log.info, log.fatal, stb).Azt szeretném elkerülni, hogy csináljak 6-7 féle appendert a megfelelő fájlnevekkel, és 6-7 féle logger bejegyzést.
tvik