log4j2很久以前就用过了,每次只是奉行“拿来主义”,对于其知识点没有一个系统的了解,粗略的看了看官方文档,整理了一下几个关键的知识点。java
log4j-core-xx.jar程序员
log4j-api-xx.jarspring
Log4j将检查“log4j.configurationFile”系统属性,若是设置,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置。数据库
若是未设置系统属性,则ConfigurationFactory属性将在classpath中查找log4j2-test.properties。编程
若是没有找到这样的文件,YAML ConfigurationFactory将在classpath中查找log4j2-test.yaml或log4j2-test.yml。json
若是没有找到这样的文件,JSON ConfigurationFactory将在classpath中查找log4j2-test.json或log4j2-test.jsn。api
若是找不到这样的文件,XML ConfigurationFactory将在classpath中查找log4j2-test.xml。app
若是找不到测试文件,ConfigurationFactory属性将在classpath上查找log4j2.properties。dom
若是找不到属性文件,YAML ConfigurationFactory将在classpath上查找log4j2.yaml或log4j2.yml。测试
若是找不到YAML文件,JSON ConfigurationFactory将在classpath上查找log4j2.json或log4j2.jsn。
若是找不到JSON文件,XML ConfigurationFactory将尝试在classpath上找到log4j2.xml(经常使用的配置)。
若是找不到配置文件,则将使用DefaultConfiguration。这将致使日志记录输出转到控制台。
trace: 字面含义追踪,能够查看程序的一步步推动调用,分析源码时,能够放开,通常不用。
debug: 调试开发时使用。
info: 通常一些须要后台监控的信息。
warn: 有些信息不是错误信息,可是也要给程序员的一些提示。
error: 错误信息。。
fatal: 级别比较高了。重大错误。
当日志级别设置为某个值的时候,低于它的日志信息将不会被输出到appender中,只有高于设置的级别的信息会被输出到appender中
Logger logger = LogManager.getLogger(xx.class().getName());
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <!-- 定义日志输出目录 --> <properties> <property name="LOG_HOME">${sys:catalina.base}/logs</property> <property name="LOG_FILE_NAME">manager</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <!-- 控制台只输出该level以上级别日志 onMatch符合条件 onMismatch不合符条件--> <!--<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>--> <!-- 定义日志输出格式 --> <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/> </Console> <!-- name 声明名称 fileName 当前日志名称 --> <RollingRandomAccessFile name="fileLog" fileName="${LOG_HOME}/${LOG_FILE_NAME}.log" filePattern="${LOG_HOME}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.log"> <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <DefaultRolloverStrategy max="20"/> </RollingRandomAccessFile> </Appenders> <Loggers> <!--<!– 声明这些包输出的日志级别–> <logger name="org.springframework" level="trace"> <AppenderRef ref="Console"/> </logger>--> <!-- 数据库操做单独处理 级别trace 再fileLog输出 additivity 解决重复输出--> <logger name="com.test.mapper" level="debug" additivity="false"> <AppenderRef ref="Console"/> </logger> <Root level="info"> <!-- 控制台--> <AppenderRef ref="Console"/> <!-- 日志目录 --> <AppenderRef ref="fileLog"/> </Root> </Loggers> </Configuration>
标签订义日志输出位置的信息,内部能够定义多种标签如<Console><RollingRandomAccessFile>等来设定不一样的输入位置。几个经常使用的appender标签:
ConsoleAppender: 将日志输出写入System.out或System.err,默认写入System.out
FileAppender、 RollingFileAppender、RandomAccessFileAppender、 RollingRandomAccessFileAppender :将日志写入文件中,
JDBCAppender和JPAAppender:写入关系型数据库中
NoSQLAppender:使用内部轻量级提供程序接口将日志事件写入NoSQL数据库。
SMTPAppender: 发生特定日志记录事件时发送电子邮件,一般是错误或致命错误
定义了一些必要的logger,logger表明用于输出日志信息的具体对象
<root>标签:root标签设置了一个默认的配置,当输出对象没有匹配的logger对象是,默认采用root配置
具体的<Logger>标签在默认状况下会继承<root>的全部配置,固然也能够自定义本身的配置,用于设定不一样输出对象
决定日志事件可否被输出。过滤条件有三个值:ACCEPT(接受), DENY(拒绝) or NEUTRAL(中立).
log4j2规定了四个位置能够设置filter:
上下文范围的过滤器直接在配置,即Configuration根目录下
Logger标签下
在一个appender元素。 这些过滤器能够防止或致使事件由追加器处理。
在追加器引用元素中。 这些过滤器用于肯定记录器是否应将事件路由到追加器。
比较经常使用的Filter:ThresholdFilter