1
1
package ai .superstream .util ;
2
2
3
- import org .slf4j .Logger ;
4
- import org .slf4j .LoggerFactory ;
5
-
6
3
/**
7
4
* Custom logger for the Superstream library that falls back to System.out/System.err
8
- * if no SLF4J implementation is available.
9
5
*/
10
6
public class SuperstreamLogger {
11
7
private static final String PREFIX = "superstream" ;
12
- private final Logger logger ;
13
- private final String loggerName ;
14
- private static boolean slf4jAvailable = false ;
8
+ private final String className ;
15
9
// Flag to control debug logging - default to false to hide debug logs
16
10
private static boolean debugEnabled = false ;
17
11
18
12
static {
19
- try {
20
- // Try to detect if SLF4J implementation is available
21
- Class .forName ("org.slf4j.impl.StaticLoggerBinder" );
22
- slf4jAvailable = true ;
23
- } catch (ClassNotFoundException e ) {
24
- System .out .println ("[superstream] No SLF4J implementation found. Falling back to System.out logging." );
25
- slf4jAvailable = false ;
26
- }
27
-
28
13
// Check if debug logging is enabled via system property or environment variable
29
14
String debugFlag = System .getProperty ("superstream.debug" );
30
15
if (debugFlag == null ) {
@@ -39,8 +24,7 @@ public static void setDebugEnabled(boolean enabled) {
39
24
}
40
25
41
26
private SuperstreamLogger (Class <?> clazz ) {
42
- this .logger = LoggerFactory .getLogger (clazz );
43
- this .loggerName = clazz .getSimpleName ();
27
+ this .className = clazz .getSimpleName ();
44
28
}
45
29
46
30
/**
@@ -64,140 +48,88 @@ private String withPrefix(String message) {
64
48
}
65
49
66
50
/**
67
- * Log an info message with the superstream prefix.
68
- *
69
- * @param message The message to log
51
+ * Log an info message.
70
52
*/
71
53
public void info (String message ) {
72
- if (slf4jAvailable ) {
73
- logger .info (withPrefix (message ));
74
- } else {
75
- System .out .println (loggerName + " INFO: " + withPrefix (message ));
76
- }
54
+ System .out .println (formatLogMessage ("INFO" , message ));
77
55
}
78
56
79
57
/**
80
- * Log an info message with parameters and the superstream prefix.
81
- *
82
- * @param message The message to log
83
- * @param args The parameters for the message
58
+ * Log an info message with parameters.
84
59
*/
85
60
public void info (String message , Object ... args ) {
86
- if (slf4jAvailable ) {
87
- logger .info (withPrefix (message ), args );
88
- } else {
89
- System .out .println (loggerName + " INFO: " + withPrefix (formatMessage (message , args )));
90
- }
61
+ System .out .println (formatLogMessage ("INFO" , formatArgs (message , args )));
91
62
}
92
63
93
64
/**
94
- * Log a warning message with the superstream prefix.
95
- *
96
- * @param message The message to log
65
+ * Log a warning message.
97
66
*/
98
67
public void warn (String message ) {
99
- if (slf4jAvailable ) {
100
- logger .warn (withPrefix (message ));
101
- } else {
102
- System .out .println (loggerName + " WARN: " + withPrefix (message ));
103
- }
68
+ System .out .println (formatLogMessage ("WARN" , message ));
104
69
}
105
70
106
71
/**
107
- * Log a warning message with parameters and the superstream prefix.
108
- *
109
- * @param message The message to log
110
- * @param args The parameters for the message
72
+ * Log a warning message with parameters.
111
73
*/
112
74
public void warn (String message , Object ... args ) {
113
- if (slf4jAvailable ) {
114
- logger .warn (withPrefix (message ), args );
115
- } else {
116
- System .out .println (loggerName + " WARN: " + withPrefix (formatMessage (message , args )));
117
- }
75
+ System .out .println (formatLogMessage ("WARN" , formatArgs (message , args )));
118
76
}
119
77
120
78
/**
121
- * Log an error message with the superstream prefix.
122
- *
123
- * @param message The message to log
79
+ * Log an error message.
124
80
*/
125
81
public void error (String message ) {
126
- if (slf4jAvailable ) {
127
- logger .error (withPrefix (message ));
128
- } else {
129
- System .err .println (loggerName + " ERROR: " + withPrefix (message ));
130
- }
82
+ System .err .println (formatLogMessage ("ERROR" , message ));
131
83
}
132
84
133
85
/**
134
- * Log an error message with parameters and the superstream prefix.
135
- *
136
- * @param message The message to log
137
- * @param args The parameters for the message
86
+ * Log an error message with parameters.
138
87
*/
139
88
public void error (String message , Object ... args ) {
140
- if (slf4jAvailable ) {
141
- logger .error (withPrefix (message ), args );
142
- } else {
143
- System .err .println (loggerName + " ERROR: " + withPrefix (formatMessage (message , args )));
144
- }
89
+ System .err .println (formatLogMessage ("ERROR" , formatArgs (message , args )));
145
90
}
146
91
147
92
/**
148
- * Log an error message with an exception and the superstream prefix.
149
- *
150
- * @param message The message to log
151
- * @param throwable The exception to log
93
+ * Log an error message with an exception.
152
94
*/
153
95
public void error (String message , Throwable throwable ) {
154
- if (slf4jAvailable ) {
155
- logger .error (withPrefix (message ), throwable );
156
- } else {
157
- System .err .println (loggerName + " ERROR: " + withPrefix (message ));
158
- throwable .printStackTrace ();
159
- }
96
+ System .err .println (formatLogMessage ("ERROR" , message ));
97
+ throwable .printStackTrace (System .err );
160
98
}
161
99
162
100
/**
163
- * Log a debug message with the superstream prefix.
164
- *
165
- * @param message The message to log
101
+ * Log a debug message.
166
102
*/
167
103
public void debug (String message ) {
168
- // Early return if debug is disabled
169
- if (!debugEnabled && !slf4jAvailable ) {
170
- return ;
171
- }
172
-
173
- if (slf4jAvailable ) {
174
- logger .debug (withPrefix (message ));
175
- } else {
176
- System .out .println (loggerName + " DEBUG: " + withPrefix (message ));
104
+ if (debugEnabled ) {
105
+ System .out .println (formatLogMessage ("DEBUG" , message ));
177
106
}
178
107
}
179
108
180
109
/**
181
- * Log a debug message with parameters and the superstream prefix.
182
- *
183
- * @param message The message to log
184
- * @param args The parameters for the message
110
+ * Log a debug message with parameters.
185
111
*/
186
112
public void debug (String message , Object ... args ) {
187
- // Early return if debug is disabled
188
- if (!debugEnabled && !slf4jAvailable ) {
189
- return ;
113
+ if (debugEnabled ) {
114
+ System .out .println (formatLogMessage ("DEBUG" , formatArgs (message , args )));
190
115
}
116
+ }
191
117
192
- if (slf4jAvailable ) {
193
- logger .debug (withPrefix (message ), args );
194
- } else {
195
- System .out .println (loggerName + " DEBUG: " + withPrefix (formatMessage (message , args )));
196
- }
118
+ public static boolean isDebugEnabled () {
119
+ return debugEnabled ;
197
120
}
198
121
199
- private String formatMessage (String message , Object ... args ) {
200
- // Simple implementation of string formatting for fallback mode
122
+ /**
123
+ * Format a log message with the Superstream prefix and class name.
124
+ */
125
+ private String formatLogMessage (String level , String message ) {
126
+ return String .format ("[%s] %s %s: %s" , PREFIX , level , className , message );
127
+ }
128
+
129
+ /**
130
+ * Replace placeholder {} with actual values.
131
+ */
132
+ private String formatArgs (String message , Object ... args ) {
201
133
if (args == null || args .length == 0 ) {
202
134
return message ;
203
135
}
@@ -215,6 +147,4 @@ private String formatMessage(String message, Object... args) {
215
147
}
216
148
return result ;
217
149
}
218
-
219
-
220
150
}
0 commit comments