Log4j和Log4j2怎么动态加载配置文件
应用场景与问题
当项目在运行时,我们如果需要修改log4j 1.X或者log4j2的配置文件,一般来说我们是不能直接将项目停止运行再来修改文件重新部署的。于是就有这样一个问题:如何在不停止当前项目的运行的情况下,让系统能够自动地监控配置文件的修改状况,从而实现动态加载配置文件的功能?而log4j 1.X和log4j2的差别略大,各自应该怎么实现这个功能?
当项目在运行时,我们如果需要修改log4j 1.X或者log4j2的配置文件,一般来说我们是不能直接将项目停止运行再来修改文件重新部署的。于是就有这样一个问题:如何在不停止当前项目的运行的情况下,让系统能够自动地监控配置文件的修改状况,从而实现动态加载配置文件的功能?而log4j 1.X和log4j2的差别略大,各自应该怎么实现这个功能?
在log4j2中,LevelRangeFilter的minLevel,maxLevel的配置是和log4j 1.x相反的;minLevel需要配置的是高级别,maxLevel配置的是低级别,如下:
|
|
如上边的配置,是打印info到fatal级别的log,如果配置反过来,则不会输出任何log。
如果不配置minLevel、maxLevel、onMatch和onMismatch的值,则会为其设置默认值,在LevelRangeFilter中的源码实现如下:
log4j中常用的Filter分为四种:DenyAllFilter、LevelMatchFilter、LevelRangeFilter、StringMatchFilter。
当appender匹配了某个Filter的时候,就不会继续匹配下一个filter,所以当需要配置多个filter时需要注意先后顺序,这样才能实现需要的效果。
这些filter有个共同的属性AcceptOnMatch
,用来控制匹配到的appender是否打印日志。
由于我在页面中使用了<audio>
标签来播放一首背景音乐,该音频是一首大小为2.7MB的MP3文件。在第一次加载该页面时,需要花费相当长的一段时间去加载音频。
在PostgreSQL中,两个时间戳相减会得到一个interval
类型的结果,如下:
|
|
对于select 233;
这个sql,得到的结果是int4
类型,如果我们希望将结果转换成其他的数据类型,有以下方法(下边的{数据类型}
表示占位符,要替换成数据库中的某一种数据类型):
::{数据类型}
看到网上有的文章说JIRA是使用Textile这门标记语言,有些语法和Wikitext和Markdown相像。JIRA在2017年进行了一次大更新,某些语法可能和以前不大一样,这里纪录一下常用的一些语法。
高级语言源程序经过编译变成可执行文件,反编译就是逆过程。但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。
由于业务上的需求,重新改写了校验email的正则表达式,同时DB里又迁移了其他数据库的数据,现在需要重新对DB里的所有email再校验一次,以排除掉不合法的email。
DB里的数据很多,手动去一个个校验的做法显然是不靠谱的,这种机械的重复性操作,自然是要用程序来解决才是最简易的。
ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。应用格式是ping空格ip地址,可以附带参数,可以直接在cmd中输入ping
然后回车来得到具体的帮助信息。
127.1是127.0.0.1,通常被称为本地回环地址(Loop back address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在windows操作系统中也有相似的定义,所以通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。