小编Doc*_*nes的帖子

重复log4j日志记录

我的classpath中有以下log4j.xml文件:

<appender class="org.apache.log4j.ConsoleAppender" name="Console">
    <param name="Threshold" value="info" />
    <layout class="org.apache.log4j.PatternLayout">
        <param value="%d %-5p [%t] %C (%F:%L) - %m%n" name="ConversionPattern"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
      <param value="info" name="LevelMax"/>
      <param value="info" name="LevelMin"/>
    </filter>
</appender>

<logger name="de.scm.cci.importer">
    <level value="info"/>
</logger>

<logger name="com.mchange">
    <level value="info"/>
</logger>
<logger name="jdbc">
    <level value="error"/>
</logger>
<logger name="org.hibernate">
    <level value="info"/>
</logger>
<logger name="org.springframework">
    <level value="info"/>
</logger>

<root>
    <level value="INFO"/>
    <appender-ref ref="Console"/>
</root>
Run Code Online (Sandbox Code Playgroud)

以下是前几行输出:

log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@7220722.
log4j: Using URL [file:/opt/app/cci/CCIImporter/jar/log4j.xml] for automatic log4j configuration.
log4j: …
Run Code Online (Sandbox Code Playgroud)

java logging spring log4j

5
推荐指数
1
解决办法
5699
查看次数

将 java-List&lt;T&gt; 转换为可与 iomicrometer 的 MultiGauge 一起使用的流

从我的 springboot 应用程序中,我收到一个结果列表List<T>,其中包含从数据库表中读取的 100 个元素

T包含字段

  • 唯一标识符
  • 经度
  • 纬度
  • 价值

我想把它变成多个千分尺,比如

object{id=<unique identifier>,longitude=<longitude>,latitude=<latitude>} <value>
object{id=<unique identifier>,longitude=<longitude>,latitude=<latitude>} <value>
object{id=<unique identifier>,longitude=<longitude>,latitude=<latitude>} <value>
...
Run Code Online (Sandbox Code Playgroud)

这些指标应由普罗米修斯抓取,然后使用grafana/worldmap 进行可视化 ,我正在使用它构建我的多规格 MultiGauge l100 = MultiGauge.builder("metric-last100").register(registry);

并且无法将其转换List<T>为流来提供,l100.register(...)如下所示

// SELECT count(*) from job group by status WHERE job = 'dirty'     
MultiGauge statuses = MultiGauge.builder("statuses")
        .tag("job", "dirty")
        .description("The number of widgets in various statuses")
        .baseUnit("widgets")
        .register(registry);

...

// run this periodically whenever you re-run your query     
statuses.register(
  resultSet.stream().map(result -> 
    Row.of(Tags.of("status", …
Run Code Online (Sandbox Code Playgroud)

java stream grafana prometheus micrometer

4
推荐指数
1
解决办法
2717
查看次数

咖啡因 Springboot 集成

我们使用 caffeine 来替换 ConcurrentHashMap 缓存,这是当前 springboot 中的默认缓存。我们正在使用@Cacheable(cacheNames = { "..." })注释动态创建缓存。

我正在尝试设置 recordStats属性,因为我们正在使用 springboot 执行器包来监控我们应用程序的各个方面。

我试图设置spring.cache.caffeine.spec=expireAfterAccess=3600s,recordStatsapplication.properties,这不起作用。

@Configure类中设置它也不起作用:

@Configuration
public class CacheConfig {

  @Bean
  public CacheManager cacheManager() {
    CaffeineCacheManager cacheManager = new CaffeineCacheManager();
    cacheManager.setCacheSpecification("expireAfterAccess=3600s,recordStats");
    return cacheManager;
  }
}
Run Code Online (Sandbox Code Playgroud)

缓存统计信息不会出现在 /actuator/cache/{caches}端点或我们的 springboot-admin 服务器中。

从当前的 api 文档中,我发现:

字符串语法是一系列以逗号分隔的键或键值对,每个对应于一个 Caffeine 构建器方法。

initialCapacity=[integer]: sets Caffeine.initialCapacity.
Run Code Online (Sandbox Code Playgroud)

...

recordStats: sets Caffeine.recordStats(). 
Run Code Online (Sandbox Code Playgroud)

持续时间由一个整数表示,后跟“d”、“h”、“m”或“s”之一,分别代表天、小时、分钟或秒。目前没有以毫秒、微秒或纳秒为单位请求过期的语法。

忽略逗号和等号前后的空格。密钥不得重复;在单个值中使用以下键对也是非法的:

maximumSize and maximumWeight
weakValues and softValues 
Run Code Online (Sandbox Code Playgroud)

以及相关的一点:

CaffeineSpec 不支持使用非值参数配置 Caffeine 方法。这些必须在代码中配置。

有没有可能完成我的任务?

谢谢

java caching spring-boot caffeine

0
推荐指数
1
解决办法
4351
查看次数