Skip to content

Instantly share code, notes, and snippets.

View nadeem4's full-sized avatar
🏠
Working from home

CodeWithNK nadeem4

🏠
Working from home
View GitHub Profile
public class Logger {
// private constructor to avoid instantiation (Point #1)
private Logger(){}
// Private static variable to ensure single instance (Point #2)
private static Logger loggerInstance;
// Global Access point for private static instance (Point #3)
public static Logger getInstance(){
/*
* Solution for Thread Safe Implementation in Multi Threaded
* environment -- Synchronized Keyword
*/
public class ThreadSafeLogger {
private static ThreadSafeLogger loggerInstance;
private ThreadSafeLogger(){}
/*
* Solution for Thread Safe Implementation in Multi Threaded
* environment -- Bill Pugh Implementation
*/
public class ThreadSafeLogger {
private static class InstanceHolder {
static final ThreadSafeLogger INSTANCE = new ThreadSafeLogger();
}
public static ThreadSafeLogger getInstance() {
return InstanceHolder.INSTANCE;
Class loggerClazz = Logger.class;
Constructor constructor = loggerClazz.getDeclaredConstructor();
constructor.setAccessible(true);
@nadeem4
nadeem4 / LoggableControllerAspect.java
Last active November 21, 2020 14:47
Enable Out Of Box logging for Controllers in Spring Boot. Place spring.factories under resources/META-INF to enable aut-configuration
package logging.aspects;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.jboss.logging.MDC;
import org.springframework.context.annotation.Configuration;
import utility.mapper.AppObjectMapper; // remove this import if do not want to use utility dependency from my multi-module projec
@nadeem4
nadeem4 / LoggableRepositoryAspect.java
Last active November 21, 2020 14:41
Enable Out of the Box Logging for Repository Classes in Spring boot. Place spring.factories under respources/META-INF, to enable auto-configuration
package logging.aspects;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.jboss.logging.MDC;
import org.springframework.context.annotation.Configuration;
import utility.mapper.AppObjectMapper; // remove this import if do not want to use utility dependency from my multi-module project
@nadeem4
nadeem4 / LoggableServiceAspect.java
Last active November 21, 2020 14:38
Enable Out Of Box logging for Service in Spring Boot. Place spring.factories under resources/META-INF to enable aut-configuration
package logging.aspects;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.jboss.logging.MDC;
import org.springframework.context.annotation.Configuration;
import utility.mapper.AppObjectMapper; // remove this import if do not want to use utility dependency from my multi-module project
@nadeem4
nadeem4 / Loggable.java
Last active November 21, 2020 14:51
Add logging for methods in Spring Boot on which @Logaable is used. Use @loggable annotation on methods, to enable logging
package logging.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target ({ElementType.METHOD, ElementType.CONSTRUCTOR})
@Retention (RetentionPolicy.RUNTIME)
public @interface Loggable {
@nadeem4
nadeem4 / SwaggerConfig.java
Created November 2, 2020 04:38
Implementation of Implicit grant OAuth2 on SpringFox Swagger
package apidocs.config;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
@nadeem4
nadeem4 / logback-spring.xml
Last active November 19, 2020 03:52
Logback file for enabling JSON formatted log, sending logs to Application insight
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="jsonConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<levelValue>[ignore]</levelValue>
<version>[ignore]</version>
</fieldNames>