A logger is said to be an ancestor of another logger if its name followed by a dot is a prefix of the descendant logger name. A logger is said to be a parent of a child logger if there are no ancestors between itself and the descendant logger。For example, the logger named "com.foo" is a parent of the logger named "com.foo.Bar". Similarly, "java" is a parent of "java.util" and an ancestor of "java.util.Vector". This naming scheme should be familiar to most developers
1. 上面的六个日志级别，从上到下级别逐次提高。A logging request(即调用logger的日志输出方法debug，info，war，error等) is said to be enabled if its level is higher than or equal to the level of its logger. Otherwise, the request is said to be disabled. A logger without an assigned level will inherit one from the hierarchy.
The inherited level for a given logger C, is equal to the first non-null level in the logger hierarchy, starting at C and proceeding upwards in the hierarchy towards the root logger.
如果root logger的日志级别进行了设置，那么所有的logger，都会有不为空的日志级别。实际项目开发中，应该为root logger指定一个默认的日志级别。那面的两个表格是两个日志级别继承的例子：
- DailyRollingFileAppender 按日期滚动文件
- RollingFileAppender 按文件大小滚动文件
- ConsoleAppender 打印到控制台
- JDBCAppender 将日志打印到数据库中
- JMSAppender 将日志打印到JMS中
- SocketAppender 将日志打印到log服务器(LogEvent对象序列化到日志服务器)
1. Each enabled logging request for a given logger will be forwarded to all the appenders in that logger as well as the appenders higher(higher here means the hierarchy relationship of logger) in the hierarchy. In other words, appenders are inherited additively from the logger hierarchy. For example, if a console appender is added to the root logger, then all enabled logging requests will at least print on the console. If a file appender is also added to a logger, say C, then enabled logging requests for C and C's children will print on a file and on the console. It is possible to override this default behavior so that appender accumulation is no longer additive by setting the additivity to false.
2. Loggers have their additivity flag set to true by default.
The output of a log statement of logger C will go to all the appenders in C and to all appenders that are defined in its ancestors. This is the meaning of the term "appender additivity".However, if an ancestor of logger C, say P, has the additivity flag set to false, then C's output will be directed to all the appenders in C and its ancestors upto and including P but not the appenders in any of the ancestors of P.