@@ -77,8 +77,14 @@ func HasLogIntervalPassed() bool {
77
77
return true
78
78
}
79
79
80
- var fileHandlers = make (map [string ]* os.File )
80
+ type textLogger struct {
81
+ handler * os.File
82
+ lastWriteTime int64
83
+ }
84
+
85
+ var fileHandlers = make (map [string ]* textLogger )
81
86
const HOST_MAPPING_PATH = "/ebpf/logs/akto/"
87
+ const LOG_ROTATE_INTERVAL = 60 * 5 // 5 minutes
82
88
83
89
const (
84
90
OSPidLogFile = HOST_MAPPING_PATH + "ospidlog.txt"
@@ -89,7 +95,10 @@ const (
89
95
90
96
func SetupFileLogger (filePath string ) {
91
97
file , err := os .OpenFile (filePath , os .O_APPEND | os .O_CREATE | os .O_WRONLY , 0644 )
92
- fileHandlers [filePath ] = file
98
+ fileHandlers [filePath ] = & textLogger {
99
+ handler : file ,
100
+ lastWriteTime : time .Now ().Unix (),
101
+ }
93
102
if err != nil {
94
103
slog .Error ("Failed to open log file" , "filePath" , filePath , "error" , err )
95
104
return
@@ -99,16 +108,24 @@ func SetupFileLogger(filePath string) {
99
108
}
100
109
101
110
func LogToSpecificFile (filePath string , message string , args ... any ) {
102
- handler , exists := fileHandlers [filePath ]
111
+ textLogger , exists := fileHandlers [filePath ]
103
112
if ! exists {
104
113
slog .Error ("Logger not initialized for" , "filePath" , filePath )
105
114
return
106
115
}
107
- if _ , err := handler .WriteString (message ); err != nil {
116
+ now := time .Now ().Unix ()
117
+ if now - textLogger .lastWriteTime > LOG_ROTATE_INTERVAL {
118
+ // empty the file contents
119
+ if err := os .Truncate (filePath , 0 ); err != nil {
120
+ slog .Error ("Failed to truncate log file" , "filePath" , filePath , "error" , err )
121
+ }
122
+ slog .Debug ("Truncated log file due to rotation interval" , "filePath" , filePath )
123
+ }
124
+ textLogger .lastWriteTime = now
125
+ if _ , err := textLogger .handler .WriteString (message ); err != nil {
108
126
slog .Error ("Failed to write to log file" , "filePath" , filePath , "error" , err )
109
127
return
110
128
}
111
-
112
129
}
113
130
114
131
func SetupAllFileLoggers () {
@@ -122,8 +139,8 @@ func SetupAllFileLoggers() {
122
139
}
123
140
124
141
func CloseAllFileLoggers () {
125
- for filePath , file := range fileHandlers {
126
- err := file .Close ()
142
+ for filePath , textLogger := range fileHandlers {
143
+ err := textLogger . handler .Close ()
127
144
if err != nil {
128
145
slog .Error ("Failed to close log file" , "filePath" , filePath , "error" , err )
129
146
continue
0 commit comments