在logback.xml配置文件中的关键是logger的节点
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<File>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.error.log</File>
<rollingPolicy class="logback.rolling.log.gather.TimeBasedBackUpRollingPolicy">
<FileNamePattern>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.error.log.%i.zip
</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>25MB</MaxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${COMPONENT_ID}.${SEGMENT_ID} [%thread] [%logger{50}:%line] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="OTHER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<File>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.other.log</File>
<rollingPolicy class="logback.rolling.log.gather.TimeBasedBackUpRollingPolicy">
<FileNamePattern>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.other.%i.log.zip
</FileNamePattern>
<MinIndex>1</MinIndex>
<!--最多十个文件 -->
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>25MB</MaxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${COMPONENT_ID}.${SEGMENT_ID} [%thread] [%logger{50}:%line] - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="com.hikvision.ldap" level="DEBUG" additivity="false">
<appender-ref ref="OTHER" />
</logger>
这个意思是将com.hikvision.ldap下的类中的debug级别和以上级别的日志输出丢到other的文件日志中
<root level="WARN">
<appender-ref ref="OTHER" />
</root>
root节点的作用这个OTHER顶级是warn级别,指向这个的logger,如果指定级别就用自己的,比如info,最终就是info,additivity如果是true,则会向上级抛出的向root的,如果符合root级别会在打印一遍。(有点父类和子类的关系是的)
其中appender的配置表示打印到控制台(稍后详细讲解appender );
<logger name="logback" />将控制logback包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级<root>的日志级别“DEBUG”;
没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
没有设置appender,此loger本身不打印任何信息。
<root level="DEBUG">将root的打印级别设置为“DEBUG”,指定了名字为“STDOUT”的appender。
当执行logback.LogbackDemo类的main方法时,因为LogbackDemo 在包logback中,所以首先执行<logger name="logback" />,将级别为“DEBUG”及大于“DEBUG”的日志信息传递给root,本身并不打印;
root接到下级传递的信息,交给已经配置好的名为“STDOUT”的appender处理,“STDOUT”appender将信息打印到控制台;