Have lots of ideas and throw away the bad ones. You aren't going to have good ideas unless you have lots of ideas and some sort of principle of selection. —LINUS PAULING
logback 其他系列请参考:
http://wangxinchun.iteye.com/blog/2101653
http://wangxinchun.iteye.com/blog/2094761
------------------------------------------filter----------------------------------------------------------------------
在logback 中为了对日志做更精细的控制,appender 标签可以配置多个filter标签。
说明:每个自定义的filter 都需要继承ch.qos.logback.core.filter.Filter类,并实现 decide(ILoggingEvent event) 方法。这方法会返回一个FilterReply枚举对象,有三个可选值:DENY, NEUTRAL or ACCEPT。如果返回DENY 那么event直接被抛弃,不被记录也无需参考下一个filter,如果是ACCEPT那么直接记录无需参考下一个filter,如果是NEUTRAL 那么由下一个filter判断,如果没有下一个filter,那么会直接记录。
最基本的一个自定义filter案例:
Filter code:
/**
* 自定义filter 功能:如果日志的内容超过10个字符,抛弃掉
* @author wangxinchun1988@163.com
* @date 2014-8-13上午11:10:25
*/
public class LogFilter extends Filter<ILoggingEvent> {
@Override
public FilterReply decide(ILoggingEvent event) {
if (event.getFormattedMessage().toString().length()< 10 ) {
return FilterReply.ACCEPT;
} else {
return FilterReply.DENY;
}
}
}
logback.xml 配置
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>rooling.log</file>
<filter class="com.qunar.logback.LogFilter" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>rooling-log.%d{yyyy-MM-dd-HH}.log.gz</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%thread] %-5level %logger{35} - %msg%n </pattern>
</encoder>
</appender>
测试case:
@Test
public void testLogback() throws InterruptedException {
long l = System.currentTimeMillis();
for(int i=0;i<30;i++){
logger.info("hello {} ", wrapLog(i));
}
System.out.println(System.currentTimeMillis() - l);
Thread.currentThread().sleep(1000);
}
private String wrapLog(int logLength){
StringBuilder sb = new StringBuilder();
for(int i=0;i<logLength;i++){
sb.append("a");
}
return sb.toString();
}
输出:
[main] INFO com.qunar.logback.LogbackTest - hello
[main] INFO com.qunar.logback.LogbackTest - hello a
[main] INFO com.qunar.logback.LogbackTest - hello aa
[main] INFO com.qunar.logback.LogbackTest - hello aaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaaaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaaaaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaaaaaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaaaaaaaa
[main] INFO com.qunar.logback.LogbackTest - hello aaaaaaaaaaaa
结论:日志超过10个字符的都被DENY 了。
同样 logback 默认提供了其他的filter
ch.qos.logback.classic.filter.LevelFilter:级别限制,可以指定某个日志文件只输出某一级别的日志。
ch.qos.logback.classic.filter.ThresholdFilter:级别限制,可以限制不输出低于某一级别的日志。
LevelFilter源代码如下:
public class LevelFilter extends AbstractMatcherFilter<ILoggingEvent> {
Level level;
@Override
public FilterReply decide(ILoggingEvent event) {
if (!isStarted()) {
return FilterReply.NEUTRAL;
}
if (event.getLevel().equals(level)) {
return onMatch;
} else {
return onMismatch;
}
}
public void setLevel(Level level) {
this.level = level;
}
public void start() {
if (this.level != null) {
super.start();
}
}
}
为了灵活支持简单的逻辑判断,以避免创建自定义的filter,logback 提供了EvaluatorFilter 允许逻辑判断代码。
配置的相关变量如下表:
xml 配置如下:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return message.contains("billing");</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger - %msg%n
</pattern>
</encoder>
</appender>
以上配置,如果log的内容中有billing 是不会输出的。和日志输出级别没有任何关系
------------------------------------------------MDC----------------------------------------------------------------------
mdc:Mapped Diagnostic Context
mdc 是用来application保存上下文信息的。可以通过mdc的put方法设置kev value信息,然后在日志里面输出value,比如ip或域名,在根据域名来区分业务线的情况来说,对业务的跟踪很有帮助。
case案例如下:
<encoder>
<pattern>[%X{ip} %X{domain}][%thread] %-5level %logger{35} - %msg%n </pattern>
</encoder>
注意通过:%X{key} 来取得MDC put的值。
java use case 如下:
@Test
public void testLogback() throws InterruptedException {
MDC.put("ip", "192.168.1.5");
MDC.put("domain", "wxc.trade.qunar.com");
for(int i=0;i<30;i++){
logger.info("hello {} ", wrapLog(i));
}
}
输出:
[192.168.1.5 wxc.trade.qunar.com][main] INFO com.qunar.logback.LogbackTest - hello
[192.168.1.5 wxc.trade.qunar.com][main] INFO com.qunar.logback.LogbackTest - hello a
[192.168.1.5 wxc.trade.qunar.com][main] INFO com.qunar.logback.LogbackTest - hello aa
[192.168.1.5 wxc.trade.qunar.com][main] INFO com.qunar.logback.LogbackTest - hello aaa
[192.168.1.5 wxc.trade.qunar.com][main] INFO com.qunar.logback.LogbackTest - hello aaaa
。。。
注意:每条日志的前面有了ip 和 domain的信息。
- 大小: 1.1 MB
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1、文件内容:perl-Locale-Maketext-1.23-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Locale-Maketext-1.23-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:pcre2-utf16-10.23-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pcre2-utf16-10.23-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
电脑调音软件下载是专为汽车音响爱好者和专业人士设计的一款强大工具, 这款软件的主要功能在于帮助用户对车载音频系统进行精确的数字信号处理,以提升音乐播放效果,提供更丰富的听觉体验。
1、文件内容:perl-IO-Compress-2.061-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-IO-Compress-2.061-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
MATLAB仿真实验:电动汽车有序充放电的机组组合与最优潮流算法研究——基于MILP与二阶锥松弛技术,MATLAB代码:考虑电动汽车有序充放电的机组组合和最优潮流 关键词:电动汽车 MILP 最优潮流 参考文档:《A bi-layer optimization based temporal and spatial scheduling for large-scale electric vehicles》 仿真平台:MATLAB YALMIP GUROBI 主要内容:机组组合采用原文相同的线性化方法 最优潮流采用二阶锥松弛替代原文算法 结果完全相同 ,电动汽车; MILP; 最优潮流; 二阶锥松弛; 线性化方法,基于MILP与二阶锥松弛的电动汽车有序充放电最优潮流仿真研究
基于麻雀搜索算法优化SVR回归预测模型:以身体脂肪含量数据集的精准预测为研究对象,基于麻雀搜索算法优化SVR回归预测模型 输入不限,单输出 数据选用:身体脂肪含量数据集 针对SVR回归预测模型采用麻雀搜索算法 ,基于麻雀搜索算法; SVR回归预测模型优化; 身体脂肪含量数据集; 算法优化SVR模型,基于麻雀搜索算法优化SVR预测身体脂肪含量模型
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
deepseek janus本地部署资料
1、文件内容:perl-Env-1.04-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Env-1.04-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于蒙特卡洛模拟法的风光场景生成与削减:深度解析风光出力模型及其实证研究,21-基于蒙特卡洛模拟法的风光场景生成与削减 摘要:代码主要做的是风光场景的生成与削减,首先对风光出力概率分布模型进行建模,分布以Beta模型以及Weibull分布模型描述光伏和风电出力的形状参数,并继而根据蒙特卡洛法模拟出1000次风光出力场景,最后通过概率距离对场景进行削减,直至生成5个场景。 本代码几乎一行一注释,相关公式我已经整理成文档供参考,绝对是目前最为细致的风光场景生成与削减的学习资料,欢迎来辨注释程度、出图效果可以见下图哦 优质服务:1、代码非常精品,注释几乎一行一注释; 5、本代码不提供本代码不提供 6、代码买前问清楚,一经不 不一经不 不 ,基于蒙特卡洛模拟法的风光场景生成与削减; 风光出力概率分布模型; Beta模型; Weibull分布模型; 蒙特卡洛法模拟; 场景削减; 注释详细的代码; 出图效果。,基于蒙特卡洛模拟法的风光场景生成与削减技术详解
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1、文件内容:perl-HTTP-Date-6.02-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-HTTP-Date-6.02-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
globalmousekeyhook InputSimulator