1. 背景
2. 快速体验
3. 日志历史梳理
4. 接入wxLog到你的项目
PM:这期的活动项目当用户参与人数达到250人的时候麻烦通知我一下,我要看下效果决定是否群发推送或者下掉活动。
我:为啥非得是250人?
PM:图个吉利。
我:额,一定要刚好250吗?
PM:是的,拜托了开发爸爸。
既然产品都叫爸爸了,咱们也不好拒绝啊不是?但是咱也不能上线后一直盯着生产数据看啊,em....这是个问题....
好吧,以上都是我YY的,言归正传。我们平时在业务开发中,除了上面的应用场景还有很多,如:对接三方接口服务出错、阈值触发、异常请求等业务相关需要报警的场景有很多。干脆索性就想搞一个能在生活中任何时候实时主动通知我的玩意儿,短信?电话?但要成本啊,就想到我们每天都不离手的微信。然后通知的方式既不想对代码有太大的侵入性,又想实现起来简单优雅,还想要兼容以前的代码,于是想到了日志框架打日志的方式。于是,weixin+ log = wxLog 诞生了!
克隆项目到自己本地
git clone https://github.com/wirechen/wxLog.git
获取openid 关注微信公众号【wirechen】,点击【微信报警】在子栏目选择【openid】即可获取。
log4j.xml
配置文件,在openIds
一栏输入添加自己的openidTest
中的main方法说实话,开发wxLog之前我对SLF4j、log4j、log4j-core、log4j-api、logback、Java Util Logging、commons-logging等等各种日志框架之间的关系是懵逼的,相信也有部分开发同学还是不太清楚,请允许我装个B,在这里简单梳理一下。如果对这日志发展史比较熟悉的同学,可以直接看接入教程。
以Log4j为发展主线,简单划分Log4j为四个时代:
在这个时代,如果你想使用Log4j只需要简单引入单独的Log4j的jar包即可:
在这个时代,由于commons-logging的加入,所以还得引入该日志门面的jar包:
在这个时代,大势所趋之下Log4j不得不抛弃它亲生的commons-logging日志门面,去投靠SLF4j,但必须引入桥接包去适配SLF4j:
Log4j2虽然和Log4j是同门师兄弟,但完全合不来,依赖也需要桥接包。但log4j-api更恶心的是:你想要适配我,必须要通过我的日志实现log4j-core。哪怕是师弟Log4j也不例外,当然桥接包也不能少。
上面以Log4j为线索简单讲解了下Log4j的发展历程,为了可以看起来不那么枯燥,写得略微诙谐幽默,增强可读性和记忆性,但比较肤浅也遗漏了许多,比如日志门面之间的桥接等。Java日志框架的发展史非常繁杂,如果感兴趣的同学可以参考下面的两篇博客:礼炮1空间站、imango。
最后,
其他同学:卧槽???你咋不早说!
其他同学:继续,看着你装X。
目前已上传至maven中央仓库,但阿里云镜像还未同步过去,我也不知道为啥,知道的同学可以告诉我一下。如果不能下载jar包请切换源为中央仓库。
<dependency>
<groupId>com.github.wirechen</groupId>
<artifactId>wxLog</artifactId>
<version>1.0.RELEASE</version>
</dependency>
ps:如果自己项目中的Log4j和wxLog里面的Log4j版本不同,可以exclusion掉,httpclient同理。
在Log4j日志配置文件添加WxAppender并引入到Root
xml格式
<appender name="WxAppender" class="com.github.wirechen.WxAppender">
<!-- 必填项:openIds添加参考快速体验-步骤2,多个可以用英文逗号分割 -->
<param name="openIds" value="xxx"/>
<!-- 非必填项 -->
<filter class="com.github.wirechen.WxFilter">
<!-- 过滤包名:只有该包下的日志才能触发报警 -->
<param name="packageToMatch" value="com.xxx"/>
<!-- 过滤日志开头:以特定内容开头的日志才能触发报警 -->
<param name="stringToMatch" value="【微信报警】"/>
<!-- 过滤日志等级:有levelMin和levelMax,可自行调节,默认只有WARN级别日志才会触发报警 -->
<param name="levelMax" value="WARN"/>
</filter>
</appender>
properties格式
log4j.appender.WxAppender=com.github.wirechen.WxAppender
log4j.appender.WxAppender.openIds=xxxx
log4j.appender.WxAppender.filter=com.github.wirechen.WxFilter
log4j.appender.WxAppender.filter.packageToMatch=com.xxx
log4j.appender.WxAppender.filter.levelMax=WARN
<root>
<level value="INFO"/>
<appender-ref ref="stdout"/>
<appender-ref ref="FILE"/>
<!-- 把WxAppender加进来 -->
<appender-ref ref="WxAppender"/>
</root>
直接在Java代码中打日志:log.warn("【微信报警】巴拉巴拉...")
如果没有收到微信报警推送,可以:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。