专栏首页光变Logback动态配置.01_Appender

Logback动态配置.01_Appender

Java程序运行时,动态修改Logger的appender。

背景

在程序运行的时候,有的时候需要动态修改Logger的级别,增加、删除、修改Logger的Appender。

代码

Java代码如下:

import java.io.IOException;
import java.nio.charset.Charset;

import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.FileAppender;

/**
 * Log修改管理
 *
 * @author bash
 * @version V1.0
 * @since 2016-03-21 10:53
 */
public class LoggerDynamicConfig {

    /**
     * 日志记录Logger
     */
    private static final Logger LOG = (Logger) LoggerFactory.getLogger(LoggerDynamicConfig.class);

    @Test
    public void addAppender() throws IOException {
        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

        /*这里配置encodeer。*/
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setCharset(Charset.forName("UTF-8"));
        encoder.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
        encoder.setImmediateFlush(true);
        encoder.setContext(lc);

        /*这里启配置appender*/
        FileAppender appender = new FileAppender();
        appender.setEncoder(encoder);
        appender.setFile("/home/bash/workspace/temp/test.log");
        appender.setName("TestFile");
        appender.setAppend(false);
        appender.setContext(lc);

        /*这里启动encoder和appender。*/
        encoder.start();
        appender.start();

        LOG.addAppender(appender);
        LOG.info("这里时一条所有appender都可以输出的数据。");
        
        /*修改Logger级别*/
        LOG.setLevel(Level.ERROR);
        LOG.info("这里的数据所有appender都不会输出。");
        LOG.error("这里时一条所有appender都可以输出的数据。");
        /*删除appender*/
        LOG.detachAppender("TestFile");
        LOG.error("这条数据不会在FileAppender中输出。");
    }
}

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Apache CollectionUtils使用指南

    对集合判定‘空’的操作使用Apache的commons-collection的工具包。

    白凡
  • SpringMVC 使用Valid注解校验数据

    白凡
  • 『C』ubuntu命令大合集

    查看软件xxx安装内容dpkg -L xxx查找软件库中的软件apt-cache search 正则… 查看软件xxx安装内容 dpkg -L xxx 查找软...

    白凡
  • 分布式一致性机制整理

    分布式中一致性是非常重要的,分为弱一致性和强一致性。现在主流的一致性协议一般都选择的是弱一致性的特殊版本:最终一致性。下面就从分布式系统的基本原则讲起,再整理一...

    用户1516716
  • NDK启航篇——C语言基础(联合体)

    longzeqiu
  • Meteor 1.6.x + Ant Design Table + recompose 实现数据分页效果

    我与梦想有个约会
  • Meteor 1.6.x + Ant Design Table + recompose 实现数据分页效果

    我与梦想有个约会
  • 第十四天、二分查找

    题目     采用二分查找法查找特定关键字的元素。要求用户输入数组长度,也就是有序表的数据长度,并输入数组元素和查找的关键字。程序输出查找成功与否,以及成功...

    Jack_Cui
  • 基础知识 | 每日一面(69)

    小林:int main(), int main(void) 或者 int main(int argc, char *argv[]) (显然 argc 和argv...

    C语言入门到精通
  • 45个值得收藏的 CSS 形状

    CSS能够生成各种形状。正方形和矩形很容易,因为它们是 web 的自然形状。添加宽度和高度,就得到了所需的精确大小的矩形。添加边框半径,你就可以把这个形状变成圆...

    Fundebug

扫码关注云+社区

领取腾讯云代金券