1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no...
-
Upload
zechariah-venable -
Category
Documents
-
view
216 -
download
2
Transcript of 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no...
![Page 1: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/1.jpg)
1
Logback project
Ceki Gülcü & Sébastien Pennec
![Page 2: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/2.jpg)
2
~
No revolution, only evolution. log4j is no longer being actively
developed The same basic plumbing only
done better. Faster, smaller, higher gas
mileage, and generally more bang for the buck.
![Page 3: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/3.jpg)
3
Modular architecture
logback-coreJoran, Status,
Context, pattern parsing logback-classic
developer logging logback-access
container (access) logging
id Components
logback-core
logback-classic logback-access
![Page 4: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/4.jpg)
4
Access Logging
Definition: Access logThe log generated when a user
accesses a web-page on a web server.
Logback-access integrates seamlessly with Jetty and Tomcat
![Page 5: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/5.jpg)
5
logback-classic implements SLF4J
Logback offers a native implementation of the SLF4J API => Logback exposes its logging API through SLF4J.
If you are using logback, you are actually using SLF4J
SLF4J can delegate to log4j, logback, java.util.logging or JCL
SLF4J can bridge log4j, JCL and j.u.l.
![Page 6: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/6.jpg)
6
Joran: a bowl of fresh air
Given rules (patterns & actions) it can configure any object.
Joran can learn new rules on the fly. With its implicit rules, you don’t even
have to write rules. It can do partial replay. It is generic (can be used in your own
projects)
![Page 7: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/7.jpg)
7
Configuration example:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>logFile.log</File> <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern> logFile.%d{yyyy-MM-dd}.log.zip </FileNamePatter> </rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{HH:mm:ss,SSS} [%thread] %-5level %logger{22} - %msg%n </Pattern> </layout></appender>
![Page 8: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/8.jpg)
8
Logback-access configuration<appender name="FILE" class="c.q.l.c.r.RollingFileAppender"> <File>access.log"</File> <rollingPolicy class="c.q.l.c.r.TimeBasedRollingPolicy"> <FileNamePattern> access.%d{yyyy-MM-dd}.log.zip </FileNamePattern> </rollingPolicy>
<layout class="c.q.l.access.PatternLayout"> <Pattern">combined</Pattern"> </layout></appender>
![Page 9: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/9.jpg)
9
Another example:<testShell name="test1"> <period>5 minutes</period> <!-- we need to configure a totally new test object for each run of the test --> <test class="com.wombat.myTest"> <DataSource class="c.w.JNDIDS"> <url>jndi://com.wombat/ds"</url> </DataSource> </test><testShell>
<testShell name="test2"> <period>60 seconds</period> <test class="com.wombat.myTest2"> <file>c:/wombat/foo.properties</file> </test></testShell>
![Page 10: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/10.jpg)
10
Is Joran for me?
Joran is ideal for building frameworks which need to support arbitrary user-developed plug-ins.
![Page 11: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/11.jpg)
11
Internal error reporting
Who shall guard the guards?
Logback modules cannot use logging to report their own state.
Something more generic is needed.
![Page 12: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/12.jpg)
12
Errors in action
Internal state available via StatusManager
Exceptions and status messages accompanied by references, i.e. URLs, to external documents
![Page 13: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/13.jpg)
13
JMX
Logback configuration can be reloaded via JMX
Statistical results exposed via JMX
![Page 14: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/14.jpg)
14
Documentation Major area of effort.
Complete manual, with over 150 pages of documentation, is available for free
A short introduction to access logging with logback-access and Jetty
javadoc, FAQ, error codes,…
![Page 15: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/15.jpg)
15
Filters, Filters. Filters everywhere
Filters attachable to any Appender Evaluator filters Janino filters for evaluation based on java
expressions TurboFilters for optimized global processing
![Page 16: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/16.jpg)
16
EvaluatorFilter & Janino<appender name="CYCLIC" class="c.q.l.core.read.CyclicBufferAppender"> <filter class="c.q.l.core.filter.EvaluatorFilter"> <evaluator name="loggingTaskEval">
<expression> logger.contains("LoggingTask") &&
message.contains("Howdydy-diddly-ho") && (timeStamp-loggerContext.getBirthTime()) >= 20000
</expression> </evaluator> <OnMatch>DENY</OnMatch>
</filter> <MaxSize>512</MaxSize></appender>
![Page 17: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/17.jpg)
17
TurboFilters<turboFilter class="c.q.l.classic.turbo.MDCFilter">
<MDCKey>userid</MDCKey>
<Value>sebastien</Value>
<OnMatch>ACCEPT</OnMatch>
</turboFilter>
![Page 18: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/18.jpg)
18
Parameterized logging
Integer entry = new Interger(50); logger.debug("The entry is "+entry+".");
can be optimized as: if(logger.isDebugEnabled()) { logger.debug("The entry is "+entry+".");}
or better yet:logger.debug("The entry is {}.", entry);
![Page 19: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/19.jpg)
19
Markers for specialized handling
Markers are metadata for logging statements, coloring them for specialized processing
![Page 20: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/20.jpg)
20
SiftingAppender or the appender-making appender
Sift logging according to runtime attributes E.g. separate logs according to user
sessions, so that the log file generated by every user go into distinct log files, one log file per user.
Works with any appender, not just FileAppender
![Page 21: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/21.jpg)
21
SiftingAppender (continued) <appender name="SIFT"
class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <Key>userid</Key> <DefaultValue>unknown</DefaultValue> </discriminator> <sift> <appender name="FILE-${userid}" class="ch.qos.logback.core.FileAppender"> <File>${userid}.log</File>s <Append>false</Append> <layout> <Pattern>%d %level %mdc %logger - %msg%n</Pattern> </layout> </appender> </sift> </appender>
![Page 22: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/22.jpg)
22
Tested & Ready
Battery of over 450 unit tests
Tests written concomitantly with the code
![Page 23: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/23.jpg)
23
Package versions in stack traces
java.lang.NullPointerException
at com.xyz.Wombat(Wombat.java:57) ~[wombat-1.3.jar:1.3]
at com.xyz.Wombat(Wombat.java:76) ~[wombat-1.3.jar:1.3]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native) ~[na:1.5.0_06]
at java.lang.reflect.Method.invoke(Method.java:585) ~[na:1.5.0_06]
at junit.runners.TestMethod.invoke(TestMethod.java:59) [junit-4.4.jar:na]
etc..
![Page 24: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/24.jpg)
24
logger name abbreviation
Conversion specifier
Displayed logger name
%logger mainPackage.sub.sample.Bar
%logger{15} m.s.sample.Bar
![Page 25: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/25.jpg)
25
Odds and ends RollingFileAppender automatic file compression the
background FileAppender and RollingFileAppender allow for the
same log file to be written to by instances located in different JVMs
10 fold improvement in the speed of transporting logging events over the wire
SMTPAppender now does TLS and SSL, subject line in outgoing email now based on PatternLayout
![Page 26: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/26.jpg)
26
Odds and ends II
%() in pattern strings can do magic
%-50(%d %level [%thread]) - %m%n DuplicateMessage filter
![Page 27: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/27.jpg)
27
Odds and ends II
%() in pattern strings can do magic
%-50(%d %level [%thread]) - %m%n DuplicateMessage filter
![Page 28: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/28.jpg)
28
Plans for the near future
Finer threading model leading to less contention
Better documentation Eclipse plug-in to visualize your logs
![Page 29: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/29.jpg)
29
Conclusion
Logback is the unofficial successor of log4j, as the latter is no longer being actively developed.
![Page 30: 1 Logback project Ceki Gülcü & Sébastien Pennec. 2 ~ No revolution, only evolution. log4j is no longer being actively developed The same basic plumbing.](https://reader036.fdocuments.us/reader036/viewer/2022070307/551b810b550346167e8b4a3e/html5/thumbnails/30.jpg)
30
Questions?
read the docs at http://logback.qos.ch/ study the code at http://svn.qos.ch write to us at [email protected] file a bug report at http://jira.qos.ch/ chat with us at irc.freenode.net#qos talk to us at +41 21 312 32 26