Home Backend Development Golang Runtime Log Level Change using Golang & GoFr

Runtime Log Level Change using Golang & GoFr

Jul 22, 2024 pm 08:56 PM

In this article, I will be sharing how you can change the log level of your application without restarting your application.

Introduction

Log levels are usually considered to be in order of importance: turn on "unimportant" levels in development (notice, debug and the like), but enable only the "most important" levels (warn, error, etc.) in production, where resources like CPU time and disk space are precious.

But what if your application is running at ERROR level and you start facing many issues, but you cannot figure it out from ERROR level logs, changing the log level by redeploying the application will take a lot of time and resources.

Moreover, running your application at either INFO or DEBUG level in production will generate a large number of logs which can overwhelm the logging system, leading to increased I/O operations and resource consumption.

To rescue us from these issues, GoFr - The Ultimate Golang Framework provides a secure way to change the log level without restarting your application.

Changing Log Level

To change the log level any GoFr application requires the following configuration:

REMOTE_LOG_URL=<URL to user remote log level endpoint> (e.g., https://log-service.com/log-levels?id=1)
Copy after login

GoFr fetches the endpoint provided every 15 seconds by default to get the latest log level, this interval can be increased or decreased by adding the following configuration.

REMOTE_LOG_FETCH_INTERVAL=<Interval in seconds> (default: 15)
Copy after login

Log Level Service

GoFr requires the response from the URL in the following format with two mandatory fields:

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}
Copy after login

Let's create the log-level service which will provide the log-level to our application.

I will be using GoFr to create the service, refer the documentation to know more.

We will use MySQL as the database, to add MySQL add the following configs in .env file in the configs directory.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql
Copy after login

To run the MySQL docker container run the following command

docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
Copy after login

Lets add the main.go file with migrations to create table and we will use AddRESTHandler feature to register the route.

main.go

package main

import (
 "gofr.dev/pkg/gofr"
 "gofr.dev/pkg/gofr/migration"
)

const createTable = `CREATE TABLE level (
    id INT PRIMARY KEY,
    service_name VARCHAR(255) NOT NULL,
    log_level VARCHAR(50) NOT NULL
);
`

func createTableLevel() migration.Migrate {
 return migration.Migrate{
  UP: func(d migration.Datasource) error {
   _, err := d.SQL.Exec(createTable)
   if err != nil {
    return err
   }

   return nil
  },
 }
}

type Level struct {
 ID          int    `json:"id"`
 ServiceName string `json:"serviceName"`
 LogLevel    string `json:"logLevel"`
}

func (u *Level) RestPath() string {
 return "level"
}

func main() {
 app := gofr.New()

 app.Migrate(map[int64]migration.Migrate{1: createTableLevel()})

 err := app.AddRESTHandlers(&Level{})
 if err != nil {
  app.Logger().Fatalf("Failed to register routes for level struct: %v", err)
 }

 app.Run()
}
Copy after login

After running the Log Service we will see the following logs:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

We have all the REST routes registered.

To Create a service send the following request:

curl --location 'localhost:8000/level' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"INFO",
    "serviceName":"gofr-app"
}'
Copy after login

To Update the log level send the following request:

curl --location --request PUT 'localhost:8000/level/1' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"DEBUG",
    "serviceName":"gofr-app"
}'
Copy after login

To Get the log level send the following request:

curl --location 'localhost:8000/level/1'
Copy after login

The same URL will be used in the configs of our application whose log-level has to be changed remotely.

CONCLUSION

By using GoFr remote Log Level change feature, you will get benefits such as:

  • Effortless Adjustments:
    Modify the log level anytime without restarting the application. This is especially helpful during troubleshooting.

  • Enhanced Visibility:
    Easily switch to a more detailed log level (e.g., DEBUG) to gain deeper insights into specific issues, and then switch back to a less detailed level (e.g., INFO) for regular operation.

  • Improved Performance:
    Generating a large number of logs can overwhelm the logging system, leading to increased I/O operations and resource consumption, changing to Warn or Error Level reduces the number of logs, and enhancing performance, and REDUCING CLOUD COST.

Support GoFr by giving a ⭐star: https://github.com/gofr-dev/gofr

Moreover, you have access to the free public endpoint to export and view your application's traces @ tracer.gofr.dev. 
To enable it, add the following config in your .env file

TRACE_EXPORTER=gofr
Copy after login

Other Benefits:
If you contribute towards GOFR either in development or writing articles. You can get free swags(T-shirts, Stickers) by filling out the form presented on their GitHub Readme (at the bottom).

The above is the detailed content of Runtime Log Level Change using Golang & GoFr. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1676
14
PHP Tutorial
1278
29
C# Tutorial
1257
24
Golang vs. Python: Performance and Scalability Golang vs. Python: Performance and Scalability Apr 19, 2025 am 12:18 AM

Golang is better than Python in terms of performance and scalability. 1) Golang's compilation-type characteristics and efficient concurrency model make it perform well in high concurrency scenarios. 2) Python, as an interpreted language, executes slowly, but can optimize performance through tools such as Cython.

Golang and C  : Concurrency vs. Raw Speed Golang and C : Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golang is better than C in concurrency, while C is better than Golang in raw speed. 1) Golang achieves efficient concurrency through goroutine and channel, which is suitable for handling a large number of concurrent tasks. 2)C Through compiler optimization and standard library, it provides high performance close to hardware, suitable for applications that require extreme optimization.

Getting Started with Go: A Beginner's Guide Getting Started with Go: A Beginner's Guide Apr 26, 2025 am 12:21 AM

Goisidealforbeginnersandsuitableforcloudandnetworkservicesduetoitssimplicity,efficiency,andconcurrencyfeatures.1)InstallGofromtheofficialwebsiteandverifywith'goversion'.2)Createandrunyourfirstprogramwith'gorunhello.go'.3)Exploreconcurrencyusinggorout

Golang vs. C  : Performance and Speed Comparison Golang vs. C : Performance and Speed Comparison Apr 21, 2025 am 12:13 AM

Golang is suitable for rapid development and concurrent scenarios, and C is suitable for scenarios where extreme performance and low-level control are required. 1) Golang improves performance through garbage collection and concurrency mechanisms, and is suitable for high-concurrency Web service development. 2) C achieves the ultimate performance through manual memory management and compiler optimization, and is suitable for embedded system development.

Golang vs. Python: Key Differences and Similarities Golang vs. Python: Key Differences and Similarities Apr 17, 2025 am 12:15 AM

Golang and Python each have their own advantages: Golang is suitable for high performance and concurrent programming, while Python is suitable for data science and web development. Golang is known for its concurrency model and efficient performance, while Python is known for its concise syntax and rich library ecosystem.

Golang and C  : The Trade-offs in Performance Golang and C : The Trade-offs in Performance Apr 17, 2025 am 12:18 AM

The performance differences between Golang and C are mainly reflected in memory management, compilation optimization and runtime efficiency. 1) Golang's garbage collection mechanism is convenient but may affect performance, 2) C's manual memory management and compiler optimization are more efficient in recursive computing.

The Performance Race: Golang vs. C The Performance Race: Golang vs. C Apr 16, 2025 am 12:07 AM

Golang and C each have their own advantages in performance competitions: 1) Golang is suitable for high concurrency and rapid development, and 2) C provides higher performance and fine-grained control. The selection should be based on project requirements and team technology stack.

Golang vs. Python: The Pros and Cons Golang vs. Python: The Pros and Cons Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

See all articles