我有以下情况:一个使用日志的Spring启动应用程序,以及已经在应用程序中配置的几个日志记录属性。
我想添加其他只能通过logback.xml
文件可用的配置选项,但是一旦我将此文件添加到类路径(无论它被命名为logback.xml
还是logback-spring.xml
),它就会覆盖appistio.yml
中的所有内容,并且所有日志记录级别/模式以及那里定义的其他选项都不再有效 - 似乎在添加logback后.xml
来自appication.yml
的所有选项 被忽略,我需要在xml文件中重新添加它们而不是yml。
我的问题是:是否可以合并这两个配置?我的意思是我只需要添加一个选项来回滚.xml我不想强迫其他开发人员学习日志.xml语法,因为他们已经熟悉appistio.yml
配置日志记录的方式。
更新1
我正在尝试做的一件事是启用日志回传JMX访问,因此我创建了一个具有以下内容的日志Spring.xml
文件:
<configuration debug="true">
<jmxConfigurator />
</configuration>
在我引入这个文件之后,我丢失了webapp的所有日志记录,即使我在< code>application.yml文件中有< code > logging . level . root:info 。
我还想继续使用在< code>application.yml中定义的根日志记录级别和模式。我还想配置几个特定于logback的< code>turboFilters,据我所知,只能通过logback配置文件来定义。
更新 2
@devatherock和@Ashish Patil asnwers都帮助了我解决这个问题,我已经意识到通过springProperty
在logback
中包含spring配置元素的可能性.xml但我还没有看到它是一个可行的解决方案,因为我必须以这种方式重写多个元素,使日志.xml
更难阅读。
但是正如@devatherock提到的——默认情况下,配置文件是合并的logback需要在配置中存在appender和root logger。即使存在于< code>logback.xml文件中,根记录器级别仍将被< code>application.yml设置覆盖(这是所期望的),但< code>pattern属性不会被覆盖,为此我们必须使用< code>springProperty。
因此,虽然两个答案都很有帮助,但实际上@devatherock的徽章对我更有帮助,我包括接受他的答案。
Spring属性的使用可能适合您的要求。
比方说,你有应用程序,如下所示
:
logging:
level:
root: DEBUG
... // other configs
现在,即使在进行回溯
.xml后,您也要强制实施 application.yml 的配置,那么您可以在回溯
中添加 spring 属性
.xml:
<configuration>
<jmxConfigurator />
<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>
<springProperty scope="context" name="loggerProperty" source="logging.level.root"/>
<root level="${loggerProperty}">
<appender-ref ref="STDOUT" />
</root>
... //other configurations.
</configuration>
现在,当您启动spring-boot时,您可以看到application.yml的配置值正在被读取,而不是被覆盖。
因此,通过这种方式,您可以在日志回退
中配置任意数量的属性
基本上,您正在从日志中引用环境
属性(在应用程序属性/ application.yml中定义)。
这里,日志记录.级别.root
是环境属性,它是定义的应用程序.
我创建了一个示例项目,即Spring引导日志回传,它在日志回溯.xml
和应用程序.yml
中指定日志记录配置。
根
日志级别在日志回传中设置为 WARN
.xml如下所示:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="STDOUT" />
</root>
</configuration>
有一个处理< code>/hello的控制器方法,带有一个< code>DEBUG和一个< code>INFO日志行。控制器类的日志级别在< code>application.yml文件中设置为< code>DEBUG,如下所示:
logging:
level:
io.github.devatherock.demo.controller: DEBUG
我启动了应用程序并点击了< code>/hello控制器endpoint。下面是我看到的日志线:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.6.7)
08:41:45.051 [http-nio-8080-exec-1] DEBUG i.g.d.d.controller.HelloController - Debug log in sayHello method
08:41:45.052 [http-nio-8080-exec-1] INFO i.g.d.d.controller.HelloController - Info log in sayHello method
不存在任何应用程序启动日志,因为在日志.xml中,根日志级别设置为 WARN。来自控制器的调试和信息日志行都存在,因为控制器日志级别已在应用程序中设置为 DEBUG.yml。因此,我们可以确认,从 logback.xml 和 application.yml 中应用日志记录配置时不会出现任何问题。
更新1:
日志回溯.xml与 jmx 配置器:
<configuration>
<jmxConfigurator />
<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>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
具有根日志级别的应用程序.yml:
logging:
level:
root: WARN
io.github.devatherock.demo.controller: DEBUG
目前,我正在与 log4j2.7 springframework 4.3。5; 冬眠5.2。三, 我通过一个xml文件配置log4j 为此,我创建了一些appender,其中一个名为“General”。我需要的是,所有日志都必须转到该appender(包括springframework或hibernate生成的日志),并且后者都不会打印在控制台上(我仍然需要其他类中的其他日志) 我试着写这些日志:
在传统的weblogic容器中部署spring boot web应用程序时,我遇到了一些与日志相关的异常。同一个应用程序在嵌入式tomcat上运行良好,无需对其进行任何更改。 对于weblogic 12 c,我看到了一个例外: ulticaster.java:98Aorg.springframework.boot.context.event.InstanceOf(Aistener.publish)
我的springboot项目中想要异步打印日志到文件,对 logback 做了如下配置 java的controller中使用下面代码打印日志 在日志文件中打印出线程名称,同时在IDEA控制台中也打印线程名称,照理说如果是异步写入的日志这两处的线程名称应该不一样,结果日志文件中输出的结果是 控制台中输出的是 线程ID和名称分别是:86 / http-nio-7076-exec-2 两处的线程名称一样
问题内容: 我正在迁移一个曾经使用log4j进行logback / slf4j的应用程序,并且已经出现问题约2周了……我做了一个小项目来测试logback / slf4j,它的工作效果很好,但是由于某种原因,在应用它时到实际的应用程序,它只是不想工作。 我正在使用JBoss 6.2,将EAR部署到standalone / deployments目录并启动服务器(除了我得到这个异常的事实,这一切都很
我在具有以下logback.xml文件的类路径中有slf4j和logback jar(该文件以前已经成功使用过)。但是,DOCX4J3.0仍然将日志记录信息打印到标准输出。我正在使用NetBeans7.4构建基于docx4j的应用程序。我想将日志级别更改为错误,并将其发送到日志文件中。不知道我错过了什么。任何帮助都是非常感谢的。
我使用的是JBoss7,因为我在这个JBoss中部署的ear很少。StandalOne.xml已经使用以下日志记录配置进行了配置 然后我尝试将logging.properties文件添加到一个ear META-INF中,结果如预期的那样。再次,我想从那个logging.properties文件(我已经将其放置到ear之一的META-INF中)引用一个处理程序(在stanalone.xml中定义的M