我的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) 从我的 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) 我们使用 caffeine 来替换 ConcurrentHashMap 缓存,这是当前 springboot 中的默认缓存。我们正在使用@Cacheable(cacheNames = { "..." })注释动态创建缓存。
我正在尝试设置 recordStats属性,因为我们正在使用 springboot 执行器包来监控我们应用程序的各个方面。
我试图设置spring.cache.caffeine.spec=expireAfterAccess=3600s,recordStats在application.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 构建器方法。
Run Code Online (Sandbox Code Playgroud)initialCapacity=[integer]: sets Caffeine.initialCapacity....
Run Code Online (Sandbox Code Playgroud)recordStats: sets Caffeine.recordStats().持续时间由一个整数表示,后跟“d”、“h”、“m”或“s”之一,分别代表天、小时、分钟或秒。目前没有以毫秒、微秒或纳秒为单位请求过期的语法。
忽略逗号和等号前后的空格。密钥不得重复;在单个值中使用以下键对也是非法的:
Run Code Online (Sandbox Code Playgroud)maximumSize and maximumWeight weakValues and softValues
以及相关的一点:
CaffeineSpec 不支持使用非值参数配置 Caffeine 方法。这些必须在代码中配置。
有没有可能完成我的任务?
谢谢
java ×3
caching ×1
caffeine ×1
grafana ×1
log4j ×1
logging ×1
micrometer ×1
prometheus ×1
spring ×1
spring-boot ×1
stream ×1