java命令启动进程logback无日志

排查公司一个通过java命令启动的进程打不出logback日志的问题,记录一下排查过程。

原因:

通过java -classpath A.jar:B.jar:C.jar启动时(工程本身和依赖的jar都在classpath中),会从classpath中 【顺序 】 获取logback.xml配置,旧的启动脚本没有注意jar包顺序,导致先加载了依赖jar的logback.xml

解决方式:

一定要保证主进程jar在classpath的第一个。

故障排查过程:

客户反馈业务问题,到生产机器上发现没有任何日志。更奇怪的是测试、灰度环境是有日志的。
确定了不是文件权限等无关因素后。通过查看进程命令:

ps -ef|grep java

生产查看java启动时的命令:

/opt/app/process/jdk1.8.0_102/bin/java 
-classpath .:/opt/app/process/lib/zookeeper-3.4.7.jar::/opt/app/process/lib/zkclient-0.3.jar::/opt/app/process/lib/zipkin-sender-okhttp3-2.10.3.jar::/opt/app/process/lib/zipkin-reporter-spring-beans-2.10.3.jar::/opt/app/process/lib/zipkin-reporter-2.10.3.jar::/opt/app/process/lib/XXXX-0.0.1.jar:: 
-Denv=PRO
com.xxxx.abc.XXXXInit

返现灰度的主进程jar在classpath的第一个,网上一查发现logback会从classpath中顺序获取第一个logback.xml配置,于是找到了打不出日志的原因。

解决

旧的start.sh:

#!/bin/sh
PWD=`pwd`
for i in lib/*;
do CLASSPATH=$PWD/$i::"$CLASSPATH";
done
echo $CLASSPATH#export CLASSPATH=.::$CLASSPATH
#export LANG=zh_CN.GB18030
#export LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN
export LANG=zh_CN.GBK
nohup /opt/app/process/jdk1.8.0_102/bin/java -classpath .:${CLASSPATH} -Denv="PRO" com.xxxx.abc.XXXXInit 2>/opt/app/process/XXXX/log/err.log  &

旧启动脚本中只是遍历了lib下所有的jar文件并通过“::”拼接,我们需要遍历lib时将主程序的jar名拼接到最前面:

#!/bin/sh
MAIN_JAR_NAME_TEMPLATE="XXXX-0.0.1"     #启动的jar包的前缀CURRENT_FILE=$(readlink -f $0)
PWD=$(dirname $CURRENT_FILE)
MAIN_JAR=
for jar_name in $PWD/lib/*;
doif [[ $jar_name =~ $MAIN_JAR_NAME_TEMPLATE ]]thenMAIN_JAR=$jar_namecontinueelseCLASSPATH=$jar_name:"$CLASSPATH";fi
done
CLASSPATH=$MAIN_JAR:"$CLASSPATH";
echo $CLASSPATH#export CLASSPATH=.::$CLASSPATH
#export LANG=zh_CN.GB18030
#export LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN
export LANG=zh_CN.GBK
nohup /opt/app/process/jdk1.8.0_102/bin/java -classpath .:${CLASSPATH} -Denv="PRO" com.xxxx.abc.XXXXInit 2>/opt/app/process/XXXX/log/err.log  &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xed编辑器开发第一期:使用Rust从0到1写一个文本编辑器

这是一个使用Rust实现的轻量化文本编辑器。学过Rust的都知道,Rust 从入门到实践中间还隔着好几个Go语言的难度,因此,如果你也正在学习Rust,那么恭喜你,这个项目被你捡到了。本项目内容较多,大概会分三期左右陆续发布&a…

NAS导航面板Sun-Panel

什么是 Sun-Panel ? Sun-Panel 是一个服务器、NAS 导航面板、Homepage、浏览器首页。 软件主要特点: 🍉 界面简洁,功能强大,资源消耗低🍊 简单易用,可视化操作,零代码使用&#x1f…

python怎么安装matplotlib

1、登陆官方网址“https://pypi.org/project/matplotlib/#description”,下载安装包。 2、选择合适的安装包,下载下来。 3、将安装包放置到python交互命令窗口的当前目录下。 4、打开windows的命令行窗口,通过"pip install"这个命令…

cgicc开发 (结合sqlite3操作数据库)

#include <iostream> #include <fstream> //读写文件 c标准库 #include <string> //字符串类 c标准库 #include <sstream> //字符串流 c标准库 #include <assert.h> #include "sqlite3.h" //sqlite3头文件#include <cgicc/CgiDefs.…

新质生产力之工业互联网产业链

随着全球经济的数字化转型&#xff0c;新基建的概念逐渐成为推动工业发展的关键动力。在这一转型过程中&#xff0c;工业互联网作为新基建的核心组成部分&#xff0c;正逐渐塑造着未来工业的面貌。那么工业互联网产业链是如何构成的&#xff0c;以及它如何成为推动工业4.0和智能…

CRMEB开源打通版/标准版v4电商商城系统小程序发布之后无法生成海报问题

小程序产品分销二维码生成不了 开发者工具可以生成海报&#xff0c;但是发布之后无法生成 1.在开发者工具中&#xff0c;将不校验合法域名关闭 2.点击生成海报&#xff0c;查看console 3.将域名填写到微信公众平台小程序的download合法域名中 网址微信公众平台

MQTT入门_1_资料

MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种轻量级的消息协议&#xff0c;设计用于有限的带宽和不稳定网络上&#xff0c;它工作在发布/订阅&#xff08;publish/subscribe&#xff09;模式。MQTT最初由IBM开发&a…

react18【系列实用教程】memo —— 缓存组件 (2024最新版)

memo 的语法 如上图所示&#xff0c;在react中&#xff0c;当父组件重新渲染时&#xff0c;子组件也会重新渲染&#xff0c;即便子组件无任何变化&#xff0c;通过 memo 可以实现对组件的缓存&#xff0c;即当子组件无变化时&#xff0c;不再重新渲染子组件&#xff0c;核心代码…

Python 简易图书管理系统

## 环境准备 确保你已经安装了 Python 和 Flask。同时&#xff0c;安装 SQLAlchemy 作为 ORM 工具&#xff0c;以及 Flask-Migrate 用于数据库迁移。 bash pip install Flask pip install Flask-SQLAlchemy pip install Flask-Migrate ## Flask 应用结构 我们的 Flask 应…

【深度学习】Diffusion扩散模型的逆扩散问题

1、前言 上一篇&#xff0c;我们讲了Diffusion这个模型的原理推导。但在推导中&#xff0c;仍然遗留了一些问题。本文将解决那些问题 参考论文&#xff1a; ①Variational Diffusion Models (arxiv.org) ②Tutorial on Diffusion Models for Imaging and Vision (arxiv.org…

迭代的难题:敏捷团队每次都有未完成的工作,如何破解?

各位是否遇到过类似的情况&#xff1a;每次迭代结束后&#xff0c;团队都有未完成的任务&#xff0c;很少有完成迭代全部的工作&#xff0c;相反&#xff0c;总是将上期未完成的任务重新挪到本期计划会中&#xff0c;重新规划。敏捷的核心之一是“快速迭代&#xff0c;及时反馈…

ubuntu20.04 ROS 环境下使用速腾80线激光雷达

1.相关系统环境 系统版本:ubuntu 20.04 ROS版本&#xff1a;ROS1 - noetic 激光雷达型号&#xff1a;RoboSense Ruby &#xff08;更新于2024.5.14&#xff09; 2.网口配置&#xff1a; 将PC/工控机的网口配置为&#xff1a; ipv4&#xff0c;方式设置为手动 ip地址、掩码以…

LGadb找不到设备,解决方法:安装驱动

解决方法&#xff1a;安装驱动 https://www.123pan.com/s/Z6tFjv-JqiPv.html提取码:6666

基于springboot实现社区智慧养老监护管理平台系统项目【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现社区智慧养老监护管理平台系统演示 摘要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的…

EE-SX670 槽型光电开关 5MM 限位检测感应器 使用案例

EE-SX670是一款槽型光电开关&#xff0c;也被称为U形传感器或限位检测感应器。它是光电传感器中的一种&#xff0c;通过检测物体是否插入其感应槽来触发开关。这种传感器通常用于自动化生产线上的位置检测、对象计数以及安全设备中的运动检测。 EE-SX670作为一款高性能的光电传…

Redis教程(四):Redis中String类型的常用命令

String操作&#xff1a; 插入一个key为name&#xff0c;值为apple的数据 set name apple 插入的数据中如果有空格的数据&#xff0c;请用""双引号&#xff0c;否则会报错&#xff01; set name "hello world!" 如果key为name的数据不存在&#xff0c;…

谷歌外贸seo优化怎么做?

一般有两种选择&#xff0c;在大型电商平台开展业务&#xff0c;如亚马逊&#xff0c;阿里巴巴等平台&#xff0c;也可以选择搭建自己的独立站 选择在大型电商平台可以方便迅速建立起自己的商铺&#xff0c;不需要考虑太多交易&#xff0c;支付&#xff0c;物流等方面的问题&am…

非阻塞模式下的读写操作

实现文件IO的非阻塞模式的读写操作 fcntl函数 功能&#xff1a; #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); // arg表示可变参数&#xff0c;由cmd决定 fcntl()对打开的文件描述符fd执行下面描述的操作之一。操作由cmd决…

MybatisPlus拓展功能(内附全功能代码)

目录 代码生成 静态工具 案例 逻辑删除 枚举处理器 ​编辑 Json处理器 分页插件功能 ​编辑 案例 封装转换方法 代码生成 静态工具 案例 Overridepublic UserVO queryUserAndAddressById(long id) { // 1.查询用户User user getById(id);if (user null || …