对slf4j的理解:
slf4j只是一个日志抽象层,独立于其他所有的日志类库,需要配合其他的日志类库使用,例如logback,具体的日志级别输出、记录位置、日志格式通过具体的日志类库来实现;
slf4j能整合其他的日志类库,使得不同的日志类库能统一维护;
slf4j占位符{}功能利好,更好的输出日志;
对logback的理解:
logback是log4j创始人又一个日志开源组件;
logback包括三个jar:
logback-core,基础模块
logback-classic,为log4j的改良版本
logback-access,访问模块与Servlet容器集成提供通过Http来访问日志的功能。如何使用http访问日志?
slf4j和logback所需jar包:
logback-classic-0.9.29.jar
logback-core-0.9.29.jar // logback核心包
slf4j-api-1.6.2.jar // slf4j核心包
其他日志类库:
Log4j
commons logging
logback
java.util.logging
logback.xml相关说明:
打印日志格式pattern:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%method,%line] - %msg%n
%d // 输出时间,{}中间是时间格式
%thread // 线程名称
%-5level // 日志级别名称,从左显示5个字符宽度
%logger{36} // 日志所在类名,36标识名称最多输出36个字符
%method // 日志所在方法名
%line // 日志所在类行数
%msg // 日志信息
%n // 换行
日志打印级别从低级到高级排序的顺序是:
TRACE < DEBUG < INFO < WARN < ERROR
tomcat的日志记录:
tomcat记录日志在conf/logging.properties文件中配置
tomcat有如下几种日子类别:catalina、localhost、manager、admin、host-manager
其中用到最多的是catalina日志,该日志会将tomcat的启动日志、java程序logback等打印的日志、以及jar中打印的日志全部打印
在conf/logging.properties关闭catalina日志:1catalina.org.apache.juli.FileHandler.level = OFF
项目结构:
package com.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
private static final Logger log = LoggerFactory.getLogger(LogTest.class);
private static void test(){
log.info("info周星星喜欢,{}", "白晶晶");
log.debug("debug周星星喜欢,{}", "紫霞");
log.warn("warn周星星喜欢,{}", "牛魔王的妹妹");
log.error("error周星星喜欢,{}", "达叔");
log.info("info周星星电影:{}、{}", new String[]{"唐伯虎点秋香","大话西游"});
}
public static void main(String[] args) {
test();
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="LOG_HOME" value="/home/tomcatlog/logs/ibutler" />
<!-- 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%method,%line] - %msg%n</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/ibutler.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<fileNamePattern>${LOG_HOME}/ibutler.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<!-- 日志文件保留天数 -->
<maxHistory>365</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%method,%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
<!-- <appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>xxxx.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>xxxx.log.%i.bak</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>12</MaxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender> -->
<!-- 指定特定包名下的日志输出,例如特别指定com.test下的日志级别为warn -->
<!-- level 输出指定日志级别以上的日志,日志级别大小关系:TRACE<DEBUG<INFO<WARN<ERROR -->
<!-- appender-ref 指定输入日志形式 -->
<!-- <logger name="com">
<level value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger> -->
<!-- 指定所有的日志的级别,优先级比logger设置的优先级高 -->
<root level="debug">
<appender-ref ref="STDOUT" />
<!-- <appender-ref ref="FILE" /> -->
</root>
</configuration>