java - 有没有办法根据日志的内容更改日志的级别?
问题描述
我正在使用 Logback 进行日志记录,在我的代码的几个地方,我有如下内容:
if(message.contains("kitten")) {
logger.info(message);
} else if (message.contains("wolf")) {
logger.error(message);
} else if(message.contains("chuck norris")) {
logger.fatal(message);
} else {
logger.warn(message);
}
(大多数时候消息来自外部系统)
有没有更丑陋的方法?
解决方案
由于您使用 logback 作为后端,并且您没有指定您正在使用的日志记录 API,我假设您使用的是 slf4j(logback 的本机 API)。不幸的是,这个 API 并不像人们希望的那样灵活。例如,log4j 2Logger.log
需要 a Level
,然后您可以像这样使用它:
logger.log(levelFor(message), message);
...
private Level levelFor(String message) {
if (message.contains("kitten"))
return Level.INFO;
else if...
return...
}
不幸的是,slf4j 没有Logger.log
方法。您可以使用 log4j2 作为您的 API,并使用适当的 jar 依赖项将其桥接到您的 logback 后端。
推荐阅读
- c++ - QT:即使在 setfocus() 之后也无法用键盘控制我的 QGraphicsPixmapItem
- redirect - Flask 中的 Redirect 和 url_for 通过 Gunicorn 和 Nginx 在 prod 服务器上添加域两次
- r - 在 R 中创建双数据透视表
- r - 即时预览您的文档
- javascript - 如何在 jquery 或 javascript 中更改 onclick location.href
- angular - 如何在组件 styleUrls 属性中有条件地加载 Rtl/Ltr css
- bash - 如何使用awk计算特定模式下特定条目的行数?
- reactjs - 使用 setState 方法更新嵌套对象格式的状态数据
- python - x 和 y 运行代码之间的 Python 时间。如果 xy 之间的时间没有代码
- amazon-redshift - 如何在 SQL Workbench/J 上提高导入速度