de.bund.bva.isyfact.logging.util.BeanGroessePruefer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of isy-logging Show documentation
Show all versions of isy-logging Show documentation
Stellt eine Komponente für das Logging bereit.
The newest version!
package de.bund.bva.isyfact.logging.util;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
/**
* Prüft Beans, die als Parameter automatisch an Komponenten- oder Außengrenzen des Systems ins Log
* geschrieben werden sollen, auf ihre potentielle Größe im Log. Dazu wird der Speicherbedarf aller primitiven
* Typen im Objektgraph gezählt.
*/
public class BeanGroessePruefer {
private static final Map, Integer> PRIMITIVE_TYPEN_GROESSE;
static {
Map, Integer> typen = new HashMap<>();
// Tatsächliche Größe unklar, sollte aber gezählt werden.
typen.put(boolean.class, 1);
typen.put(Boolean.class, 1);
typen.put(byte.class, 1);
typen.put(Byte.class, 1);
typen.put(char.class, 2);
typen.put(Character.class, 2);
typen.put(short.class, 2);
typen.put(Short.class, 2);
typen.put(int.class, 4);
typen.put(Integer.class, 4);
typen.put(float.class, 4);
typen.put(Float.class, 4);
typen.put(long.class, 8);
typen.put(Long.class, 8);
typen.put(double.class, 8);
typen.put(Double.class, 8);
PRIMITIVE_TYPEN_GROESSE = Collections.unmodifiableMap(typen);
}
/**
* Prüft die Größe eines Log-Parameters gegen einen Maximalwert.
*
* @param bean Log-Parameter
* @param maximalSize maximal erlaubte Größe (in Byte)
* @return {@code true} falls der Parameter innerhalb der erlaubten Größe liegt oder kein Maximalwert
* definiert ist, {@code false} falls der Parameter zu groß ist.
*/
public boolean pruefeGroesse(Object bean, Long maximalSize) {
return maximalSize == null || maximalSize <= 0 || ermittleGroesseInBytes(bean, maximalSize);
}
/**
* Ermittelt die Größe eines Log-Parameters in Byte. Bricht ab, wenn die Größe des Beans die Maximalgröße
* übersteigt.
*
* @param bean Log-Parameter
* @param maximalGroesse maximal erlaubte Größe (in Byte)
* @return {@code true} falls der Parameter innerhalb der erlaubten Größe liegt, {@code false} falls der
* Parameter zu groß ist.
*/
private boolean ermittleGroesseInBytes(Object bean, Long maximalGroesse) {
Set