我的 logback.xml 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<jmxConfigurator/>
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
<property name="LOG_DIR" value="/tmp/logs"/>
<springProperty name="appName" source="spring.application.name"/>
<appender class="ch.qos.logback.core.ConsoleAppender" name="STDOUT">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
some pattern
</Pattern>
</layout>
</appender>
<logger additivity="false" level="DEBUG"
name="xyz">
<appender-ref ref="STDOUT"/>
</logger>
<root level="ERROR">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我试图从整个应用程序禁用调试日志,但找不到方法。我想打印 INFO、ERROR 级别的日志。
尽管在一些教程中,例如这里(参数化日志记录部分),说Logback消息{}参数化帮助我们避免日志记录数据中不必要的计算 (如果日志记录级别不是DEBUG):
logger.debug("The bonus for employee {} is {}",
employee.getName(), employeeService.calculateBonus(employee));
Run Code Online (Sandbox Code Playgroud)
我测试(在 logback 版本上1.2.3)该优化仅适用于不必要的toString()参数对象 - 因为这适用于log4j。
Logback文档不包含此细节。
那么,我们必须使用 isDebugEnabled() 来处理所有“昂贵”的日志记录,不是吗?
我尝试将logstash-logback-encoder版本配置6.4为打印漂亮的 JSON 格式
<appender name="consoleAsJSON" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeCallerData>true</includeCallerData>
<jsonGeneratorDecorator class="net.logstash.logback.decorate.PrettyPrintingJsonGeneratorDecorator"/>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
输出pretty print如预期。然后我继续进行配置,屏蔽为
<appender name="consoleAsJSON" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeCallerData>true</includeCallerData>
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<defaultMask>XXXX</defaultMask>
<path>password</path>
</jsonGeneratorDecorator>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
输出marked也符合预期。
无论如何,当我将这两者结合在一起时,它只做一件事,或者pretty print或masked。
<appender name="consoleAsJSON" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeCallerData>true</includeCallerData>
<jsonGeneratorDecorator class="net.logstash.logback.decorate.PrettyPrintingJsonGeneratorDecorator"/>
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<defaultMask>XXXX</defaultMask>
<path>password</path>
</jsonGeneratorDecorator>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
它只做masked, 但是not pretty print.
<appender name="consoleAsJSON" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeCallerData>true</includeCallerData>
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<defaultMask>XXXX</defaultMask>
<path>password</path>
</jsonGeneratorDecorator>
<jsonGeneratorDecorator class="net.logstash.logback.decorate.PrettyPrintingJsonGeneratorDecorator"/>
</encoder> …Run Code Online (Sandbox Code Playgroud) 我有一个带有 Logback 的 Springboot 应用程序。这场战争正在 Docker 容器中的 Liberty Web 服务器中运行
版本:Springboot 2.5.3 Logback 1.2.3
我看到一个奇怪的行为,如果我在 Mac 或 Redhat 上运行此容器,应用程序会正常启动并按预期记录。但是,当在 Ubuntu 中运行相同的 docker 容器时,我从 Logback 的 Joran 解释器中看到以下错误:
...
08:07:53,308 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework] to WARN
08:07:53,308 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate] to WARN
08:07:53,308 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [springfox] to WARN
08:07:53,313 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@88:32 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
08:07:53,313 |-ERROR …Run Code Online (Sandbox Code Playgroud) 我使用以下代码来打印 try catch 块中发生的任何异常,但是当异常发生时 logback 不会打印完整的堆栈跟踪,而是写入一行错误(没有明确说明导致它的原因. 如何在 logback 输出中打印出完整的堆栈跟踪?
Try 捕获异常的 catch 块
try {
// Create JMS objects
context = cf.createContext();
destination = context.createQueue("queue:///" + QUEUE_NAME);
((MQDestination)destination).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
} catch (Exception e) {
// catch any exception occurred while trying to connect to the destination queue Manager
e.printStackTrace();
LOGGER.info(e.toString());
return "Unable to connect to the destination queue Manager '"+QMGR +"'";
}
Run Code Online (Sandbox Code Playgroud)
重新登录错误输出:
21:18:10.748 [http-nio-8010-exec-4] INFO com.mqMessageHandler.Webcontroller - com.ibm.msg.client.jms.DetailedJMSRuntimeException: JMSWMQ0018: Failed to connect to queue manager 'KAU.TST' with connection mode 'Client' …Run Code Online (Sandbox Code Playgroud) 我引入了spring-boot-starter-web,使用了自带的spring-boot-starter-logging框架,在yaml中指定了配置文件,启动报错yaml:
logging:
level:
root: info
com.felix.flink.tutorial.api: debug
config: classpath:logback-spring.xml
Run Code Online (Sandbox Code Playgroud)
行家:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.felix</groupId>
<artifactId>flink-tutorial-component</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
例外:
23:45:33.009 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@7abaedae
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:293)
at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:118)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:238)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:79)
at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:56)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
at …Run Code Online (Sandbox Code Playgroud) 我是新登录用户,并且有一个一般性问题。我将在Eclipse中进行开发,并且想知道将配置文件放置在哪里。例如我的类Test.java位于ProjectName / src / default package / Test.java中
我在哪里放置配置文件?我需要创建一个新文件夹还是将其放置在同一位置?
嗨,我想DBAppender在我的Spring Boot应用程序中使用A。我想从application.properties文件中检索数据库连接属性。但是,似乎无法识别它们。请记住,我正在使用,Spring Boot 1.2.x因此无法使用logback-spring.xml。
我正在使用的配置如下:
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>${spring.datasource.driver-class-name}</driverClass>
<url>${spring.datasource.url}</url>
<user>${spring.datasource.username}</user>
<password>${spring.datasource.password}</password>
</connectionSource>
</appender>
Run Code Online (Sandbox Code Playgroud) 我们在现场部署了一个系统,该系统具有使用logback日志记录框架的Java服务.每个服务都有自己的logback配置文件.
我们发现每秒多次以WARN级别发出特定的日志消息.我们真的只对看到这个消息感兴趣,例如,一次/分钟,以便我们知道问题正在发生; 但是我们不想提高类的日志记录级别,以便丢弃INFO级别的其他消息.
修改代码不是一种选择,也不会对涉及重新启动违规服务的系统进行任何修改.但是,我们可以修改日志配置.
有没有办法在logback中通过XML配置文件来实现这种行为?
更新 消息类似,但不相同; 例如:
WARN The following ID will be dropped: 12345
WARN The following ID will be dropped: 54321
Run Code Online (Sandbox Code Playgroud) SLF4J是一个包装器/外观类,因此您可以使用许多不同的日志类型,例如logback,log4j等.假设我想使用logback和log4j,甚至第三个类似java.util.logging.当我写这样的日志:
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么知道它使用哪个日志框架?假设我希望它使用logback进行此调用,我怎么知道它不使用另一个框架?