LogMetrics framework for Microservices (Spring)— part 1

Karthikeyan Sadayamuthu
Devexchange Programming Blog
2 min readNov 21, 2019

--

LogMetrics Framework provides simplified configuration to log payload and metrics data.

Maven Repo

maven { url "https://dl.bintray.com/m2/release/"}

Dependencies

compile ("io.devxchange:logmetrics:0.0.2")

Enable logmetrics — Add below property to your application.properties file

logmetrics.logging.enabled=true
logmetrics.logging.request.enabled=true
logmetrics.logging.response.enabled=true
logmetrics.logging.obfuscate.enabled=false
logmetrics.logging.obfuscate.md5.fields= #comma seperated fields
logmetrics.logging.obfuscate.sha256.fields= #comma seperated fields
logmetrics.logging.obfuscate.fields= #comma seperated fields

SpringBoot Applicaiton

@SpringBootApplication
@ComponentScan(basePackages = { "io.devxchange.logmetrics.demo", "io.devxchange.logmetrics" })
public class LoggingDemoApplication {

public static void main(String[] args) {
SpringApplication.run(LoggingDemoApplication.class, args);
}
}

Injecting the LogWriterManager & adding Interceptors

@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {

@Autowired
@Qualifier("manager.logwriter")
private LogWriterManager logWriterManager;

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new FrontendRestInterceptor(logWriterManager));
}
}

LogMetrics json schema

{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "LogMetrics",
"properties": {
"Node": {
"type": "string",
"description": "Application Host IP Address"
},
"message_type": {
"type": "string",
"description": "Logmetrics message type",
"value": "LOGMETRICS_MESSAGE"
},
"Duration": {
"type": "integer",
"description": "Response time of the API"
},
"Host": {
"type": "string",
"description": "Application Host Name"
},
"Fault": {
"type": "boolean",
"description": "API Success or Failed status "
},
"Method": {
"type": "string",
"description": "API Method name"
},
"ResponseBody": {
"type": "string",
"description": "API Response Body"
},
"StartDateTime": {
"type": "string",
"description": "API Start Time"
},
"EndDateTime": {
"type": "string",
"description": "API End time"
},
"HttpMethod": {
"type": "string",
"description": "Http Method Type"
},
"RequestBody": {
"type": "string",
"description": "API Request Body"
}
}
}

sample logmetrics message

{
"Node": "127.0.0.1",
"message_type": "LOGMETRICS_MESSAGE",
"Duration": 106,
"Host": "hostname",
"Fault": false,
"Method": "/user-service/api/v1/user/{id}",
"ResponseBody": "{\"id\":1,\"name\":\"02adcec2263d2127269fcd769c33f029\",\"age\":\"35135aaa6cc23891b40cb3f378c53a17a1127210ce60e125ccf03efcfdaec458\",\"salary\":\"********\"}",
"StartDateTime": "Tue Nov 26 23:22:54 EST 2019",
"EndDateTime": "Tue Nov 26 23:22:54 EST 2019",
"HttpMethod": "GET",
"RequestBody": ""
}

Release History

0.0.2

  • adding request and response payload obfuscation (masking sensitive information)

0.0.1

  • logging rest verb & payload to console.
  • feature to enable/disable payload logging

Demo Project

http://localhost:8080/swagger-ui.html

Want to Contribute to LogMetrics framework?

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

--

--