logback_config_demo
我自己的logback一般先用这个总结好的架子,需要的再往上添(搞毛线?wordpress.com官方说用“[ code ]”来标记,编辑器里又自动用<code>标记,但即使指定lang=”xml”,也没法正确的现实xml内容啊):
<?xml version=”1.0″ encoding=”UTF-8″?>
<!– <configuration scan=”true” scanPeriod=”60 seconds”> –>
<configuration>
<!– print configuration status on console –>
<statusListener class=”ch.qos.logback.core.status.OnConsoleStatusListener”/><!– Beagle: eclipse plugin –>
<!– <consolePlugin /> –><!– log path –>
<property name=”LOG_PATH” value=”d:/log” />
<!– <property resource=”resource1.properties” /> –><!– ================================= appenders =================================== –>
<!– console appender (must be omitted in product environment) –>
<appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>
<encoder charset=”UTF-8″>
<!– [%p] works fine with “grep console” –>
<!– \(%F:%L\) for caller reference –>
<pattern>%d{HH:mm:ss.SSS} [%t] [%p] %c{1} – %m \(%F:%L\) %n</pattern>
</encoder>
</appender><!– default appender –>
<appender name=”COMMON-DEFAULT-APPENDER” class=”ch.qos.logback.core.rolling.RollingFileAppender”>
<File>${LOG_PATH}/common-default.log</File>
<rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>
<FileNamePattern>${LOG_PATH}/common-default.%d.log.gz</FileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset=”UTF-8″>
<Pattern>%d [%t] %-5p %c{1} – %m%n</Pattern>
<!– since default appender deal with massive messages, so somewhat losses can be tolerated –>
<immediateFlush>false</immediateFlush>
</encoder>
</appender><!– error appender –>
<appender name=”COMMON-ERROR-APPENDER” class=”ch.qos.logback.core.rolling.RollingFileAppender”>
<filter class=”ch.qos.logback.classic.filter.ThresholdFilter”>
<level>ERROR</level>
</filter>
<File>${LOG_PATH}/common-error.log</File>
<rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>
<FileNamePattern>${LOG_PATH}/common-error.%d.log.gz</FileNamePattern>
<maxHistory>365</maxHistory>
</rollingPolicy>
<encoder charset=”UTF-8″>
<Pattern>%d [%t] %-5p %c{1} – %m%n</Pattern>
</encoder>
</appender><!– business appender –>
<appender name=”BUSINESS-APPENDER” class=”ch.qos.logback.core.rolling.RollingFileAppender”>
<File>${LOG_PATH}/business.log</File>
<rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>
<!– folders archive for month, files archive for day –>
<FileNamePattern>${LOG_PATH}/%d{yyyy-MM,aux}/business.%d.log.gz</FileNamePattern>
</rollingPolicy>
<encoder charset=”UTF-8″>
<Pattern>%d [%t] %-5p %c{1} – %m%n</Pattern>
</encoder>
</appender><!– alarm email appender –>
<appender name=”ALARM-APPENDER” class=”ch.qos.logback.classic.net.SMTPAppender”>
<smtpHost>localhost</smtpHost>
<smtpPort>587</smtpPort>
<SSL>true</SSL>
<username>master1@watchzerg.me</username>
<password>test_pass</password>
<to>master2@watchzerg.me</to>
<from>master3@watchzerg.me</from>
<subject>[ALARM] Fail to change price for goods %X{change_price_id}! </subject>
<layout class=”ch.qos.logback.classic.html.HTMLLayout”>
<pattern>%d%t%p%c%m</pattern>
</layout>
<charsetEncoding>UTF-8</charsetEncoding>
<asynchronousSending>false</asynchronousSending>
<!–
<cyclicBufferTracker class=”ch.qos.logback.core.spi.CyclicBufferTracker”>
<maxNumberOfBuffers>256</maxNumberOfBuffers>
</cyclicBufferTracker>
–>
<evaluator class=”ch.qos.logback.classic.boolex.OnMarkerEvaluator”>
<marker>ALARM_EMAIL</marker>
</evaluator>
<discriminator class=”ch.qos.logback.classic.sift.MDCBasedDiscriminator”>
<key>change_price_id</key>
<defaultValue>default</defaultValue>
</discriminator>
</appender><!– ================================= loggers =================================== –>
<!– business logger –>
<logger name=”BUSINESS” level=”INFO” additivity=”false”>
<appender-ref ref=”STDOUT”/>
<appender-ref ref=”BUSINESS-APPENDER” />
<appender-ref ref=”ALARM-APPENDER”/>
</logger><!– root logger –>
<root level=”DEBUG”>
<appender-ref ref=”STDOUT”/>
<appender-ref ref=”COMMON-DEFAULT-APPENDER”/>
<appender-ref ref=”COMMON-ERROR-APPENDER”/>
<appender-ref ref=”ALARM-APPENDER”/>
</root></configuration>
logback_eclipse_plugin_beagle
logback_doc_manual_09_logging_separation
logback_doc_manual_08_mapped_diagnostic_contexts
<filter><filter-name>MDCInsertingServletFilter</filter-name><filter-class>ch.qos.logback.classic.helpers.MDCInsertingServletFilter</filter-class></filter><filter-mapping><filter-name>MDCInsertingServletFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
logback_doc_manual_07_filters
<filter class=”ch.qos.logback.core.filter.EvaluatorFilter”><evaluator class=”ch.qos.logback.classic.boolex.GEventEvaluator”><expression>e.level.toInt() >= WARN.toInt() && <!– Stands for && in XML –>!(e.mdc?.get(“req.userAgent”) =~ /Googlebot|msnbot|Yahoo/ )</expression></evaluator><OnMismatch>DENY</OnMismatch><OnMatch>NEUTRAL</OnMatch></filter>
<filter class=”ch.qos.logback.core.filter.EvaluatorFilter”><evaluator name=”loggingTaskEval”><expression>logger.getName().contains(“LoggingTask”) &&message.contains(“Howdydy-diddly-ho”) &&(timeStamp – event.getStartTime()) >= 20000</expression></evaluator><OnMatch>DENY</OnMatch></filter>
logback_doc_manual_06_layouts
例如 %20.30logger
<evaluator name=”DISP_CALLER_EVAL”><expression>logger.contains(“chapters.layouts”) && \message.contains(“who calls thee”)</expression></evaluator><appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”><encoder><pattern>%-4relative [%thread] %-5level – %msg%n%caller{2, DISP_CALLER_EVAL}</pattern></encoder></appender>
<evaluator name=”DISPLAY_EX_EVAL”><expression>throwable != null && throwable instanceof \chapters.layouts.TestException</expression></evaluator><appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”><encoder><pattern>%msg%n%ex{full, DISPLAY_EX_EVAL}</pattern></encoder></appender>
<appender name=”FILE” class=”ch.qos.logback.core.FileAppender”><encoder class=”ch.qos.logback.core.encoder.LayoutWrappingEncoder”><layout class=”ch.qos.logback.classic.html.HTMLLayout”><pattern>%relative%thread%mdc%level%logger%msg</pattern></layout></encoder><file>test.html</file></appender>
logback_doc_manual_05_encoders
<appender name=”FILE” class=”ch.qos.logback.core.FileAppender”><file>foo.log</file><encoder><pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern><!– this quadruples logging throughput –><immediateFlush>false</immediateFlush></encoder></appender>
<appender name=”FILE” class=”ch.qos.logback.core.FileAppender”><file>foo.log</file><encoder><pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern><outputPatternAsHeader>true</outputPatternAsHeader></encoder></appender>
#logback.classic pattern: %d [%thread] %-5level %logger{36} – %msg%n2012-04-26 14:54:38,461 [main] DEBUG com.foo.App – Hello world2012-04-26 14:54:38,461 [main] DEBUG com.foo.App – Hi again
logback_doc_manual_04_appenders
logger.debug(“Application started”);MDC.put(“userid”, “Alice”);logger.debug(“Alice says hello”);
<appender name=”EMAIL” class=”ch.qos.logback.classic.net.SMTPAppender”><smtpHost>${smtpHost}</smtpHost><to>${to}</to><from>${from}</from><layout class=”ch.qos.logback.classic.html.HTMLLayout”/></appender>
<layout class=”ch.qos.logback.classic.PatternLayout”><pattern>%date %-5level %logger{35} – %message%n</pattern></layout>
Marker notifyAdmin = MarkerFactory.getMarker(“NOTIFY_ADMIN”);logger.error(notifyAdmin,“This is a serious an error requiring the admin’s attention”,new Exception(“Just testing”));
<appender name=”EMAIL” class=”ch.qos.logback.classic.net.SMTPAppender”><evaluator class=”ch.qos.logback.classic.boolex.OnMarkerEvaluator”><marker>NOTIFY_ADMIN</marker><!– you specify add as many markers as you want –><marker>TRANSACTION_FAILURE</marker></evaluator></appender>
<appender name=”EMAIL” class=”ch.qos.logback.classic.net.SMTPAppender”><smtpHost>smtp.gmail.com</smtpHost><smtpPort>465</smtpPort><SSL>true</SSL><username>YOUR_USERNAME@gmail.com</username><password>YOUR_GMAIL_PASSWORD</password></appender>
<appender name=”EMAIL” class=”ch.qos.logback.classic.net.SMTPAppender”><smtpHost>smtp.gmail.com</smtpHost><smtpPort>587</smtpPort><STARTTLS>true</STARTTLS><username>YOUR_USERNAME@gmail.com</username><password>YOUR_GMAIL_xPASSWORD</password></appender>
<appender name=”EMAIL” class=”ch.qos.logback.classic.net.SMTPAppender”><discriminator class=”ch.qos.logback.classic.sift.MDCBasedDiscriminator”><key>req.remoteHost</key><defaultValue>default</defaultValue></discriminator><subject>${HOSTNAME} — %X{req.remoteHost} %msg”</subject><layout class=”ch.qos.logback.classic.html.HTMLLayout”><pattern>%date%level%thread%X{req.remoteHost}%X{req.requestURL}%logger%msg</pattern></layout></appender>
1 comment