logback 相关问题

与Log4J和java.util.logging相比,基于Java的程序的现代日志记录工具具有许多新功能。

为什么从 XML 配置 Logback 时,DriverManagerConnectionSource 未启动,导致连接失败?

升级到 slf4j 2.0.13、logback 1.5.6 和 logback-db 1.2.11.1 后,之前正常的 logback XML 配置失败了。据我所知,该框架正在尝试

回答 1 投票 0

升级到 SLF4J v2/Logback 后不再支持 LoggerContextListener 订单建立

我将尽力解释这一点,但它相当复杂。我从事的项目希望人们能够使用 java 配置文件和属性覆盖 logback.xml 设置。 例如...

回答 1 投票 0

org.slf4j.helpers.NOPLoggerFactory 无法转换为 ch.qos.logback.classic.LoggerContext

当我在maven(m2e)中使用logback时,出现以下错误。环境:JBOSS 7.1.1,maven,eclipse。但如果我只是作为主类单独运行,它就可以正常工作。我不明白为什么我会......

回答 2 投票 0

logback.groovy 配置在 groovy 更新后不起作用

进行项目更新时,我们将 java (gradle) 项目的 groovy 依赖项更新到版本 4.0.4。然而现在,我们的 logback.groovy 配置不再起作用。 问题是该应用程序...

回答 1 投票 0

Wildfly 26 SpringBoot 部署时日志记录异常

我尝试更改为 org.jboss.logging,如本文中所示,但错误仍然显示。 我在 POM 中排除了 Logback,你们可以在下面看到 聚甲醛 ...

回答 1 投票 0

Logback - 可以获取 AsyncAppender 当前队列的大小吗?

是否可以获取Logback的AsyncAppender当前的队列大小? 这是我们配置的相关部分: 是否可以获取Logback的AsyncAppender当前的队列大小? 这是我们配置的相关部分: <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>1000</queueSize> <discardingThreshold>0</discardingThreshold> <appender-ref ref="FILE" /> </appender> 如果附加程序附加到您的根记录器,类似这样的事情应该可以工作: var root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); var appender = root.getAppender("ASYNC"); if (appender instanceof AsyncAppenderBase<ILoggingEvent> asyncAppender) { int currentQueueSize = asyncAppender.getNumberOfElementsInQueue(); }

回答 1 投票 0

Spring Logback:配置的记录器级别

我使用 Spring-Boot 及其集成 Logback 日志记录。 logback-spring.xml 我使用 Spring-Boot 及其集成 Logback-logging。 logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder><pattern>%d{dd.MM.yyyy HH:mm:ss.SSS} - %-5level - %msg%n</pattern</encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>log.log</file> <append>true</append> <encoder><pattern>%d{dd.MM.yyyy HH:mm:ss.SSS} - %-5level - %msg%n</pattern</encoder> </appender> <logger name="default" level="WARN"> <appender-ref ref="FILE" /> </logger> <root level="ERROR"> <appender-ref ref="STDOUT"/> </root> </configuration> 应用程序属性 spring.main.web-application-type = none logging.config = logback-spring.xml MyComp.java @Component public class MyComp { @PostConstruct private void init () { Logger logger = LoggerFactory.getLogger ("default"); logger.error ("this is an error"); logger.warn ("this is a warning"); logger.info ("this is an info"); logger.debug ("this is a debug"); } } 输出在日志文件以及标准输出控制台中为我提供了此信息。 30.04.2024 00:16:01.303 - ERROR - this is an error 30.04.2024 00:16:01.304 - WARN - this is a warning 30.04.2024 00:16:01.304 - INFO - this is an info 30.04.2024 00:16:01.304 - DEBUG - this is a debug 我不明白。 我已将记录器“默认”配置为“警告”级别,并将根记录器配置为“错误”级别。 所以我希望有 日志文件中仅包含错误和警告消息,并且 仅标准输出中的错误消息。 那为什么这不是我得到的? 我也不明白有什么问题,但是你可以尝试一下,将 com.acme 更改为代码的包名称: <!DOCTYPE configuration> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="com.acme" level="DEBUG" /> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>

回答 1 投票 0

传统 Logback 配置与规范 Logback 配置

在浏览 Logback 手册的第 3 章时,我注意到配置示例分为三种:Legacy、Canonical (1.3) 和 Tyler。 该手册几乎保持沉默......

回答 1 投票 0

如何使用 syslog4j 和 logback 来使用本机 Unix 套接字

我正在使用 logback 进行日志记录。我想使用 syslog4j 本地登录到 syslog。(因为我不想打开 udp 端口来登录 syslog) 我可以使用 syslog4j 作为 logback 的附加程序吗...

回答 2 投票 0

如何将 syslog4j 与 logback 一起使用

我正在使用 logback 进行日志记录。我想使用 syslog4j 本地登录到 syslog。(因为我不想打开 udp 端口来登录 syslog) 我可以使用 syslog4j 作为 logback 的附加程序吗...

回答 2 投票 0

将 org.slf4j.MDC 与 Netty 通道一起使用?

我想做的本质上是如何将MDC与线程池一起使用?是在问,但是是用 Netty。 我想要每个通道关联的 MDC 信息。 Netty 有哪些选项?如果我需要...

回答 1 投票 0

无法在logback.xml中应用<pattern>

我正在尝试使用链接在 Logback 中创建自定义布局, 在 Logback 中创建自定义布局 我成功创建了日志文件。 问题是当我在编码中应用“模式”标签时......

回答 2 投票 0

找不到兼容版本的logback

在我的项目中,我使用 slf4j 进行日志记录。 如果我包含对 logback-classic = "1.2.13" 或更早版本的依赖项,我会收到一条错误消息,指出没有找到 SLF4J 提供程序,并且它是默认的...

回答 1 投票 0

在 logback.xml 中屏蔽所有请求和响应

我正在使用 logback.xml 来屏蔽敏感数据以进行日志记录,效果很好 我正在使用 logback.xml 来屏蔽敏感数据以进行日志记录,效果很好 <appender name="DATA_MASK" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="com.masking.MaskingPatternLayout"> <maskPattern>\"creditCardNumber\"\s*:\s*\"(.*?)\"</maskPattern> <!-- questionCode JSON pattern --> <Pattern>${logback.detailedroot}</Pattern> </layout> </encoder> </appender> 但问题是,当我在 logback.xml 中打开请求-响应配置时,这个自定义 MaskingPatternLayout 无法捕获请求-响应日志 <logger name="Request" level="DEBUG" /> <logger name="Response" level="DEBUG" /> 众所周知,上面的两个配置帮助我们将所有请求和响应捕获为日志。然而,掩蔽模式对它们不起作用。 无论如何处理这些请求响应日志来屏蔽。 我理解你的问题的方式是外部配置的记录器不会利用你的掩码。确保正在使用的记录器利用您的掩码的最佳方法是显式配置它们。 您可以使用 Baeldung 教程 配置您自己的面向方面 (AOP) 请求/响应日志记录,并让它使用您已指定的附加程序或您配置的新附加程序。 我正在运行的如下 @Aspect @Component @Order(4) public class RestLoggerAspect { Logger logger = LoggerFactory.getLogger(RestLoggerAspect.class); String before = "Incoming :: "; String after = "Completed :: "; @Before("execution(@(@org.springframework.web.bind.annotation.RequestMapping *) * *(..))") public void log(JoinPoint jp){ Signature signature = jp.getSignature(); // who is called "class method" if(logger.isDebugEnabled()){ logger.debug(before + ((Signature) signature).toShortString() + " : " + joinArgs(jp)); } else { logger.info(before + ((Signature) signature).toShortString()); } } @AfterReturning( pointcut = "execution(@(@org.springframework.web.bind.annotation.RequestMapping *) * *(..))" , returning= "retVal") public void methodLog(JoinPoint jp, Object retVal){ String methodCall = jp.getSignature().toShortString() ; if(logger.isDebugEnabled()){ String logString = after + methodCall + " [ args = " +joinArgs(jp) + " ]"; if (retVal != null) { logString += " return = " + prettify(retVal); } logger.debug(logString); } else { logger.info(after + methodCall); } } private String joinArgs(JoinPoint jp){ return Arrays.stream(jp.getArgs()) .map(t -> t != null ? prettify(t) : "null") .collect(Collectors.joining(", ")); } private String prettify(Object object){ ObjectMapper mapper = new ObjectMapper(); String jsonStr = null; try { jsonStr = String.valueOf(object.getClass()); jsonStr += "=" + mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); } catch (JsonProcessingException e) { jsonStr = object.toString(); } return jsonStr; } } 此实现的漂亮打印会将请求/响应转储为多行,这可能不是您正在寻找的内容,但您可以自己删除该部分。这里重要的部分是 @Before 方法允许您访问请求并记录它,在我的例子中,只有当我的 AspectLogger 启用了调试时才可以。 @AfterReturning 位允许您访问响应。我为这些定义的模式在使用 RequestMapping 注释时捕获,例如 @GetMapping、@PostMapping 或 @DeleteMapping。 此处的 joinArgs 函数将连接提供给该方法的所有参数,无论数量如何。

回答 1 投票 0

有没有办法在LogBack中更改突出显示颜色模式

在Logback中,%highlight()用于给输出着色。有什么方法可以改变highlight()的颜色模式吗?我更喜欢 INFO 级别日志保持白色而不是蓝色...... 在 Logback 中,%highlight() 用于为输出着色。有什么方法可以改变highlight()的颜色模式吗?我更喜欢 INFO 级别日志保持白色而不是蓝色...... <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <Pattern> %d{HH:mm:ss.SSS} [%t] %highlight(%-5level %logger{36} - %msg%n) </Pattern> </encoder> </appender> 我刚刚遇到如何做到这一点的示例 根据他们的文档,您需要: 将HighlightingCompositeConverterEx.java添加到CLASSPATH(或者只是将其添加到您的项目中) 使用 在 logback.xml 中加载转换器类 在中使用您的转换词(示例中的highlightex) package code.nighma.logging.utils; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.pattern.color.ANSIConstants; import ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase; public class LogbackHighlightCompositeConverterEx extends ForegroundCompositeConverterBase<ILoggingEvent> { @Override protected String getForegroundColorCode(ILoggingEvent event) { Level level = event.getLevel(); return switch (level.toInt()) { case Level.ERROR_INT -> ANSIConstants.BOLD + ANSIConstants.RED_FG; case Level.WARN_INT -> ANSIConstants.BOLD + ANSIConstants.MAGENTA_FG; case Level.INFO_INT -> ANSIConstants.BOLD + ANSIConstants.CYAN_FG; case Level.DEBUG_INT -> ANSIConstants.BOLD + ANSIConstants.YELLOW_FG; case Level.TRACE_INT -> ANSIConstants.BOLD + ANSIConstants.WHITE_FG; default -> ANSIConstants.BOLD + ANSIConstants.DEFAULT_FG; }; } } 然后你的配置 xml 将如下所示 <configuration> <conversionRule conversionWord="highlightex" converterClass="code.nighma.logging.utils.HighlightingCompositeConverterEx"/> <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%green(%d{ISO8601}) [%blue(%t)] %highlightex(%-5level) %yellow(%C{5}): %msg%n%throwable</Pattern> </layout> </appender> <root level="info"> <appender-ref ref="Console"/> </root> <logger name="code.nighma" level="trace" additivity="false"> <appender-ref ref="Console"/> </logger> </configuration>

回答 1 投票 0

将依赖项注入到不受 Spring 管理的对象中

下面是S3FixedWindowRollingPolicy类的实现,它负责将本地日志文件移动到S3。 S3固定窗口滚动策略 包 com.paytmlabs.adtech.logback.policy; 我...

回答 1 投票 0

将依赖项注入S3FixedWindowRollingPolicy

下面是S3FixedWindowRollingPolicy类的实现,它负责将本地日志文件移动到S3。 S3固定窗口滚动策略 包 com.paytmlabs.adtech.logback.policy; 我...

回答 1 投票 0

Slf4j,logback - 从 json 中删除 mdc 标签

我正在使用 MDC 添加一些上下文信息来记录记录: MDC.put("相关 ID", UUID.randomUUID().toString()); 我正在使用以下 logback 编码器: 我正在使用 MDC 添加一些上下文信息来记录记录: MDC.put("Correlation-ID", UUID.randomUUID().toString()); 我正在使用以下 logback 编码器: <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="ch.qos.logback.contrib.json.classic.JsonLayout"> <timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat> <timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId> <appendLineSeparator>true</appendLineSeparator> <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"> <prettyPrint>false</prettyPrint> </jsonFormatter> </layout> </encoder> 我有以下日志: {"timestamp":"2020-01-20T11:40:09.850Z","level":"INFO","thread":"main","mdc":{"Correlation-ID":"66f7843c-9855-450d-ad97-b1c78404f051"},"logger":"liquibase.Liquibase"... 我想删除 root mdc 标签以获得: {"timestamp":"2020-01-20T11:40:09.850Z","level":"INFO","thread":"main","Correlation-ID":"66f7843c-9855-450d-ad97-b1c78404f051","logger":"liquibase.Liquibase"... 我该如何实现这个目标? 您可以使用 logstash logback JSON 编码器。 将这些依赖项添加到您的 pom.xml: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>${logstash.version}</version> </dependency> 这是一个示例: <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <pattern> <omitEmptyFields>true</omitEmptyFields> <pattern> { "timestamp": "%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}", "level": "%level", "thread": "%t", "Correlation-ID": "%mdc{Correlation-ID}", "logger": "%logger", ... } </pattern> </pattern> </providers> </encoder> 文档这里。 如果您想保留 Correlation Id,您可以扩展 JSON Layout 类并在地图上设置属性。 public class CustomJsonLayout extends JsonLayout { @Override protected Map toJsonMap(ILoggingEvent iLoggingEvent) { LinkedHashMap var2 = new LinkedHashMap(); this.addTimestamp("timestamp", this.includeTimestamp, iLoggingEvent.getTimeStamp(), var2); this.add("level", this.includeLevel, String.valueOf(iLoggingEvent.getLevel()), var2); this.add("thread", this.includeThreadName, iLoggingEvent.getThreadName(), var2); this.add("logger", this.includeLoggerName, iLoggingEvent.getLoggerName(), var2); this.add("message", this.includeFormattedMessage, iLoggingEvent.getFormattedMessage(), var2); this.add("raw-message", this.includeMessage, iLoggingEvent.getMessage(), var2); this.add("context", this.includeContextName, iLoggingEvent.getLoggerContextVO().getName(), var2); this.addThrowableInfo("exception", this.includeException, iLoggingEvent, var2); this.addCustomDataToJsonMap(var2, iLoggingEvent); Map<String,String> mdc = iLoggingEvent.getMDCPropertyMap(); String correlationId = mdc.getOrDefault("Correlation-ID",""); this.add("Correlation-ID", this.includeMDC, correlationId , var2); return var2; } } 并在布局中添加新类。 <layout class="com.test.utils.CustomJsonLayout">

回答 2 投票 0

使用 logback 滚动短期 Java 应用程序的日志

我为我的一个批处理任务开发了一个Java Springboot应用程序。我将使用该应用程序的 jar 和 shell 脚本。 Shell 脚本将手动执行...

回答 1 投票 0

设置日志消息的时区

有没有办法在Spring Boot中配置logback以与系统时区不同的时区输出日志消息的本地时间? 我想通过配置来设置它(即

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.