Unable to log properly in log file - spring

I am using Lombok annotations (#slf4j) to create logs.
I have been trying to log in different levels such as log.info("processing xyz")
Log.error, log.debug but I am unable to log these levels into the log file.
Below is the log4j.xml file, only the request coming from the "client(postman/swagger) is logged and not the other things.
None of the level is working nor the info, nor error nor debug.
What might be the possible issue?
<Configuration status="DEBUG">
<Appenders>
<Console name="LogToConsole" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %-5level %c:%L - %msg%n"/>
</Console>
<RollingFile name="LogToFile"
fileName="/Users/subhamsharma/Desktop/atm_log.log"
filePattern="/Users/subhamsharma/Desktop/atm_log.%d{yyyy-MM-dd}.%i.log.gz">
<PatternLayout>
<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %5level [%X{guid}] [%X{luid}] [%X{customId1}]
[%X{customId2}] [%c{3}:%L] - %m%n
</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<Async name="AsyncLogToFile" bufferSize="10000">
<AppenderRef ref="LogToFile"/>
<blocking>false</blocking>
</Async>
</Appenders>
<Loggers>
<Logger name="com.apnatuitionmaster" level="debug" additivity="false">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Logger name="org.springframework" level="error" additivity="false">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Logger name="org.apache" level="error" additivity="false">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Logger name="org.hibernate" level="error" additivity="false">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Logger name="springfox.documentation" level="error" additivity="false">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Logger name="com.mchange" level="error" additivity="false">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Logger name="org.elasticsearch" level="error" additivity="false">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<Root level="error">
<AppenderRef ref="AsyncLogToFile"/>
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
</Configuration>```

Related

spring cloud set logging.level does not work in application.yml(I have a logback-spring.xml, too)

these screenshot are my configurations about logback
logback-spring.xml
<root level="info">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</root>
application.properties
logging.file.path=./logs
logging.level.cn.hsa=debug
logging.level.root=info
logging.level.org.springframework.web=trace
It’s not working when i change logging.level.root to debug or others in application.properties, it's always use this configure in logback-spring.xml
I read spring source code, logback-srping.xml loaded before application.properties
but i dont know why these configures were not override
You can define something like this if you want to customize:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty scope="context" name="LOG_PATH" source="app.log.path"
defaultValue="your_log_path" />
<timestamp key="dateStamp" datePattern="yyyy-MM-dd" />
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</Pattern>
</encoder>
</appender>
<springProfile name="test,prod">
<appender name="Access-FileAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${LOG_PATH}/logs/xyz.%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- keep 90 days' worth of history -->
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</Pattern>
</encoder>
</appender>
<appender name="Async-Access-FileAppender" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="Access-FileAppender" />
</appender>
</springProfile>
<root>
<level value="INFO" />
<appender-ref ref="consoleAppender" />
</root>
<springProfile name="local">
<logger name="com.xxx.yyy" level="DEBUG" additivity="false">
<appender-ref ref="consoleAppender" />
</logger>
</springProfile>
<springProfile name="dev">
<logger name="com.xxx.yyy" level="DEBUG" additivity="false">
<appender-ref ref="consoleAppender" />
</logger>
</springProfile>
<springProfile name="test,prod">
<logger name="com.xxx.yyy" level="INFO" additivity="true">
<appender-ref ref="consoleAppender" />
</logger>
</springProfile>
</configuration>
As you can see, test/prod have the similar logging configuration. Similarly, you can configure for local and dev as well.
Hope this helps.

How to exclude a package from root tag in xml configuration log4j2

I am trying to disable the logging of a package for certain appenders, but I still have them logged everything else.
I have tried:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console">
</Console>
<RollingFile name="files">
</RollingFile>
</Appenders>
<category name="org.springframework.beans">
<priority value="info" />
</category>
<Loggers>
<Logger name="my.package.to.disable.log" level="off">
<AppenderRef ref="console" />
</Logger>
<Root level="info" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="files" />
</Root>
</Loggers>
</Configuration>
This disables my package logs in both appenders. How could I prevent this?

how to configure log4j with multiple profiles using one log4j.xml file

Logback has springProfile tag for configur with multiple spring profiles, but i cannot find how to do same thing in Log4j.
dev
<logger name="org" additivity="false">
<level value="INFO" />
<appender-ref ref="console" />
</logger>
real
<logger name="org" additivity="false">
<level value="INFO" />
<appender-ref ref="console" />
<appender-ref ref="async-appender"/>
</logger>

Not able to set different log level for my particular package

I expected to turn off logging for the package by setting level=OFF for my package.
However, I am not able to do it and logs are still added in the log file.
I have tried to
<!-- <logger name="org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider"
level="OFF"/> -->
<logger name="LOG-INFO" level="DEBUG">
<appender-ref ref="ASYNC-FILE" />
<appender-ref ref="ASYNC-DEBUG" />
<appender-ref ref="ASYNC-FILE" />
<appender-ref ref="ASYNC-FILE-ERROR" />
</logger>
<logger name="com.spicemoney.BulkMessaging.Controller"
level="OFF">
<appender-ref ref="ASYNC-FILE" />
<appender-ref ref="ASYNC-DEBUG" />
<appender-ref ref="ASYNC-FILE" />
<appender-ref ref="ASYNC-FILE-ERROR" />
</logger>
<root level="DEBUG">
</root>
Package is com.spicemoney.BulkMessaging.Controller.
But it is still in level INFO
Here is the screeshot of package structure

log4j configuration in Hibernate

I want to show sql queries executed by ihbernate in my logs.
This is my current log4j configuration:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="CA" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n" />
</layout>
</appender>
<root>
<level value="info" />
<appender-ref ref="CA" />
</root>
<logger name="org.hibernate.SQL" additivity="false">
<level value="debug" />
<appender-ref ref="CA" />
</logger>
<logger name="org.hibernate.hql" additivity="false">
<level value="debug" />
<appender-ref ref="CA" />
</logger>
<logger name="org.hibernate.stat" additivity="false">
<level value="trace" />
<appender-ref ref="CA" />
</logger>
</log4j:configuration>
But I am still getting nulls with org.hibernate.stat.internal.ConcurrentStatisticsImpl:
08-11-2016 09:54:39,318 [http-bio-8080-exec-8] DEBUG org.hibernate.stat.internal.ConcurrentStatisticsImpl - HHH000117: HQL: null, time: 1ms, rows: 4
How can I log full SQL instead of HQL: null?
To log the executed queries I added the following to my logj4-configuration:
<!-- log Hibernate SQL Statements without parameters -->
<logger name="org.hibernate.SQL" additivity="false">
<level value="DEBUG" />
<appender-ref ref="console" />
</logger>
<!-- add logging of parameters of the sql statements -->
<logger name="org.hibernate.type.descriptor.sql" additivity="false">
<level value="TRACE" />
<appender-ref ref="console" />
</logger>

Resources