All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.smilego.tenant.logging.http.HttpLog Maven / Gradle / Ivy

package io.smilego.tenant.logging.http;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import io.smilego.tenant.TenantContext;
import io.smilego.tenant.logging.GeneralLog;
import io.smilego.tenant.util.StringUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Objects;


@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@Slf4j
@ToString(callSuper = true)
public class HttpLog extends GeneralLog {
    private int httpStatus;
    private String verb;
    private String path;
    private String endpoint;
    private String serverName;
    private String reqContentType;
    private int reqContentLength;
    private String respContentType;
    private String queryString;
    private String host;
    private String protocol;
    private String tenantId;
    private String user;

    public HttpLog(HttpServletRequest request, String traceId) {
        super();
        setInitialTime(System.currentTimeMillis());
        setVerb(request.getMethod());
        setTraceId(traceId);
        setPath(request.getServletPath());
        setServerName(request.getServerName());
        setReqContentLength(request.getContentLength());
        setReqContentType(request.getContentType());
        setQueryString(request.getQueryString());
        setHost(request.getRemoteHost());
        setProtocol(request.getProtocol());
        setTenantId(TenantContext.getTenantId());

        if(!StringUtil.isNullOrBlank(request.getHeader("authorization"))){
            if(Objects.nonNull(SecurityContextHolder.getContext().getAuthentication().getPrincipal())){
                try {
                    setUser(((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername());
                } catch (Exception e) {
                    setUser("none");
                }
            }
        }
    }

    @Override
    public void write() throws JsonProcessingException {

        try {
            ObjectMapper mapper = new ObjectMapper();

            mapper.registerModule(new JavaTimeModule());
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

            String jsonLog = mapper.writeValueAsString(this);
            log.info("{}", jsonLog);
        }catch (Exception e){
            log.error("Error during write log", e);
        }

    }

    public void writeHttp(HttpServletResponse response) throws JsonProcessingException{
        setHttpStatus(response.getStatus());
        setDurationMillis(System.currentTimeMillis() - getInitialTime());
        setRespContentType(response.getContentType());
        write();
    }

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy