
netty.syslog.Message Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of syslog-netty-codec Show documentation
Show all versions of syslog-netty-codec Show documentation
A Netty Codec for working with Syslog (RFC-5424, RFC-6587)
The newest version!
/*
* Copyright (c) 2014 Intellectual Reserve, Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package netty.syslog;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.DefaultByteBufHolder;
import io.netty.buffer.Unpooled;
import java.nio.charset.StandardCharsets;
import java.time.ZonedDateTime;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Represents a Syslog content as defined by RFC 5424. See http://tools.ietf.org/html/rfc5424#section-6.
*/
public class Message extends DefaultByteBufHolder {
@SuppressWarnings("unused")
public enum Facility {
KERNEL,
USER_LEVEL,
MAIL,
SYSTEM_DAEMON,
SECURITY,
SYSLOGD,
LINE_PRINTER,
NETWORK_NEWS,
UUCP,
CLOCK,
SECURITY2,
FTP,
NTP,
LOG_AUDIT,
LOG_ALERTY,
CLOCK2,
LOCAL0,
LOCAL1,
LOCAL2,
LOCAL3,
LOCAL4,
LOCAL5,
LOCAL6,
LOCAL7
}
@SuppressWarnings("unused")
public enum Severity {
EMERGENCY,
ALERT,
CRITICAL,
ERROR,
WARNING,
NOTICE,
INFORMATION,
DEBUG
}
public static class MessageBuilder {
private Facility facility = Facility.USER_LEVEL;
private Severity severity = Severity.INFORMATION;
private ZonedDateTime timestamp = ZonedDateTime.now();
private String hostname;
private String applicationName;
private String processId;
private String messageId;
private Map> structuredData;
private ByteBuf content = Unpooled.EMPTY_BUFFER;
public static MessageBuilder create() {
return new MessageBuilder();
}
public MessageBuilder facility(Facility facility) {
this.facility = facility;
return this;
}
public MessageBuilder severity(Severity severity) {
this.severity = severity;
return this;
}
public MessageBuilder timestamp(ZonedDateTime timestamp) {
this.timestamp = timestamp;
return this;
}
public MessageBuilder hostname(String hostname) {
this.hostname = hostname;
return this;
}
public MessageBuilder applicationName(String applicationName) {
this.applicationName = applicationName;
return this;
}
public MessageBuilder processId(String processId) {
this.processId = processId;
return this;
}
public MessageBuilder messageId(String messageId) {
this.messageId = messageId;
return this;
}
public MessageBuilder addStructuredData(String name, String key, String value) {
if (structuredData == null) {
structuredData = new HashMap<>();
}
Map params = structuredData.get(name);
if (params == null) {
params = new HashMap<>();
structuredData.put(name, params);
}
params.put(key, value);
return this;
}
public MessageBuilder content(ByteBuf message) {
this.content = message;
return this;
}
public Message build() {
return new Message(facility, severity, timestamp, hostname, applicationName, processId, messageId, structuredData, content);
}
}
private final Facility facility;
private final Severity severity;
private final ZonedDateTime timestamp;
private final String hostname;
private final String applicationName;
private final String processId;
private final String messageId;
private final Map> structuredData;
private Message(Facility facility, Severity severity, ZonedDateTime timestamp, String hostname, String applicationName, String processId, String messageId, Map> structuredData, ByteBuf message) {
super(message);
this.facility = facility;
this.severity = severity;
this.timestamp = timestamp;
this.hostname = hostname;
this.applicationName = applicationName;
this.processId = processId;
this.messageId = messageId;
if (structuredData == null) {
this.structuredData = Collections.emptyMap();
} else {
this.structuredData = structuredData;
}
}
public Facility getFacility() {
return facility;
}
public Severity getSeverity() {
return severity;
}
public ZonedDateTime getTimestamp() {
return timestamp;
}
public String getHostname() {
return hostname;
}
public String getApplicationName() {
return applicationName;
}
public String getProcessId() {
return processId;
}
public String getMessageId() {
return messageId;
}
public Map> getStructuredData() {
return structuredData;
}
@Override
public String toString() {
return "Message{" +
"facility=" + facility +
", severity=" + severity +
", timestamp=" + timestamp +
", hostname='" + hostname + '\'' +
", applicationName='" + applicationName + '\'' +
", processId='" + processId + '\'' +
", messageId='" + messageId + '\'' +
", structuredData=" + structuredData +
", message='" + content().duplicate().toString(StandardCharsets.UTF_8) + '\'' +
'}';
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy