gpt4 book ai didi

java - 排除默认的 logback 文件

转载 作者:行者123 更新时间:2023-11-30 21:22:03 34 4
gpt4 key购买 nike

我的团队正在开发一个每秒调用率很高的电信实时应用程序。 我们使用 logback 根据键值匹配(流量实时值,如调用方等)过滤日志。一旦验证了实时值和数据库值的匹配,过滤后的日志文件就正确创建了,但是我们会删除默认文件,当没有匹配时,它会填充日志。可能会发生在键值匹配发生之前需要监视流量节点一段时间的情况,因此与此同时,默认值可能会无限增加,并导致节点本身的性能和稳定性出现问题。 我应该在我的 logback.xml 中做什么来避免生成默认日志文件?这可能吗?还有其他选择可以达到相同的结果吗?

logback.xml

<?xml version="1.0" encoding="UTF-8"?>

<property scope="context" name="LOG_LEVEL" value="INFO" />

<appender name="SIFT_LOGGER" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator class="com.ericsson.jee.ngin.services.log.ServiceKeyDiscriminator">

</discriminator>
<sift>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/var/log/tit/logback_${serviceKey}_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
<maxHistory>10</maxHistory>
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>

<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>${LOG_LEVEL}</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>

<!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern> %d{yyyy-MM-dd HH:mm:ss.SSSZ} [%thread] %-5level %logger{36} %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->

<encoder>
<pattern> %d{yyyy-MM-dd HH:mm:ss.SSSZ} [%thread] %-5level %logger{36} %msg%n</pattern>
</encoder>

</appender>

<turboFilter class="ch.qos.logback.classic.turbo.DynamicThresholdFilter">
<key>serviceKey</key>
<defaultThreshold>DEBUG</defaultThreshold>
<onHigherOrEqual>ACCEPT</onHigherOrEqual>
<onLower>ACCEPT</onLower>

</turboFilter>

<root level="DEBUG">
<appender-ref ref="SIFT_LOGGER" />
<appender-ref ref="STDOUT" />
</root>

附件:FILTERED LOGBACK CLASS

提供的 FL 类仅适用于在 FL 模块中具有 java 鉴别器的 SK。

最佳答案

您必须将过滤器移动到通用筛选器。

<appender name="SIFT-TRACE"
class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator
class="ch.qos.logback.classic.sift.MDCBasedDiscriminator">
<Key>loggerFileName</Key>
<DefaultValue>unknown</DefaultValue>
</discriminator>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator
class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
mdc.get("loggerFileName")!=null
</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>NEUTRAL</OnMatch>
</filter>
<sift>
<appender name="TRACE-${loggerFileName}"
class="ch.qos.logback.core.FileAppender">

<File>D:/U/${loggerFileName}.log</File>
<Append>true</Append>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d [%thread] %level %mdc %logger - %msg%n</Pattern>
</layout>
</appender>
</sift>
</appender>

<logger name="org.springframework" level="DEBUG" />

<root level="DEBUG">

<appender-ref ref="SIFT-TRACE" />
</root>

同时为了使其正常工作,您必须在每个线程/文件/标记/等之后。放置这些语句:

public void handle()
{
MDC.put("loggerFileName","some value");
...
MDC.remove("loggerFileName");
}

关于java - 排除默认的 logback 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367373/

34 4 0
文章推荐: mysql - 如何从/var/lib/mysql-files导入数据到MySQL
文章推荐: c# - 如何在 Silverlight 中将 List 绑定(bind)到 DataGrid?
文章推荐: MySQL JSON_EXTRACT 性能