1、需要引入maven配置
ch.qos.logback
logback-classic
1.0.0
这个会依赖slf4j-api和logback-core。
ch.qos.logback
logback-access
1.1.5
所有的jar包
logback-access-1.0.0.jar
logback-classic-1.0.0.jar
logback-core-1.0.0.jar
slf4j-api-1.6.0.jar
2、LoggerFactory.getLogger()方法可以传递两种参数。自己起的名字和类.class。主要在打印的日志里有所区分
3、logback有默认的配置,会读取项目里的logback.xml和logback-test.xml配置文件
4、配置文件里可以设置到类级别的打印日志
5、appender里加上filter可以使文件里只打印改类型的日志
6、通过定义包来打印框架的日志
7、xml配置里如果使用变量来定义参数,那么就得 ,切记加
8、打印info级别日志时如果getLogger()参数是自定义的string的话,可能会引起无法输出日志的问题
配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 日志存放路径 存放于tomact的log-->
<property name="LOG_PATH" value="../logs" />
<!-- error的日志 -->
<appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/all_error.log</File>
<!-- 所有ERROR级别的日志文件打印在一个文件里 过滤器只会过滤对应的日志 -->
<!--过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志 将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。过滤器被添加到<Appender> 中,为<Appender> 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。<Appender> 有多个过滤器时,按照配置顺序执行-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<!-- 用于配置符合过滤条件的操作 -->
<onMatch>ACCEPT</onMatch>
<!-- 用于配置不符合过滤条件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/all_error.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>5</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</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>
<!-- common下的类打印日志 -->
<appender name="commonLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/common.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/common.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>5</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</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>
<!-- front下的类打印日志 -->
<appender name="frontLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/front.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/front.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</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>
<!-- job下的类打印日志 -->
<appender name="jobLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/job.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/job.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</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>
<!-- remote下的类打印日志 -->
<appender name="remoteLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/remote.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/remote.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</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>
<!-- service下的类打印日志 -->
<appender name="serviceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/service.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/service.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</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>
<!-- 支付日志 -->
<appender name="payLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/pay.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/pay.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</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>
<logger name="com.galaxy.fym.common" level="ERROR">
<appender-ref ref="commonLog"/>
</logger>
<logger name="com.galaxy.fym.front" level="ERROR">
<appender-ref ref="frontLog"/>
</logger>
<logger name="com.galaxy.fym.job" level="INFO">
<appender-ref ref="jobLog"/>
</logger>
<logger name="com.galaxy.fym.remote" level="INFO">
<appender-ref ref="remoteLog"/>
</logger>
<logger name="com.galaxy.fym.service" level="INFO">
<appender-ref ref="serviceLog"/>
</logger>
<logger name="com.galaxy.fym.pay.Pay" level="INFO">
<appender-ref ref="payLog"/>
</logger>
<!-- 框架的输出 -->
<!--<logger name="org.springframework.core" value="ERROR" />
<logger name="org.springframework.beans" value="ERROR" />
<logger name="org.springframework.context" value="ERROR" />
<logger name="org.springframework.web" value="ERROR" />
<logger name="org.apache.zookeeper" value="ERROR" />-->
<!-- 对所有的class文件都会起效果 -->
<root>
<appender-ref ref="errorLog"/>
</root>
</configuration>
这个是项目里实际用到的配置,踩了很多坑总结出来的
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 日志总开关,统一在此处配置 -->
<property name="LOG_LEVEL" value="ERROR" />
<!-- 日志存放路径 -->
<property name="LOG_PATH" value="../logs" />
<jmxConfigurator />
<!-- error的日志 -->
<appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 一定要加$符号,不然产生不了文件-->
<File>${LOG_PATH}/error.log</File>
<!-- 所有ERROR级别的日志文件打印在一个文件里 过滤器只会过滤对应的日志 -->
<!--过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。
过滤器被添加到<Appender> 中,为<Appender> 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。<Appender> 有多个过滤器时,按照配置顺序执行-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>${LOG_LEVEL}</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/error.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>5</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</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>
<!-- info的日志 记录业务日志-->
<appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/info.log</File>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/info.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>5</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</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>
<!-- 控制台输出日志 -->
<appender name="stdoutAppender" 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} - %msg%n</pattern>
</layout>
</appender>
<!-- 业务代码日志直接输出在控制台里或者业务日志 -->
<logger name="com.galaxy.wz" level="INFO">
<appender-ref ref="stdoutAppender" />
<appender-ref ref="infoLog" />
</logger>
<!-- 对所有的class文件都会起效果 root也可以设置级别的,默认是DEBUG,这里可以记录整个项目所产生的报错日志,当然可以分业务定义 -->
<root level="${LOG_LEVEL}">
<appender-ref ref="errorLog"/>
</root>
</configuration>