1、log4j2官方下载地址http://logging.apache.org/log4j/2.x/download.html 基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号):log4j-core-xx.jar log4j-api-xx.jar
2、日志级别:
我们现在要调用logger的方法,不过在这个Logger对象中,有很多方法,所以要先了解log4j的日志级别,log4j规定了默认的几个级别:trace<debug<info<warn<error<fatal等。这里要说明一下:
1)级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。
2)基本上默认的级别没多大区别,就是一个默认的设定。你可以通过它的API自己定义级别。你也可以随意调用这些方法,不过你要在配置文件里面好好处理了,否则就起不到日志的作用了,而且也不易读,相当于一个规范,你要完全定义一套也可以,不用没多大必要。
3)这不同的级别的含义大家都很容易理解,这里就简单介绍一下:
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。
3、调用方法:
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @WebServlet("/HelloWorld") public class HelloWorld extends HttpServlet { private static final long serialVersionUID = 1L; static Logger logger = LogManager.getLogger(HelloWorld.class.getName()); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.trace("1、我是trace信息{}{}","用户信息","业务代码"); logger.debug("2、我是debug信息"); logger.info("3、我是info信息"); logger.warn("4、我是warn信息"); logger.error("5、我是error信息"); logger.fatal("6、我是fatal信息"); logger.info("3、我是info信息"); } }
4、创建log4j2.xml配置文件
默认的级别为error
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </appenders> <loggers> <root level="error"> <appender-ref ref="Console"/> </root> </loggers> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <!-- status="TRACE"这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。 --> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <!--过滤器:控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--> <File name="log" fileName="log/test.log" append="true"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="50MB"/> </RollingFile> </appenders> <loggers> <!-- trace<debug<info<warn<error<fatal --> <!-- 默认的输出级别 --> <root level="trace"> <appender-ref ref="log" /> </root> <!-- 设置该类输出的级别为warn --> <!-- additivity开启的话,由于这个logger也是满足root的,所以会被打印两遍。 不过root logger 的level是error,为什么Bar 里面的trace信息也被打印两遍呢 --> <logger name="com.zzstxx.log4j2.HelloWorld2" level="warn" additivity="false"> <appender-ref ref="Console" /> </logger> <!-- 设置指定包目录下的输出级别 --> <!-- <logger name="com.zzstxx.log4j2" level="warn" additivity="false"> <appender-ref ref="Console" /> </logger>s --> </loggers> </configuration>
转载至:
http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.html
http://stackoverflow.com/questions/25081829/log4j2-jdbc-manager-cannot-connect-to-the-database
官方API :
http://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender
http://logging.apache.org/log4j/2.x/manual/thread-context.html