/images/avatar.jpg

雨临Lewis的博客

Windows下MySQL8.0.13解压版安装教程

下载

MySQL8.0.13-64位下载地址

在下载页面的底部,有三种安装包,第一种是MySQL的安装程序,下载完点击安装即可。 第二种是普通的压缩版,体积较小。 第三种是自带debug和测试的压缩版,体积较大。这种压缩包在网上暂时没有找到对应的安装文档说明,所以建议下载第二种压缩包,也就是普通版本的MySQL压缩包。

Git问题汇总

初次配置用户名和邮箱

Git在push时需要使用到user.name和user.email,一般通过命令来进行配置或修改。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
//查看user.name
git config user.name

//查看user.email
git config user.email

//配置user.name
git config --global user.name "your user name"

//配置user.email
git config --global user.email "your user email"

Log4j2 - 动态生成Appender

功能需求

项目里将User分成了各个区域(domain),这些domain有个标志domainId,现在要求在打印日志的时候,不仅将所有User的日志都打印到日志文件logs/CNTCore.log中,还需要另外再打印到对应domain的日志文件logs/{domainId}/CNTCore.log

比如User A的domainId是RD2,那么除了logs/CNTCore.log外,还需要将该User A的日志额外打印到logs/RD2/CNTCore.log中。

实现思路

将所有User的日志都打印到日志文件logs/CNTCore.log中,这个可以直接使用配置文件log4j2.xml来解决,一个简单的配置如下:

升级Log4j到Log4j2报错:cannot access org.apache.http.annotation.NotThreadSafe

问题与分析

今天把项目的log4j的依赖改成了log4j2的依赖后,发现使用Maven打包时报错如下:

1
2
3
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project cbx-core: Compilation failure
[ERROR] cannot access org.apache.http.annotation.NotThreadSafe
[ERROR] class file for org.apache.http.annotation.NotThreadSafe not found

Log4j和Log4j2怎么动态加载配置文件

应用场景与问题

当项目在运行时,我们如果需要修改log4j 1.X或者log4j2的配置文件,一般来说我们是不能直接将项目停止运行再来修改文件重新部署的。于是就有这样一个问题:如何在不停止当前项目的运行的情况下,让系统能够自动地监控配置文件的修改状况,从而实现动态加载配置文件的功能?而log4j 1.X和log4j2的差别略大,各自应该怎么实现这个功能?

Log4j2中LevelRangeFilter的注意点

LevelRangeFilter的注意点

在log4j2中,LevelRangeFilter的minLevel,maxLevel的配置是和log4j 1.x相反的;minLevel需要配置的是高级别,maxLevel配置的是低级别,如下:

1
<LevelRangeFilter minLevel="fatal" maxLevel="info" onMatch="ACCEPT" onMismatch="DENY"/>

如上边的配置,是打印info到fatal级别的log,如果配置反过来,则不会输出任何log。

如果不配置minLevel、maxLevel、onMatch和onMismatch的值,则会为其设置默认值,在LevelRangeFilter中的源码实现如下:

Log4j.xml中Filter的用法

前言

log4j中常用的Filter分为四种:DenyAllFilter、LevelMatchFilter、LevelRangeFilter、StringMatchFilter。

当appender匹配了某个Filter的时候,就不会继续匹配下一个filter,所以当需要配置多个filter时需要注意先后顺序,这样才能实现需要的效果。

这些filter有个共同的属性AcceptOnMatch,用来控制匹配到的appender是否打印日志。

PostgreSQL - 日期函数汇总

比较两个日期之间的时间差超过N个小时

在PostgreSQL中,两个时间戳相减会得到一个interval类型的结果,如下:

1
2
select now() - '2021-03-28 15:47:07'; --0 years 0 mons 2 days 0 hours 1 mins 15.081206 secs
select '2021-03-28 15:47:07' - now(); --0 years 0 mons -2 days 0 hours -3 mins -17.692835 secs