当前位置: 首页 > news >正文

网站建设与维护经营范围怎么在百度上推广

网站建设与维护经营范围,怎么在百度上推广,做网站运营工资多少,网站如何改造wap原文地址:http://blog.jboost.cn/trick-logback-prop.html 当使用logback来记录Web应用的日志时,我们通过在logback.xml中配置appender来指定日志输出格式及输出文件路径,这在一台主机或一个文件系统上部署单个实例没有问题,但是…

原文地址:http://blog.jboost.cn/trick-logback-prop.html

当使用logback来记录Web应用的日志时,我们通过在logback.xml中配置appender来指定日志输出格式及输出文件路径,这在一台主机或一个文件系统上部署单个实例没有问题,但是如果部署多个实例(比如通过容器的方式),多个实例同时往同一文件写日志可能就会引起问题。这时可以将每个实例的日志文件加以区分,如IP或UUID,或两者结合的形式。这其实就涉及如何在logback.xml中自定义动态属性的问题。

可以有4种方式来实现logback.xml中获取自定义变量值:

  1. 通过设置环境变量或传递系统属性(比如在程序启动时通过-D传递)的方式,两者是可以直接在logback.xml中通过 ${变量名} 获取的。
  2. 自定义logback.xml的加载时机,在其加载前将需要设置的属性注入到logback的context中,这种方式相对复杂,本文不讨论。
  3. 通过实现PropertyDefiner接口来提供属性值设置
  4. 通过实现LoggerContextListener接口来设置属性值

第一种方式简单,但不能通过程序生成属性值

需要在spring-boot启动类中加入设置环境变量的代码,如下:
在这里插入图片描述
修改logback.xml中的代码如下:

在这里插入图片描述

第二种方式稍显复杂,本文主要介绍后两种方式

PropertyDefiner方式

首先定义一个类,实现PropertyDefiner接口,可以通过继承PropertyDefinerBase会更方便

import ch.qos.logback.core.PropertyDefinerBase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.UUID; /\*\*\*\* 将本地IP拼接到日志文件名中,以区分不同实例,避免存储到同一位置时的覆盖冲突问题\* @Author ronwxy\* @Date 2019/8/20 16:17 \*/
public class IPLogDefiner extends PropertyDefinerBase { private static final Logger LOG = LoggerFactory.getLogger(IPLogDefiner.class); private String getUniqName() {String localIp \= null; try {localIp \= InetAddress.getLocalHost().getHostAddress();} catch (UnknownHostException e) {LOG.error("fail to get ip...", e);}String uniqName \= UUID.randomUUID().toString().replace("-", ""); if (localIp != null) {uniqName \= localIp + "-" + uniqName;} return uniqName;}@Override public String getPropertyValue() { return getUniqName();}
}

然后在logback.xml中,添加 <define> 配置,指定属性名(本例中为localIP)及获取属性值的实现类,这样就可以在配置中通过 ${localIP}来引用该属性值了。在实现方法 getPropertyValue 中返回你需要生成的值,本例中是返回 本地IP-UUID 的形式。

<configuration><define name="localIP" class="cn.jboost.common.IPLogDefiner"/><appender name="interfaceLogFile"class\="ch.qos.logback.core.rolling.RollingFileAppender"><encoding>UTF-8</encoding><File>D:\\\\logs\\\\elk\\\\interface\-${localIP}.log</File><filter class\="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter> # 省略了其它配置

LoggerContextListener方式

定义一个实现LoggerContextListener接口的类,在start方法中,将需要设置的属性设置到logback的Context中,

import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.LoggerContextListener; import ch.qos.logback.core.Context; import ch.qos.logback.core.spi.ContextAwareBase; import ch.qos.logback.core.spi.LifeCycle; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.UUID; /\*\*\*\* 第二种实现方式\* @Author ronwxy\* @Date 2019/8/20 18:45 \*/
public class LoggerStartupListener extends ContextAwareBase implements LoggerContextListener, LifeCycle { private boolean started = false;@Override public void start() { if (started) { return;}Context context \= getContext();context.putProperty("localIP", getUniqName());started \= true;} private String getUniqName() {String localIp \= null; try {localIp \= InetAddress.getLocalHost().getHostAddress();} catch (UnknownHostException e) { //LOG.error("fail to get ip...", e);}String uniqName \= UUID.randomUUID().toString().replace("-", ""); if (localIp != null) {uniqName \= localIp + "-" + uniqName;} return uniqName;} //省略了其它函数

然后在logback.xml中,配置如上监听器类,这样就可以通过 ${localIP} 获取到上面 context.putProperty("localIP", getUniqName()); 设置的值了。

<configuration><!--<define name="localIP" class\="com.cnbot.common.IPLogDefiner"/>--><contextListener class="cn.jboost.common.LoggerStartupListener"/><define name="localIP" class\="com.cnbot.common.IPLogDefiner"/><appender name="interfaceLogFile"class\="ch.qos.logback.core.rolling.RollingFileAppender"><encoding>UTF-8</encoding><File>D:\\\\logs\\\\elk\\\\interface\-${localIP}.log</File><filter class\="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter> # 省略了其它配置

这种方式能设置任意个数的属性值,比前一种方式灵活。

总结

在logback.xml中获取自定义属性值,主要是需要在加载前将对应的属性值进行设置,这样加载时才能有效获取。本文虽是自定义日志文件名称,但不局限于此,所有需要动态获取的变量都可以按这种方式实现。

http://www.yidumall.com/news/65768.html

相关文章:

  • 东营有能做网站优化最新推广赚钱的app
  • 有没有专做于投融资的网站网站怎么优化推荐
  • 做网站第二年要续费吗教育培训机构排名
  • 宣传信息网网站规划书互联网营销主要学什么
  • 自己的网站怎么做搜索引擎百家联盟推广部电话多少
  • 吉林长春有做网站的吗东营seo整站优化
  • 广州最新病毒感染情况百度seo规则
  • 襄阳文明建设投诉网站最新百度关键词排名
  • 做网站读什么专业微信营销的模式有哪些
  • wordpress制作企业网站百度百科分类方法
  • 免费做商城网站杭州哪家seo公司好
  • 做外贸一般在什么网站肇庆网站推广排名
  • 哪里有做网站的公司网易最新消息新闻
  • 网站后台怎么添加模板google浏览器官网入口
  • 长沙做无痛肠镜东大医院l网站哈尔滨seo关键词排名
  • 电子商务网站开发原则品牌运营策略有哪些
  • 可以自己制作视频的软件南宁seo产品优化服务
  • 做外贸到那个网站卡一卡二卡三入口2021
  • 杭州做网站公司排名游戏推广员是违法的吗
  • 网站设计公司收费标准2023网络营销成功案例
  • 58同城类似的网站怎么做赣州seo公司
  • 找网络公司做的网站可以出售吗软件培训机构排名
  • 快速建站服务铁力seo
  • 哪个网站可以帮忙做简历百度下载安装app
  • 长沙营销网站建设深圳网络营销的公司哪家好
  • 用jquery做的网站公司网址怎么制作
  • 类似于百度快照的网站竞价是什么意思
  • 门户网站产品设计方案西安疫情最新情况
  • 手游app平台排行榜seo服务包括哪些
  • 网页制作企业网站作业每日一则新闻摘抄