Java 业务开发常见错误 100 例
朱晔
贝壳金服资深架构师
52944 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
代码篇 (23讲)
Java 业务开发常见错误 100 例
15
15
1.0x
00:00/00:00
登录|注册

答疑篇:代码篇思考题集锦(三)

MultipleLevelsFilter
EvaluatorFilter
利用PropertySources实现配置文件属性值自动赋值
Spring AOP的指示器
解决Bean产生循环依赖的问题
注解注入Bean的区别
避免Groovy动态执行脚本产生大量类
Spring的ConcurrentReferenceHashMap
MySQL中datetime和timestamp的区别
Date类的toString方法
Jackson2ObjectMapperBuilder类源码分析
RedisTemplate的序列化
Java的File类和Files类的操作原子性
Files类中的流式处理
文件日志分割和归档配置
Logback配置
问题2
问题1
问题2
问题1
问题2
问题1
问题2
问题1
问题2
问题1
问题2
问题1
问题2
问题1
答疑篇:日志、文件IO、OOM、Spring框架等相关思考题集锦
参考文章
思考题集锦知识关系脑图

该思维导图由 AI 生成,仅供参考

你好,我是朱晔。
今天,我们继续一起分析这门课第 13~20 讲的课后思考题。这些题目涉及了日志、文件 IO、序列化、Java 8 日期时间类、OOM、Java 高级特性(反射、注解和泛型)和 Spring 框架的 16 道问题。
接下来,我们就一一具体分析吧。

13 | 日志:日志记录真没你想象的那么简单

问题 1:在讲“为什么我的日志会重复记录?”的案例时,我们把 INFO 级别的日志存放到 _info.log 中,把 WARN 和 ERROR 级别的日志存放到 _error.log 中。如果现在要把 INFO 和 WARN 级别的日志存放到 _info.log 中,把 ERROR 日志存放到 _error.log 中,应该如何配置 Logback 呢?
答:要实现这个配置有两种方式,分别是:直接使用 EvaluatorFilter 和自定义一个 Filter。我们分别看一下。
第一种方式是,直接使用 logback 自带的 EvaluatorFilter:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
<expression>
e.level.toInt() == WARN.toInt() || e.level.toInt() == INFO.toInt()
</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>NEUTRAL</OnMatch>
</filter>
第二种方式是,自定义一个 Filter,实现解析配置中的“|”字符分割的多个 Level:
public class MultipleLevelsFilter extends Filter<ILoggingEvent> {
@Getter
@Setter
private String levels;
private List<Integer> levelList;
@Override
public FilterReply decide(ILoggingEvent event) {
if (levelList == null && !StringUtils.isEmpty(levels)) {
//把由|分割的多个Level转换为List<Integer>
levelList = Arrays.asList(levels.split("\\|")).stream()
.map(item -> Level.valueOf(item))
.map(level -> level.toInt())
.collect(Collectors.toList());
}
//如果levelList包含当前日志的级别,则接收否则拒绝
if (levelList.contains(event.getLevel().toInt()))
return FilterReply.ACCEPT;
else
return FilterReply.DENY;
}
}
然后,在配置文件中使用这个 MultipleLevelsFilter 就可以了(完整的配置代码参考这里):
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文涵盖了多个技术领域的问题,包括日志、文件IO、OOM、Spring框架等。涉及了日志记录、文件操作的原子性、Redis序列化方式、Jackson2ObjectMapperBuilder类源码实现细节、Date类的toString方法输出时区字样的原因,以及MySQL中datetime和timestamp数据类型的区别。此外,还讨论了Spring的ConcurrentReferenceHashMap、Groovy动态语言执行脚本、Synthetic方法生成、注解继承、Bean注入方式的区别和循环依赖解决方式等内容。文章内容涉及多个技术领域,对于技术人员具有一定的参考价值。同时,还介绍了Spring AOP中的指示器作用和利用PropertySource实现配置文件中属性值的自动赋值的方法。这些内容涵盖了广泛的技术知识,对读者快速了解文章概览具有一定的帮助。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 业务开发常见错误 100 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 就是这样
    特别赞,受益良多
    2020-07-24
    2
  • giteebravo
    在使用 @Autowired 时,什么情况下会使用 required = false 允许注入 null 呢?
    2021-07-09
    1
  • Ethan New
    赞赞赞
    2023-01-15归属地:浙江
  • 李和桃
    2021-02-18
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部