一、如果直接设置服务器的hostName则可以在log4j2配置文件里直接使用${hostName}
二、否则设置环境变量,并使用监听器,因为log4j2默认取的配置信息是使用System.getProperty()方法,而环境变量则需要通过System.getenv()方法获取参数
① 设置环境变量,注意jdk启动的用户是,需要在/home/jdk启动用户/.bachrc文件里设置环境变量,直接设置/etc/profile文件的话,jdk启动用户可能获取不到该参数,因为没权限
在.bachrc尾部加入LOCALHOST_NAME环境变量,由于我司用的阿里云服务器,且为了高可用,同时选择了B区和G区,并对每台服务器都进行命名,如果B1,G1,B2,G2...等等,我举例在G2服务器上部署
export LOCALHOST_NAME=G2
最后记得对.bachrc 授权
source /home/jdk启动用户/.bachrc
② 代码支持log4j2能取到环境变量
import org.springframework.stereotype.Component;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
@Order(-1)
@Component
public class Log4jListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
String localhostName = System.getenv("LOCALHOST_NAME");
if (localhostName != null) {
System.setProperty("LOCALHOST_NAME", localhostName);
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
③ 更改log4j2配置文件,具体以你们自己的为主
最终日志结果显示
这样就可以在ELK爬取日志时显示是从哪台服务器上抓取的日志,并进行进一步的日志跟踪
如果帮到你,请点个赞吧 O(∩_∩)O~