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 条评论
登录 后参与评论

相关文章

来自专栏石奈子的Java之路

原 荐 SpringBoot 2.0 系列0

2384
来自专栏大魏分享(微信公众号:david-share)

怎样一个金箍圈(Pipeline),让至尊宝(Openshift)完成了到孙悟空(DevOps)的蜕变

但说出这句话,和实现Devops全工具链落地之间的差距,与造出原子弹和E=MC2公式的差距,实不逞多让。

5464
来自专栏Python与爬虫

佛系编程[如何创建一个安全可靠的应用程序]

推荐最近在GitHub上很火的一个项目,按照介绍,你也可以创建一个安全可靠的应用程序 项目地址在>>> nocode https://github.com/k...

4359
来自专栏Java技术分享

maven build时报错

可能原因有很多个,  1. maven私服连不上了, 有一些jar包没有下载到本地, 或者是私服的路径配置错误

2866
来自专栏我的博客

Lumen5.X使用频率限制组件笔记

编写中间件,是根据vendor/illuminate/routing/Middleware/ThrottleRequests.php改写 备注:需要先...

39412
来自专栏xingoo, 一个梦想做发明家的程序员

IP多播

                      1   多播地址                     IP多播地址采用D类IP地址确定多播的组,地址范围是224...

2545
来自专栏java达人

SpringMVC下Excel文件的上传下载

在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据、下载统计数据等等场景。针对这个问题,我写了个基于SpringMVC的简单上传下载示...

3059
来自专栏阿杜的世界

在Spring Boot项目中使用Spock框架

Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring Boot项目中使用该框架写优雅、高效以及DSL...

2661
来自专栏Duncan's Blog

springmvc-mybatis

本文基于原文http://doc.okbase.net/fengshizty/archive/126397.html配置环境。 首先说说几个问题 1.关于Myb...

1433
来自专栏后台及大数据开发

kubernetes集群搭建(6):kubernetes基本使用演示

流程: 用户访问client应用,client应用中调用server应用,由于部署了多节点,client在访问server时应该配置server 暴露的虚拟IP...

1322

扫码关注云+社区

领取腾讯云代金券