0
# Network Logging
1
2
Remote logging capabilities including socket appenders, receivers, email alerts, and network server components. These components enable distributed logging across multiple systems and applications.
3
4
## Capabilities
5
6
### Socket Appenders
7
8
TCP socket-based appenders for remote logging to centralized log servers.
9
10
```java { .api }
11
/**
12
* TCP socket appender for remote logging
13
*/
14
public class SocketAppender extends AppenderBase<ILoggingEvent> {
15
static final int DEFAULT_RECONNECTION_DELAY = 30000;
16
static final int DEFAULT_QUEUE_SIZE = 128;
17
18
private String remoteHost;
19
private int port;
20
private InetAddress address;
21
private int reconnectionDelay = DEFAULT_RECONNECTION_DELAY;
22
private int queueSize = DEFAULT_QUEUE_SIZE;
23
private boolean includeCallerData = false;
24
25
/**
26
* Set the remote host to connect to
27
*/
28
public void setRemoteHost(String host);
29
public String getRemoteHost();
30
31
/**
32
* Set the port number
33
*/
34
public void setPort(int port);
35
public int getPort();
36
37
/**
38
* Set reconnection delay in milliseconds
39
*/
40
public void setReconnectionDelay(Duration delay);
41
public Duration getReconnectionDelay();
42
43
/**
44
* Set internal queue size
45
*/
46
public void setQueueSize(int queueSize);
47
public int getQueueSize();
48
49
/**
50
* Enable/disable caller data inclusion (expensive)
51
*/
52
public boolean isIncludeCallerData();
53
public void setIncludeCallerData(boolean includeCallerData);
54
}
55
56
/**
57
* SSL-secured socket appender
58
*/
59
public class SSLSocketAppender extends SocketAppender implements SSLComponent {
60
private SSLConfiguration ssl;
61
private SocketFactory socketFactory;
62
63
/**
64
* Set SSL configuration
65
*/
66
public SSLConfiguration getSsl();
67
public void setSsl(SSLConfiguration ssl);
68
69
/**
70
* Set custom socket factory
71
*/
72
public void setSocketFactory(SocketFactory socketFactory);
73
public SocketFactory getSocketFactory();
74
}
75
```
76
77
**Usage Examples:**
78
79
```java
80
import ch.qos.logback.classic.net.SocketAppender;
81
82
// Create socket appender
83
SocketAppender socketAppender = new SocketAppender();
84
socketAppender.setContext(loggerContext);
85
socketAppender.setName("SOCKET");
86
socketAppender.setRemoteHost("log-server.example.com");
87
socketAppender.setPort(4560);
88
socketAppender.setReconnectionDelay(Duration.ofSeconds(30));
89
socketAppender.setIncludeCallerData(false); // For performance
90
socketAppender.start();
91
92
// Add to logger
93
Logger logger = loggerContext.getLogger("com.example.app");
94
logger.addAppender(socketAppender);
95
```
96
97
### Socket Receivers
98
99
TCP socket receivers for accepting log events from remote appenders.
100
101
```java { .api }
102
/**
103
* TCP socket receiver for accepting remote log events
104
*/
105
public class SocketReceiver extends ReceiverBase implements Runnable {
106
public static final int DEFAULT_ACCEPT_CONNECTION_DELAY = 5000;
107
108
private String address;
109
private int port;
110
private int backlog = 50;
111
private int acceptConnectionTimeout = DEFAULT_ACCEPT_CONNECTION_DELAY;
112
113
/**
114
* Set the local address to bind to
115
*/
116
public String getAddress();
117
public void setAddress(String address);
118
119
/**
120
* Set the port to listen on
121
*/
122
public int getPort();
123
public void setPort(int port);
124
125
/**
126
* Set the backlog for the server socket
127
*/
128
public int getBacklog();
129
public void setBacklog(int backlog);
130
131
/**
132
* Set accept connection timeout
133
*/
134
public int getAcceptConnectionTimeout();
135
public void setAcceptConnectionTimeout(int acceptConnectionTimeout);
136
}
137
138
/**
139
* SSL-secured socket receiver
140
*/
141
public class SSLSocketReceiver extends SocketReceiver implements SSLComponent {
142
private SSLConfiguration ssl;
143
144
/**
145
* Set SSL configuration
146
*/
147
public SSLConfiguration getSsl();
148
public void setSsl(SSLConfiguration ssl);
149
}
150
151
/**
152
* Base class for all receivers
153
*/
154
public abstract class ReceiverBase extends ContextAwareBase implements LifeCycle {
155
protected boolean started;
156
157
public boolean isStarted();
158
public void start();
159
public void stop();
160
}
161
```
162
163
### Server Socket Appenders
164
165
Server-side components that accept connections from client applications.
166
167
```java { .api }
168
/**
169
* Server socket appender that accepts client connections
170
*/
171
public class ServerSocketAppender extends AppenderBase<ILoggingEvent> {
172
public static final int DEFAULT_BACKLOG = 50;
173
public static final int DEFAULT_CLIENT_QUEUE_SIZE = 100;
174
175
private int port;
176
private int backlog = DEFAULT_BACKLOG;
177
private int clientQueueSize = DEFAULT_CLIENT_QUEUE_SIZE;
178
private String address;
179
private boolean includeCallerData;
180
181
/**
182
* Set the port to listen on
183
*/
184
public int getPort();
185
public void setPort(int port);
186
187
/**
188
* Set the address to bind to
189
*/
190
public String getAddress();
191
public void setAddress(String address);
192
193
/**
194
* Set the server socket backlog
195
*/
196
public int getBacklog();
197
public void setBacklog(int backlog);
198
199
/**
200
* Set queue size for each client connection
201
*/
202
public int getClientQueueSize();
203
public void setClientQueueSize(int clientQueueSize);
204
205
/**
206
* Enable/disable caller data inclusion
207
*/
208
public boolean isIncludeCallerData();
209
public void setIncludeCallerData(boolean includeCallerData);
210
}
211
212
/**
213
* SSL-secured server socket appender
214
*/
215
public class SSLServerSocketAppender extends ServerSocketAppender implements SSLComponent {
216
private SSLConfiguration ssl;
217
218
/**
219
* Set SSL configuration
220
*/
221
public SSLConfiguration getSsl();
222
public void setSsl(SSLConfiguration ssl);
223
}
224
```
225
226
### SMTP Appender
227
228
Email-based appender for critical alerts and notifications.
229
230
```java { .api }
231
/**
232
* SMTP appender for sending log events via email
233
*/
234
public class SMTPAppender extends SMTPAppenderBase<ILoggingEvent> {
235
static final String DEFAULT_SUBJECT_PATTERN = "%logger{20} - %m";
236
237
private IEvaluator<ILoggingEvent> eventEvaluator;
238
private String subjectStr = null;
239
private boolean includeCallerData = false;
240
241
/**
242
* Set the event evaluator for triggering emails
243
*/
244
public IEvaluator<ILoggingEvent> getEvaluator();
245
public void setEvaluator(IEvaluator<ILoggingEvent> eventEvaluator);
246
247
/**
248
* Set the email subject pattern
249
*/
250
public String getSubject();
251
public void setSubject(String subject);
252
253
/**
254
* Enable/disable caller data in emails
255
*/
256
public boolean isIncludeCallerData();
257
public void setIncludeCallerData(boolean includeCallerData);
258
}
259
260
/**
261
* Base class for SMTP appenders
262
*/
263
public abstract class SMTPAppenderBase<E> extends AppenderBase<E> {
264
static final int DEFAULT_SMTP_PORT = 25;
265
static final int DEFAULT_BUFFER_SIZE = 512;
266
267
protected Layout subjectLayout;
268
protected String from;
269
protected String subjectStr;
270
protected String smtpHost;
271
protected int smtpPort = DEFAULT_SMTP_PORT;
272
protected boolean starttls = false;
273
protected boolean ssl = false;
274
protected String username;
275
protected String password;
276
protected String charsetEncoding = "UTF-8";
277
protected boolean asynchronousSending = true;
278
protected boolean includeCallerData = false;
279
protected int bufferSize = DEFAULT_BUFFER_SIZE;
280
281
private List<String> toList = new ArrayList<String>();
282
283
/**
284
* Set SMTP server configuration
285
*/
286
public String getSmtpHost();
287
public void setSmtpHost(String smtpHost);
288
public int getSmtpPort();
289
public void setSmtpPort(int smtpPort);
290
291
/**
292
* Set authentication
293
*/
294
public String getUsername();
295
public void setUsername(String username);
296
public String getPassword();
297
public void setPassword(String password);
298
299
/**
300
* Set security options
301
*/
302
public boolean isSTARTTLS();
303
public void setSTARTTLS(boolean starttls);
304
public boolean isSSL();
305
public void setSSL(boolean ssl);
306
307
/**
308
* Set email addresses
309
*/
310
public void addTo(String to);
311
public List<String> getToList();
312
public String getFrom();
313
public void setFrom(String from);
314
315
/**
316
* Set message configuration
317
*/
318
public String getSubject();
319
public void setSubject(String subject);
320
public void setCharsetEncoding(String charsetEncoding);
321
public String getCharsetEncoding();
322
323
/**
324
* Set buffer size (number of events to buffer before sending)
325
*/
326
public int getBufferSize();
327
public void setBufferSize(int bufferSize);
328
329
/**
330
* Enable/disable asynchronous sending
331
*/
332
public boolean isAsynchronousSending();
333
public void setAsynchronousSending(boolean asynchronousSending);
334
}
335
```
336
337
### Syslog Appender
338
339
Syslog protocol support for integration with system logging infrastructure.
340
341
```java { .api }
342
/**
343
* Syslog appender implementing RFC 3164 and RFC 5424
344
*/
345
public class SyslogAppender extends AppenderBase<ILoggingEvent> {
346
final static String DEFAULT_SUFFIX_PATTERN = "[%thread] %logger %msg";
347
final static String DEFAULT_STACKTRACE_PATTERN = "" + CoreConstants.TAB;
348
349
Facility facility = Facility.USER;
350
String facilityStr; // for configuration via string
351
String syslogHost;
352
int port = SyslogConstants.SYSLOG_PORT;
353
String suffixPattern = DEFAULT_SUFFIX_PATTERN;
354
SyslogOutputStream sos;
355
int maxMessageSize = SyslogConstants.MAX_MESSAGE_SIZE;
356
357
/**
358
* Set syslog facility
359
*/
360
public Facility getFacility();
361
public void setFacility(Facility facility);
362
public String getFacilityAsStr();
363
public void setFacilityAsStr(String facilityStr);
364
365
/**
366
* Set syslog server
367
*/
368
public String getSyslogHost();
369
public void setSyslogHost(String syslogHost);
370
public int getPort();
371
public void setPort(int port);
372
373
/**
374
* Set message formatting
375
*/
376
public String getSuffixPattern();
377
public void setSuffixPattern(String suffixPattern);
378
public int getMaxMessageSize();
379
public void setMaxMessageSize(int maxMessageSize);
380
}
381
382
/**
383
* Syslog facility enumeration
384
*/
385
public enum Facility {
386
KERN(0), USER(1), MAIL(2), DAEMON(3), AUTH(4), SYSLOG(5),
387
LPR(6), NEWS(7), UUCP(8), CRON(9), AUTHPRIV(10), FTP(11),
388
NTP(12), AUDIT(13), ALERT(14), CLOCK(15),
389
LOCAL0(16), LOCAL1(17), LOCAL2(18), LOCAL3(19),
390
LOCAL4(20), LOCAL5(21), LOCAL6(22), LOCAL7(23);
391
392
private int code;
393
394
public int getCode();
395
public static Facility fromCode(int code);
396
}
397
```
398
399
### Network Utilities
400
401
Utility classes for network logging operations.
402
403
```java { .api }
404
/**
405
* Simple socket server for testing and development
406
*/
407
public class SimpleSocketServer extends ServerSocketReceiver<ILoggingEvent> {
408
public static void main(String[] argv) throws Exception;
409
}
410
411
/**
412
* SSL socket server
413
*/
414
public class SimpleSSLSocketServer {
415
public static void main(String[] argv) throws Exception;
416
}
417
418
/**
419
* Event pre-serialization transformer for network transport
420
*/
421
public class LoggingEventPreSerializationTransformer implements PreSerializationTransformer<ILoggingEvent> {
422
public Serializable transform(ILoggingEvent event);
423
}
424
425
/**
426
* Socket node for handling individual client connections
427
*/
428
public class SocketNode implements Runnable {
429
public SocketNode(Socket socket, LoggerContext context);
430
public void run();
431
}
432
433
/**
434
* Socket acceptor for managing client connections
435
*/
436
public class SocketAcceptor extends Thread {
437
public SocketAcceptor(ServerSocket serverSocket);
438
public void run();
439
}
440
```
441
442
## Usage Examples
443
444
### Centralized Logging Setup
445
446
```java
447
import ch.qos.logback.classic.net.*;
448
449
// Client-side: Send logs to central server
450
SocketAppender socketAppender = new SocketAppender();
451
socketAppender.setContext(loggerContext);
452
socketAppender.setName("CENTRAL_LOG");
453
socketAppender.setRemoteHost("log-server.company.com");
454
socketAppender.setPort(4560);
455
socketAppender.setReconnectionDelay(Duration.ofSeconds(30));
456
socketAppender.setIncludeCallerData(false);
457
socketAppender.start();
458
459
// Add to root logger
460
Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
461
rootLogger.addAppender(socketAppender);
462
463
// Server-side: Receive logs from clients
464
SocketReceiver receiver = new SocketReceiver();
465
receiver.setContext(loggerContext);
466
receiver.setPort(4560);
467
receiver.start();
468
```
469
470
### SSL Secure Logging
471
472
```java
473
import ch.qos.logback.core.net.ssl.*;
474
475
// SSL configuration
476
SSLConfiguration sslConfig = new SSLConfiguration();
477
sslConfig.setKeyStore("keystore.jks");
478
sslConfig.setKeyStorePassword("keystorepass");
479
sslConfig.setTrustStore("truststore.jks");
480
sslConfig.setTrustStorePassword("truststorepass");
481
482
// SSL socket appender
483
SSLSocketAppender sslAppender = new SSLSocketAppender();
484
sslAppender.setContext(loggerContext);
485
sslAppender.setName("SSL_LOG");
486
sslAppender.setRemoteHost("secure-log-server.company.com");
487
sslAppender.setPort(4561);
488
sslAppender.setSsl(sslConfig);
489
sslAppender.start();
490
```
491
492
### Email Alerts for Critical Errors
493
494
```java
495
import ch.qos.logback.classic.boolex.OnErrorEvaluator;
496
497
// SMTP appender for critical alerts
498
SMTPAppender smtpAppender = new SMTPAppender();
499
smtpAppender.setContext(loggerContext);
500
smtpAppender.setName("EMAIL_ALERTS");
501
502
// SMTP server configuration
503
smtpAppender.setSmtpHost("smtp.company.com");
504
smtpAppender.setSmtpPort(587);
505
smtpAppender.setSTARTTLS(true);
506
smtpAppender.setUsername("alerts@company.com");
507
smtpAppender.setPassword("password");
508
509
// Email configuration
510
smtpAppender.setFrom("noreply@company.com");
511
smtpAppender.addTo("ops-team@company.com");
512
smtpAppender.addTo("dev-team@company.com");
513
smtpAppender.setSubject("ALERT: %logger{20} - %m");
514
515
// Only send emails for ERROR events
516
OnErrorEvaluator errorEvaluator = new OnErrorEvaluator();
517
errorEvaluator.setContext(loggerContext);
518
errorEvaluator.setName("ErrorEvaluator");
519
errorEvaluator.start();
520
smtpAppender.setEvaluator(errorEvaluator);
521
522
// HTML layout for better email formatting
523
HTMLLayout htmlLayout = new HTMLLayout();
524
htmlLayout.setContext(loggerContext);
525
htmlLayout.setTitle("Application Error Alert");
526
htmlLayout.start();
527
smtpAppender.setLayout(htmlLayout);
528
529
smtpAppender.start();
530
531
// Add to root logger
532
rootLogger.addAppender(smtpAppender);
533
```
534
535
### Syslog Integration
536
537
```java
538
// Syslog appender for Unix/Linux systems
539
SyslogAppender syslogAppender = new SyslogAppender();
540
syslogAppender.setContext(loggerContext);
541
syslogAppender.setName("SYSLOG");
542
syslogAppender.setSyslogHost("syslog.company.com");
543
syslogAppender.setPort(514);
544
syslogAppender.setFacility(Facility.LOCAL0);
545
syslogAppender.setSuffixPattern("[%thread] %logger{36} %msg");
546
syslogAppender.start();
547
548
// Add threshold filter for syslog
549
ThresholdFilter syslogFilter = new ThresholdFilter();
550
syslogFilter.setContext(loggerContext);
551
syslogFilter.setLevel(Level.INFO);
552
syslogFilter.start();
553
syslogAppender.addFilter(syslogFilter);
554
555
rootLogger.addAppender(syslogAppender);
556
```
557
558
### High-Availability Logging
559
560
```java
561
// Multiple socket appenders for redundancy
562
SocketAppender primary = new SocketAppender();
563
primary.setContext(loggerContext);
564
primary.setName("PRIMARY_LOG");
565
primary.setRemoteHost("log1.company.com");
566
primary.setPort(4560);
567
primary.start();
568
569
SocketAppender secondary = new SocketAppender();
570
secondary.setContext(loggerContext);
571
secondary.setName("SECONDARY_LOG");
572
secondary.setRemoteHost("log2.company.com");
573
secondary.setPort(4560);
574
secondary.start();
575
576
// Async wrapper for performance
577
AsyncAppender asyncPrimary = new AsyncAppender();
578
asyncPrimary.setContext(loggerContext);
579
asyncPrimary.setName("ASYNC_PRIMARY");
580
asyncPrimary.setQueueSize(1024);
581
asyncPrimary.setDiscardingThreshold(20);
582
asyncPrimary.addAppender(primary);
583
asyncPrimary.start();
584
585
AsyncAppender asyncSecondary = new AsyncAppender();
586
asyncSecondary.setContext(loggerContext);
587
asyncSecondary.setName("ASYNC_SECONDARY");
588
asyncSecondary.setQueueSize(1024);
589
asyncSecondary.setDiscardingThreshold(20);
590
asyncSecondary.addAppender(secondary);
591
asyncSecondary.start();
592
593
rootLogger.addAppender(asyncPrimary);
594
rootLogger.addAppender(asyncSecondary);
595
```