Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "GCSFuse code change to write the logs to syslog files" #977

Merged
merged 1 commit into from
Mar 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
85 changes: 25 additions & 60 deletions internal/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,61 +15,34 @@
package logger

import (
"fmt"
"io"
"log"
"log/syslog"
"os"

"github.com/jacobsa/daemonize"
)

// Syslog file contains logs from all different programmes running on the VM.
// ProgrammeName is prefixed to all the logs written to syslog. This constant is
// used to filter the logs from syslog and write it to respective log files -
// gcsfuse.log in case of GCSFuse.
const ProgrammeName string = "gcsfuse"

var (
defaultLoggerFactory *loggerFactory
defaultInfoLogger *log.Logger
)

// InitLogFile initializes the logger factory to create loggers that print to
// a log file.
// In case of empty file, it starts writing the log to syslog file, which
// is eventually filtered and redirected to a fixed location using syslog
// config.
func InitLogFile(filename string, format string) error {
var f *os.File
var sysWriter *syslog.Writer
var err error
if filename != "" {
f, err = os.OpenFile(
filename,
os.O_WRONLY|os.O_CREATE|os.O_APPEND,
0644,
)
if err != nil {
return err
}
} else {
// Priority consist of facility and severity, here facility to specify the
// type of system that is logging the message to syslog and severity is log-level.
// User applications are allowed to take facility value between LOG_LOCAL0
// to LOG_LOCAL7. We are using LOG_LOCAL7 as facility and LOG_DEBUG to write
// debug messages.
sysWriter, err = syslog.New(syslog.LOG_LOCAL7|syslog.LOG_DEBUG, ProgrammeName)
if err != nil {
return fmt.Errorf("error while creating syswriter: %w", err)
}
f, err := os.OpenFile(
filename,
os.O_WRONLY|os.O_CREATE|os.O_APPEND,
0644,
)
if err != nil {
return err
}

defaultLoggerFactory = &loggerFactory{
file: f,
sysWriter: sysWriter,
flag: 0,
format: format,
file: f,
flag: 0,
format: format,
}
defaultInfoLogger = NewInfo("")

Expand Down Expand Up @@ -130,37 +103,29 @@ func Info(v ...interface{}) {

type loggerFactory struct {
// If nil, log to stdout or stderr. Otherwise, log to this file.
file *os.File
sysWriter *syslog.Writer
flag int
format string
file *os.File
flag int
format string
}

func (f *loggerFactory) newLogger(level, prefix string) *log.Logger {
return log.New(f.writer(level), prefix, f.flag)
}

func (f *loggerFactory) createJsonOrTextWriter(level string, writer io.Writer) io.Writer {
if f.format == "json" {
return &jsonWriter{
w: writer,
level: level,
}
}

return &textWriter{
w: writer,
level: level,
}
}

func (f *loggerFactory) writer(level string) io.Writer {
if f.file != nil {
return f.createJsonOrTextWriter(level, f.file)
}

if f.sysWriter != nil {
return f.createJsonOrTextWriter(level, f.sysWriter)
switch f.format {
case "json":
return &jsonWriter{
w: f.file,
level: level,
}
case "text":
return &textWriter{
w: f.file,
level: level,
}
}
}

switch level {
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ func runCLIApp(c *cli.Context) (err error) {
return fmt.Errorf("parsing flags failed: %w", err)
}

if flags.Foreground {
if flags.Foreground && flags.LogFile != "" {
err = logger.InitLogFile(flags.LogFile, flags.LogFormat)
if err != nil {
return fmt.Errorf("init log file: %w", err)
Expand Down