logback

logback

1.性能比log4j要好

2.配置获取顺序

	logback在启动的时候,会按照下面的顺序加载配置文件
	1.如果java程序启动时指定了logback.configurationFile属性,就用该属性指定的配置文件。如java -Dlogback.configurationFile=/path/to/mylogback.xml Test ,这样执行Test类的时候就会加载/path/to/mylogback.xml配置
	2.在classpath中查找 logback.groovy 文件
	3.在classpath中查找 logback-test.xml 文件
	4.在classpath中查找 logback.xml 文件

3.logger以及root节点

	root节点和logger节点其实都是表示Logger组件。个人觉的可以把他们之间的关系可以理解为父子关系,root是最顶层的logger,正常情况getLogger("name/class")没有找到对应logger的情况下,都是使用root节点配置的logger。
	如果配置了logger,并且通过getLogger("name/class")获取到这个logger,输出日志的时候,就会使用这个logger配置的appender输出,同时还会使用rootLogger配置的appender。我们可以使用logger节点的additivity="false"属性来屏蔽rootLogger的appender。这样就可以不使用rootLogger的appender输出日志了。
	关于logger的获取,一般logger是配置name的。我们再代码中经常通过指定的CLass来获取Logger,比如这样LoggerFactory.getLogger(Test.class);,其实这个最后也是转成对应的包名+类名的字符串com.kongtrio.Test.class。假设有一个logger配置的那么是com.kongtrio,那么通过LoggerFactory.getLogger(Test.class)获取到的logger就是这个logger。

4.具体配置demo(单独某个或者某些class生成日志文件)

<?xml version="1.0" encoding="UTF-8"?>
<!--configuration节点相关属性-->
<!--debug	false	要不要打印 logback内部日志信息,true则表示要打印。建议开启-->
<!--scan	true	配置发送改变时,要不要重新加载-->
<!--scanPeriod	1 seconds	检测配置发生变化的时间间隔。如果没给出时间单位,默认时间单位是毫秒-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--configuration子节点介绍-->
    <!--contextName节点 设置日志上下文名称,后面输出格式中可以通过定义 %contextName 来打印日志上下文名称-->
    <!--property节点 用来设置相关变量,通过key-value的方式配置,然后在后面的配置文件中通过 ${key}来访问-->
    <!--appender节点 日志输出组件,主要负责日志的输出以及格式化日志。常用的属性有name和class-->
        <!--name	无默认值	appender组件的名称,后面给logger指定appender使用-->
        <!--class	无默认值	appender的具体实现类。常用的有 ConsoleAppender、FileAppender、RollingFileAppender-->
            <!--ConsoleAppender:向控制台输出日志内容的组件,只要定义好encoder节点就可以使用。-->
            <!--FileAppender:向文件输出日志内容的组件,用法也很简单,不过由于没有日志滚动策略,一般很少使用-->
            <!--RollingFileAppender:向文件输出日志内容的组件,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件。-->
<contextName>bm</contextName>
<property name="log.path" value="log" />
<property name="log.maxHistory" value="15" />
<property name="log.colorPattern" value="%d{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger) | %msg%n"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n" />

<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${log.colorPattern}</pattern>
    </encoder>
</appender>

<!--输出到文件-->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--定义文件滚动时的文件名的格式-->
        <fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
        <!--15天的时间周期,日志量最大20GB-->
        <!--<MaxHistory>${log.maxHistory}</MaxHistory>-->
        <!--<totalSizeCap>20GB</totalSizeCap>-->
    </rollingPolicy>
    <encoder>
        <!--定义控制台输出格式-->
        <pattern>${log.pattern}</pattern>
    </encoder>
    <!--定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来-在slf4j中,从小到大的日志级别依旧是trace、debug、info、warn、error -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>
    <encoder>
        <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<!--root是默认的logger 这里设定输出级别是debug-->
<root level="debug">
    <appender-ref ref="console" />
</root>

<root level="info">
    <appender-ref ref="file_info" />
    <appender-ref ref="file_error" />
</root>

<!--单独某个或者某些class生成日志文件 结算日志文件-->
<appender name="SettlementDetailControllerAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${log.path}/moneyCount/error.%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>
    <encoder>
        <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>
<!--additivity 子Logger 是否继承 root的Logger 的 输出源(appender) 的标志位 如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
<logger name="com.sunits.bm.settlement.controller.SettlementDetailController" level="${logging.level}" additivity="false">
    <appender-ref ref="SettlementDetailControllerAppender" />
</logger>

5.方法内日志单独保存到相关文件

1.xml建立相关logger
	<logger name="testlog" level="${logging.level}" additivity="false">
		<appender-ref ref="SettlementDetailControllerAppender" />
	</logger>
2.在相关方法或者类中中写上  Logger testlog = LoggerFactory.getLogger("testlog"); 然后开始使用即可
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值