网站开发容易找工作吗,wordpress ftp免密码,电脑公司网站源码php,山东省建设教育集团网站目录
一、pom文件
二、项目配置文件
三、日志配置文件
四、日志监听类
五、日志动态修改服务类 线上系统的日志级别一般都是 INFO 级别#xff0c;有时候需要查看 WARN 级别的日志#xff0c;所以需要动态修改日志级别。微服务项目中使用 Nacos 作为注册中心#xff0c…目录
一、pom文件
二、项目配置文件
三、日志配置文件
四、日志监听类
五、日志动态修改服务类 线上系统的日志级别一般都是 INFO 级别有时候需要查看 WARN 级别的日志所以需要动态修改日志级别。微服务项目中使用 Nacos 作为注册中心我们可以监听 Nacos 配置修改日志级别。 一、pom文件 dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.18/version/dependency!--注册中心客户端--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdversion2021.0.4.0/version/dependency!--配置中心客户端--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactIdversion2021.0.4.0/version/dependency!--Lombok--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdscopeprovided/scope/dependency 二、项目配置文件增加如下内容
nacos:config:# 配置文件filename: nacos-provider-log-level.json# 配置GROUPgroup: DEFAULT_GROUP# 配置项keylog:level: log.level 三、日志配置文件
{log.level:info
} 四、日志监听类
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import com.meng.backend.service.LogLevelChangeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;
import java.util.Properties;
import java.util.concurrent.Executor;/*** Author: meng* Description: 监听Nacos* Date: 2023/6/5 9:52* Version: 1.0*/
Slf4j
Configuration
public class LoggerConfigListener {/*** 配置中心地址*/Value(${spring.cloud.nacos.discovery.server-addr})private String serverAddr;/*** 命名空间ID*/// Value(${nacos.config.namespace})// private String namespace;/*** 配置文件*/Value(${nacos.config.filename})private String dataId;/*** 配置GROUP*/Value(${nacos.config.group})private String group;/*** 配置项key*/Value(${nacos.config.log.level})private String logLevelName;Autowiredprivate LogLevelChangeService logLevelChangeService;/*** 动态修改日志级别*/PostConstructpublic void init() {try {log.info(init NacosConfigListener start...);Properties properties new Properties();properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);// properties.put(PropertyKeyConst.NAMESPACE, namespace);ConfigService configService NacosFactory.createConfigService(properties);String content configService.getConfig(dataId, group, 5000);if (StrUtil.isBlank(content)) {log.info(log config is empty);return;}log.info(log config is :{}, content);configService.addListener(dataId, group, new Listener() {Overridepublic void receiveConfigInfo(String configInfo) {try {JSONObject jsonObject JSONObject.parseObject(configInfo);Object levelObj jsonObject.get(logLevelName);if (levelObj ! null) {logLevelChangeService.changeLogLevel(levelObj.toString());}}catch (Exception e) {log.error(receiveConfigInfo exception:, e);}}Overridepublic Executor getExecutor() {return null;}});log.info(init NacosConfigListener end...);}catch (NacosException e) {log.error(NacosConfigListener exception:{}, e.getMessage());}}} 五、日志动态修改服务类
/*** Author: meng* Description: 动态调整日志级别* Date: 2023/6/5 9:56* Version: 1.0*/
public interface LogLevelChangeService {boolean changeLogLevel(String level);}
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import com.meng.backend.service.LogLevelChangeService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;/*** Author: meng* Description: 动态调整日志级别* Date: 2023/6/5 9:56* Version: 1.0*/
Slf4j
Service
public class LogLevelChangeServiceImpl implements LogLevelChangeService {Overridepublic boolean changeLogLevel(String level) {try {log.info(level:{}, level);LoggerContext loggerContext (LoggerContext) LoggerFactory.getILoggerFactory();Logger logger loggerContext.getLogger(ROOT);switch (level) {case trace:logger.setLevel(Level.TRACE);break;case debug:logger.setLevel(Level.DEBUG);break;case info:logger.setLevel(Level.INFO);break;case warn:logger.setLevel(Level.WARN);break;case error:logger.setLevel(Level.ERROR);break;default:break;}return true;}catch (Exception e) {log.error(changeLogLevel exception:, e);return false;}}}