我有这个logback.xml文件:
<configuration debug="true" scan="true" scanPeriod="60 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${MY_HOME}/logs/mylog.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logs/my.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level - %msg%n</Pattern>
</layout>
</appender>
<root level="TRACE">
<appender-ref ref="FILE"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
并且${MY_HOME}是一个已定义的系统变量(echo $MY_HOME在linux上显示正确的路径).
问题是,logback似乎没有正确读取它,它存储日志 MY_HOME_IS_UNDEFINED/logs/my.log
我究竟做错了什么?非常感谢!
编辑:我犯了一个错误,把OSC_HOME放在我真正意味着MY_HOME的地方.对于那个很抱歉
我使用logback库实现了一个spring boot项目的日志记录.我想根据我的spring配置文件(属性'spring.pofiles.active')加载不同的日志配置文件.我有3个文件:logback-dev.xml,logback-inte.xml和logback-prod.xml.我使用的是春季启动版本1.2.2.RELEASE.
正如您可以阅读spring boot文档(此处).它说:
可以通过在类路径中包含适当的库来激活各种日志记录系统,并通过在类路径的根目录中提供合适的配置文件或在Spring Environment属性logging.config指定的位置进一步自定义.(但请注意,由于在创建ApplicationContext之前初始化日志记录,因此无法在Spring @Configuration文件中控制@PropertySources的日志记录.系统属性和传统的Spring Boot外部配置文件工作正常.)
所以我尝试在application.properties文件中设置'logging.config'属性:
logging.config=classpath:/logback-${spring.profiles.active}.xml
Run Code Online (Sandbox Code Playgroud)
但是,当我启动我的应用程序时,我的logback- {profile} .xml未加载...
我认为日志记录是所有使用spring boot的项目遇到的常见问题.我想知道我是否在正确的方向,因为我有其他解决方案,但我觉得它们不优雅(在logback.xml文件或命令行属性中使用Janino进行条件解析).
如何配置Logback以抑制其到控制台的所有输出(标准输出)?特别是,我希望抑制(或重定向)Logback自己的日志消息,如下所示:
16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,923 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
16:50:25,924 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@1a15291 - Will scan for changes in file [/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] every 60 seconds.
Run Code Online (Sandbox Code Playgroud)
我需要禁用所有日志记录到标准输出,因为我们的生产环境不允许应用程序将任何消息打印到标准输出.
注意我正在使用Logback …
我们使用slf4j + logback,碰巧有一些使用commons-logging的第三方库.如何设置它以使用logback?
我一直在尝试设置一个简单的logback项目来按日期和文件大小滚动我的日志文件,到目前为止,我一直无法让我的appender转到另一个文件.而是写入<file />标记指定的日志.
这是我的logback.xml配置文件:
<?xml version="1.0"?>
<configuration scan="true" scanPeriod="10 seconds">
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</layout>
</appender>
<appender name="milliroller" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>log/output.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</layout>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1KB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout"/>
<appender-ref ref="milliroller"/>
</root>
<logger name="com.tkassembled.logback" level="DEBUG"/>
</configuration>
Run Code Online (Sandbox Code Playgroud)
乍一看,它看起来应该有效,对吗?有什么我做错了吗?我的整个可构建项目都可以在这里找到:http://www.mediafire.com/file/2bxokkdyz2i/logback.zip
我想在我的应用程序(Spring Integration),debug.log和main.log中有两个日志文件.我想在INFO级别运行main.log,在DEBUG级别运行debug.log.这对于appender上的过滤器是可行的.我想根据源记录不同级别的appender.换一种说法
<logger name="org.springframework" level="ERROR">
<appender-ref ref="main" />
</logger>
<logger name="org.springframework" level="DEBUG">
<appender-ref ref="debug" />
</logger>
<logger name="com.myapp" level="INFO">
<appender-ref ref="main" />
</logger>
<logger name="com.myapp" level="DEBUG">
<appender-ref ref="debug" />
</logger>
Run Code Online (Sandbox Code Playgroud)
总结一下:
因此,我必须让记录器在DEBUG上运行,并且在appender上的阈值过滤器不够精细.
更新添加了问题的清晰度
是否有可能以某种方式拦截日志记录(SLF4J + logback)并InputStream通过JUnit测试用例获取(或其他可读的内容)......?
我想配置logback来执行以下操作.
除了最后一项,启动滚动,我已经完成了所有工作.有谁知道如何实现这一目标?这是配置......
<appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg \(%file:%line\)%n</Pattern>
</layout>
<File>server.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>server.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- keep 7 days' worth of history -->
<MaxHistory>7</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>50MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
Run Code Online (Sandbox Code Playgroud) 用于回溯的配置文件可以在类路径中找到,因此是特定于Eclipse项目的,这不是我想要的.我正在使用多个Java实用程序,它们都驻留在一个项目中(这个共享类路径),我需要为其中一些使用特定的配置.
我尝试过变量替换和Joram配置器,但没有什么对我有用.这很可能是我的错,我有一天会解决它,但是现在我需要一个简单的解决方案.
我们有一个spring-boot 1.0.RC1应用程序,其中配置了用于日志记录的logback和src/test/resources中的logback.xml文件.当我们从maven运行spring-boot时,似乎可以看到并遵守logback文件.(这是我们在spring-boot徽标之后所需的日志记录格式)
D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel>mvn clean spring-boot:run -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener -Dlogback.configurationFile=src/test/resources/logback.xml
<snip/>
[INFO] --- spring-boot-maven-plugin:0.5.0.M7:run (default-cli) @ my-app-camel ---
06:41:56,011 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [src/test/resources/logback.xml] at [file:/D:/Users/myName/My%20Projects/Work/my-co/my-app/src/my-app/my-app-camel/src/test/resources/logback.xml]
06:41:56,150 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
06:41:56,170 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 5 seconds
06:41:56,171 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel\src\test\resources\logback.xml]] every 5 seconds.
06:41:56,172 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
06:41:56,223 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to …Run Code Online (Sandbox Code Playgroud)