Java日志系统学习之log4j!
尽管slf4j+logback看起来很不错。但是,由于自己熟悉的很多项目都还是用log4j。而且springmvc默认使用log4j。所以 自己还是学习总结下。
我习惯到官网去看资料学习使用。我觉得这样不会让我在众多转来转去文章中。搞得晕头转向,而不得要领。
log4j apache官网手册页面。
手册页上有一段话,吸引了我的注意。本来下午的时候,我还在想理由解释为什么要使用日志。下面这段话太经典了。
As Brian W. Kernighan and Rob Pike put it in their truly excellent book "The Practice of Programming"/** As personal choice, we tend not to use debuggers beyond getting a stack trace or the value of a variable or two. One reason is that it is easy to get lost in details of complicated data structures and control flow; we find stepping through a program less productive than thinking harder and adding output statements and self-checking code at critical places. Clicking over statements takes longer than scanning the output of judiciously-placed displays. It takes less time to decide where to put print statements than to single-step to the critical section of code, even assuming we know where that is. More important, debugging statements stay with the program; debugging sessions are transient.**/
//Logger类的outline如下org.apache.log4j.Loggerorg.apache.log4j.Logger.FQCNorg.apache.log4j.Logger.Logger(String)org.apache.log4j.Logger.getLogger(String)org.apache.log4j.Logger.getLogger(Class)org.apache.log4j.Logger.getRootLogger()org.apache.log4j.Logger.getLogger(String, LoggerFactory)org.apache.log4j.Logger.trace(Object)org.apache.log4j.Logger.trace(Object, Throwable)org.apache.log4j.Logger.isTraceEnabled()
org.apache.log4j.Levelorg.apache.log4j.Level.TRACE_INTorg.apache.log4j.Level.OFForg.apache.log4j.Level.FATALorg.apache.log4j.Level.ERRORorg.apache.log4j.Level.WARNorg.apache.log4j.Level.INFOorg.apache.log4j.Level.DEBUGorg.apache.log4j.Level.TRACEorg.apache.log4j.Level.ALLorg.apache.log4j.Level.serialVersionUIDorg.apache.log4j.Level.Level(int, String, int)org.apache.log4j.Level.toLevel(String)org.apache.log4j.Level.toLevel(int)org.apache.log4j.Level.toLevel(int, Level)org.apache.log4j.Level.toLevel(String, Level)org.apache.log4j.Level.readObject(ObjectInputStream)org.apache.log4j.Level.writeObject(ObjectOutputStream)org.apache.log4j.Level.readResolve()
org.apache.log4j.Appenderorg.apache.log4j.Appender.addFilter(Filter)org.apache.log4j.Appender.getFilter()org.apache.log4j.Appender.clearFilters()org.apache.log4j.Appender.close()org.apache.log4j.Appender.doAppend(LoggingEvent)org.apache.log4j.Appender.getName()org.apache.log4j.Appender.setErrorHandler(ErrorHandler)org.apache.log4j.Appender.getErrorHandler()org.apache.log4j.Appender.setLayout(Layout)org.apache.log4j.Appender.getLayout()org.apache.log4j.Appender.setName(String)org.apache.log4j.Appender.requiresLayout()
Category root = Category.getRoot();root.debug("Message 1");root.warn("Message 2");
/**DEBUG [main]: Message 1WARN [main]: Message 2**/
<!-- 日志文件输出设置 --> <appender name="file" value="logs/app_log.log"/> <param name="DatePattern" value=".yyyy-MM-dd"/> <layout value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c{3} - %m%n" /></layout> </appender>
Caused by: java.io.FileNotFoundException: /home/banxi1988/work/posterWallworkspace/LogDemo/src/log4j.dtd (No such file or directory)
<param name="DatePattern" value=".yyyy-MM-dd"/><!-- 下面的也尝试过。--><param name="DatePattern" value="'.'yyyy-MM-dd"/>