blob: 33664ddcdd6d7102e5fdbfb42ab1830c250678b0 [file] [log] [blame]
package eu.mulk.quarkus.googlecloud.jsonlogging;
import java.util.Objects;
/**
* A label usable to tag a log message.
*
* <p>Instances of {@link Label} can be passed as log parameters to the {@code *f} family of logging
* functions on {@link org.jboss.logging.Logger}.
*
* <p><strong>Example:</strong>
*
* <pre>{@code
* logger.logf("Request rejected: unauthorized.", Label.of("requestId", "123"));
* }</pre>
*
* Result:
*
* <pre>{@code
* {
* "textPayload": "Request rejected: unauthorized.",
* "labels": {
* "requestId": "123"
* }
* }
* }</pre>
*
* @see KeyValueParameter
* @see StructuredParameter
*/
public final class Label {
private final String key;
private final String value;
private Label(String key, String value) {
this.key = key;
this.value = value;
}
/**
* Constructs a {@link Label} from a key (i.e. name) and a value.
*
* <p>It is often useful for the key to be a {@link String} constant that is shared by multiple
* parts of the program.
*
* @param key the key (name) of the label.
* @param value the value of the label.
* @return the newly constructed {@link Label}, ready to be passed to a logging function.
*/
public static Label of(String key, String value) {
return new Label(key, value);
}
/**
* The name of the label.
*
* <p>It is often useful for this to be a {@link String} constant that is shared by multiple parts
* of the program.
*
* @return the name of the label.
*/
public String key() {
return key;
}
/**
* The value of the label.
*
* @return the value of the label.
*/
public String value() {
return value;
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (obj == null || obj.getClass() != this.getClass()) return false;
var that = (Label) obj;
return Objects.equals(this.key, that.key) && Objects.equals(this.value, that.value);
}
@Override
public int hashCode() {
return Objects.hash(key, value);
}
@Override
public String toString() {
return "Label[" + "key=" + key + ", " + "value=" + value + ']';
}
}