How do I disable logging from javers? - spring-boot

Currently working in a large spring-boot application, it would be preferred to disable logging if possible to reduce noise.
sample of the logs
NFO org.javers.core.JaversBuilder mappingStyle: FIELD
NFO org.javers.core.JaversBuilder loading GroovyAddOns ...
NFO org.javers.core.JaversBuilder using fake InMemoryRepository, register actual Repository implementation via JaversBuilder.registerJaversRepository()
NFO org.javers.core.JaversBuilder JaVers instance started in 116 ms
How do I disable logging from javers?

You can set log level for Javers in logback.xml like this :
<?xml version="1.0" encoding="UTF-8"?>
<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="org.javers.SQL" level="DEBUG"/>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
With this configuration you should only see DEBUG log messages displayed in pattern above.
If you want to completly disable logging you can use this :
<?xml version="1.0" encoding="UTF-8"?>
<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="org.javers.SQL" level="OFF"/>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
The instruction: level="OFF" tells Logback to disable all log output for a given logger, in your case that is javers logger.

Related

No logging in external tomcat with spring boot application

I am trying to log the spring boot applications logs to a separate directory(apps-archive ie ${catalina.base}/logs/apps-archive/log.log) in the external tomcat. After I start the server the log file is empty, and there are some logs in catalina.2021-04-04.log file about application is deployed and so...
In my spring boot application I have logback-spring.xml in src/main/resources as
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d [%thread] %-5level %-50logger{40} : %msg%n
</pattern>
</encoder>
</appender>
<property name="LOG_PATH" value="${catalina.base}/logs/apps-archive"/>
<appender name="SAVE-TO-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/log.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d [%thread] %-5level %-50logger{40} : %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>
${LOG_PATH}/log_%d{dd-MM-yyyy}_%i.log
</fileNamePattern>
<maxFileSize>20MB</maxFileSize>
<maxHistory>10</maxHistory>
<totalSizeCap>400MB</totalSizeCap>
</rollingPolicy>
</appender>
<springProfile name="dev">
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="SAVE-TO-FILE"/>
</root>
<!-- Hibernate loggers -->
<logger level="DEBUG" name="org.hibernate"/>
<logger level="INFO" name="com.commerzbank.eudsgvo"/>
<logger level="DEBUG" name="org.hibernate.type.descriptor.sql"/>
<logger level="DEBUG" name="org.springframework"/>
</springProfile>
</configuration>
I have no configuration for logging in application.properties file. Can anyone please suggest me why logs file is empty in apps-archive directory on server.
The default profile spring boot apps run with is default.
Can you please change
<springProfile name="dev">
to
<springProfile name="default">
Regarding the issues with the RollingPolicy I don't have any ideas at the moment.

console pattern not recognized in logback-spring.xml

I already looked up on stackoverflow but I did not find something comparable.
I use spring boot with following dependencies:
spring-boot 2.2.1 with
spring-boot-starter-logging 2.2.1
logback-core 1.2.3
logback-classic 1.2.3
I want to use a custom pattern for my log output to print my mdc.variables on console. Which works via application.properties
logging.level.com.mypackage=TRACE
logging.pattern.level=%d{yyyy-MM-dd HH:mm:ss} [%t] [myMdc:%X{myMdcVariable}] %-5level %logger{36} - %m%n
But I get double entries but I can not set the additivity property via application.properties. I have to use logback-spring.xml. Which looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="com.mypackage" level="TRACE" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%t] [myMdc:%X{myMdcVariable}] %-5level %logger{36} - %m%n
</Pattern>
</encoder>
</appender>
</configuration>
This solves the double entries. But the pattern is not use for the logoutput. I can have either double entries or no pattern because it is not possible to combine configuration via application.properties and logback-spring.xml. What am I doing wrong?
I finally found out what is wrong. I checked the defaults.xml and the ConsoleAppender.xml on github e.g.
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/console-appender.xml
The solution was to define the constant CONSOLE_LOG_PATTERN. And to define it before importing the defaults.xml and console-appender.xml
My working config file looks now like this:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%t] [myMdc:%X{myMdcVariable] %-5level %logger{36} - %m%n"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="com.mypackage" level="TRACE" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
${CONSOLE_LOG_PATTERN}
</pattern>
</encoder>
</appender>
</configuration>

Writing log in file and display it on console at the same time

here is my logback-spring.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<file>./target/log/app-debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./log/target/app-debug.log-%d.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</pattern>
</encoder>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<file>./target/log/app-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./target/log/app-error.log-%d.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="DEBUG_FILE"/>
</root>
<root level="ERROR">
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>
Now everything log correctly but I am unable to see INFO level on my console while running the app. I still have
logging:
level:
root: INFO
file:
name: ./log/app.log
in my .yml file but there is no whatsoever logging on console.
Can I write the log in file and display it on the console at the same time?
You can use ConsoleAppender in your existing logback config. Below is a small snippet for your reference,
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
And you can control the root log level and also include the reference of your appender "DEBUG_FILE" as well to print in the console in addition to the implementation which you have done to write in a file. Below snippet is set to info to match your use case,
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG_FILE" />
</root>

log message print twice with java logback

I use logback to print log in my SpringBoot application. When I check out the log file, I found that, all log message print twice! It is so strange .
Yeah, I have found some answer similar to my issue. But maybe they are not what I want.
here is my logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_HOME" value="${user.home}/app/logs"/>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}-[%thread]-%-5level-%logger{50}: %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_HOME}/cloud-sync-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- each file should be at most 10MB, keep 3 days worth of history, but at most 1GB -->
<maxFileSize>10MB</maxFileSize>
<maxHistory>3</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
<discardingThreshold >0</discardingThreshold>
<queueSize>256</queueSize>
<includeCallerData>true</includeCallerData>
<appender-ref ref ="FILE"/>
</appender>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="FILE"/>
<appender-ref ref="ASYNC"/>
</root>
</configuration>
How can I make sure log messages appear only once. Thank you.
It is because you have added ASYNC and FILE for INFO.
Please remove one of them based on your requirement.

Spring boot startup logs to file

Is it anyway to send startup logs to file, right now all logs up to the statement "Started Application in...." goes to stdout, I want all logging to file.
My logback config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_FILE" value="logs/app${PID}.log"/>
<appender name="AI-APPENDER"
class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender">
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="AI-APPENDER"/>
</root>
</configuration>
You need to configure your logging framework. Assuming you're just using the default from spring-boot then that's LogBack. So have a look at their docs or have a search, there are many useful resources (like this one)
If you add a logback.xml file with the following content to your resources folder you should get logging to both console and file (called application.log) in the same format as you now see for just console.
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>application.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<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="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
You probably want to use a RollingFileAppender as this will allow you to create new files when the log file gets big.

Resources