【日常记录-Java】代码配置Logback

devtools/2024/11/14 20:40:02/

1. 简介

        在Logback中,推荐使用配置文件(如logback.xml或logback-spring.xml)来设置日志记录的行为。但在实际应用中,会有动态配置logback的需求。此时可通过编程的方式直接操作LoggerContext以及相关的Logger、Appender、Encoder等组件来实现。

2. 代码示例

// step1: 获取LoggerContext的实例,要求其具体实现为logback(通过SPI指定)
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();// step2: 进行设置
try {// step2.1: 创建RollingFileAppender并进行配置RollingFileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<>();fileAppender.setContext(context);fileAppender.setFile("/logs/service.log");// step2.2: 创建滚动策略TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<>();rollingPolicy.setContext(context);rollingPolicy.setFileNamePattern("/logs/service.%d{yyyy-MM-dd}.log");rollingPolicy.setMaxHistory(30);fileAppender.setRollingPolicy(rollingPolicy);rollingPolicy.setParent(fileAppender);  // 该条语句非常关键rollingPolicy.start();// step2.3: 创建EncoderPatternLayoutEncoder encoder = new PatternLayoutEncoder();encoder.setContext(context);encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n");encoder.start();fileAppender.setEncoder(encoder);// step2.4: 创建Filter,设定只输出INFO和ERROR级别LevelFilter infoFilter = new LevelFilter();infoFilter.setContext(context);infoFilter.setLevel(Level.INFO);infoFilter.setOnMatch(FilterReply.ACCEPT);infoFilter.setOnMismatch(FilterReply.NEUTRAL);infoFilter.start();LevelFilter errorFilter = new LevelFilter();errorFilter.setContext(context);errorFilter.setLevel(Level.ERROR);errorFilter.setOnMatch(FilterReply.ACCEPT);errorFilter.setOnMismatch(FilterReply.DENY);errorFilter.start();fileAppender.addFilter(infoFilter);fileAppender.addFilter(errorFilter);// step2.5: 启动FileAppenderfileAppender.start();// step2.6: 配置ROOT的日志级别以及Appendercontext.getLogger(Logger.ROOT_LOGGER_NAME).addAppender(fileAppender);context.getLogger(Logger.ROOT_LOGGER_NAME).setLevel(Level.INFO);
} catch (Exception e) {throw new RuntimeException(e);
}


http://www.ppmy.cn/devtools/133995.html

相关文章

【bayes-Transformer-GRU多维时序预测】多变量输入模型。matlab代码,2023b及其以上

% 1. 数据准备 X_train 训练数据输入; Y_train 训练数据输出; X_test 测试数据输入; % 2. 模型构建 inputSize size(X_train, 2); numHiddenUnits 100; numResponses 1; layers [ … sequenceInputLayer(inputSize) biLSTMLayer(numHiddenUnits, ‘OutputMode’, ‘se…

Java开发人员从零学习ArkTs笔记(二)-函数与类

大家好&#xff0c;我是一名热爱Java开发的开发人员。目前&#xff0c;我正在学习ARKTS&#xff08;Advanced Java Knowledge and Technology Stack&#xff09;&#xff0c;并将不断输出我的学习笔记。我将在这里分享我学习ARKTS的过程和心得&#xff0c;希望能够为其他开发人…

使用 Visual Studio Installer 彻底卸载 Visual Studio方法与下载

使用 VisualStudioUninstaller 卸载 Visual Studio 的详细步骤&#xff08;以管理员权限运行&#xff09; 步骤 1&#xff1a;下载并解压 VisualStudioUninstaller 访问下载工具。 点击下载 解压下载的文件到本地目录&#xff0c;例如&#xff1a;C:\VSUninstaller。 步骤 …

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…

2024 - 苹果审核规则小结

苹果审核千奇百怪&#xff0c;能不能过审核&#xff0c;一方面看实力&#xff0c;一方面也看行情和运气。 有些核心的&#xff0c;需要测试非常久的规则我不能说&#xff0c;但是有些花费点时间&#xff0c;消耗个五六个账号就可以测试出来的规则&#xff0c;可以说一说。 本…

uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器&#xff0c;可以用作多级分类的场景。本人引入插件后&#xff0c;发现&#xff0c;在h5和微信小程序都只能选择到叶子级。而在给出的官方组件示例中确并非如此。 以选择年级&#xff0c;而不选择班级。然后&#xff0c;想试试…

ubuntu[无桌面]——使用FileZilla连接本地和虚拟机实现文件共享

在虚拟机上跑命令的时候&#xff0c;有时候需要使用到一些在本机上的文件&#xff0c;但是由于安装的Ubuntu是无桌面的&#xff0c;那么怎么去实现将本地文件拖放到虚拟机上捏&#xff0c;这里记录一下 FileZilla的操作&#xff0c;以及一些问题的解决。 &#xff08;1&#xf…

材质(二)——材质参数化,从源材质继承生成不同的材质实例

继承原材质&#xff0c;对外提供参数。 更改调制不同的参数&#xff0c;生成不同的材质实例。 类似于&#xff0c;类的继承。有一个基类Base.继承生成为子类 A_Base,B_Base,C_Base