A. Concepts
Standardization export log path and name
eg:
----
/var/log/[microservice-name]/[microservice-name]-error.log # error only
/var/log/[microservice-name]/[microservice-name].log # info, warning & debug
Log using JSON formatted
Severity logs & formatting logs
eg: INFO
---
{
"datetime": "2020-10-10 20:01:59TZ+0700"
"severity": "info",
"message": "yes, this is info"
}
eg: WARNING
---
{
"datetime": "2020-10-10 20:01:59TZ+0700"
"severity": "warning",
"message": "this is warning"
}
eg: ERROR
---
{
"datetime": "2020-10-10 20:01:59TZ+0700"
"severity": "error",
"code": 404
"message": "not found"
}
eg: DEBUG (optional)
---
{
"datetime": "2020-10-10 20:01:59TZ+0700"
"severity": "debug",
"code": 100
"message": "describe debug information (criteria by number) "
}
Logrotation & compression
# /etc/logrotate.d/[microservice-name]
---
/var/log/[microservice-name]/[microservice-name].log {
rotate 12
weekly
missingok
notifempty
compress
delaycompress
size 50M
notifempty
sharedscripts
postrotate
/usr/bin/killall -HUP [microservice-name]
endscript
}
/var/log/[microservice-name]/[microservice-name]-error.log {
rotate 12
weekly
missingok
notifempty
compress
delaycompress
size 50M
notifempty
sharedscripts
postrotate
/usr/bin/killall -HUP [microservice-name]
endscript
}
Log4j (JAVA)
# log4j.properties
---
log4j.rootLogger=INFO, fileLogger
log4j.appender.fileLogger=org.apache.log4j.RollingFileAppender
log4j.appender.fileLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.fileLogger.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n
log4j.appender.fileLogger.File=example.log
log4j.appender.fileLogger.MaxFileSize=50MB
log4j.appender.fileLogger.MaxBackupIndex=12
Schedule logging (log exporter)
- Schedule with cron (crontab)
/etc/cron.d/[microservice-name]
- Schedule with systemd
/etc/systemd/system/[microservice-name].service
/etc/systemd/system/[microservice-name].timer
B. Tools
- GO
https://github.com/sirupsen/logrus
- Python
from datetime import datetime
import logging
import time
import json
def main():
print("--- Staring Log Exporter Agent ---")
logging.basicConfig(level=logging.INFO, filename="/var/log/[microservice-name]/[microservice-name].log", format="%(message)s")
if __name__ == '__main__':
main()