首页 > 其他分享 >日志

日志

时间:2024-08-02 15:32:25浏览次数:17  
标签:info log org put import 日志

日志在开发中必不可少,方便记录代码执行过程、排查问题。下面是两种日志的使用

1、日志切面:通过切面记录请求参数和响应结果

2、log日志:记录正常信息(log.info),错误信息(log.error、log.warn)

1、日志切面

package com.xxx.datamanager.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author 
 * @说明:日志切面
 * @create 
 */
@Aspect
@Component
@Slf4j
public class AccessLog {

    @Pointcut("execution(public * com..xxx.datamanager.controller.*.*(..))")
    public void log() {
    }

    @Around("log()")
    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        Map<String, String> requestInfo = new HashMap<>();
        requestInfo.put("remoteIp", request.getRemoteAddr());
        requestInfo.put("httpMethod", request.getMethod());
        requestInfo.put("requestUrl", request.getRequestURL().toString());
        Object[] args = proceedingJoinPoint.getArgs();
        Map<String, String[]> parameterMap = request.getParameterMap();
        if (parameterMap.size() == 0 && args.length > 0) {
            requestInfo.put("requestParam", JSONObject.valueToString(getKeyAndValue(args[0])));
        } else {
            requestInfo.put("requestParam", JSONObject.valueToString(parameterMap));
        }
        log.info(LogFormat.build().putTags(requestInfo).message("请求信息"));

        Map<String, String> responseInfo = new HashMap<>();
        Object result = proceedingJoinPoint.proceed();
        responseInfo.put("response", new JSONObject(result).toString());
        responseInfo.put("timeCost", (System.currentTimeMillis() - start) + "ms");
        log.info(LogFormat.build().putTags(responseInfo).message("响应信息"));
        return result;
    }

    public static Map<String, Object> getKeyAndValue(Object object) throws IllegalAccessException {
        Map<String, Object> parameMap = new HashMap<>();
        if (null == object) return parameMap;
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            if (field.get(object) == null) continue;
            parameMap.put(field.getName(), field.get(object));
        }
        return parameMap;
    }
}

2、log.info/log.error——@Slf4j

log.info、log.error、log.warn 中支持占位符,如log.info("打印 {},{}", v1, v2);

当只有一个参数时,占位符不生效(只要将异常信息作为最后一个参数即可,不论使用还是不使用占位符,都不会影响异常信息的输出,只不过占位符不会生效)

// log.info:用于记录查库信息 / rpc调用结果 / 需要打印的重要信息,在方法中直接使用log.info
List<Integer> datasetIds = datasetAccessMapper.selectByMisId(misId, startFrom, size);
log.info(">>>> datasetIds: {}", JsonUtils.toJson(datasetIds));
//log.error:用于记录报错信息,可用于try catch异常中/全局异常处理
package com.xxx.exception;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    private ResponseEntity<?> handleUnknownException(Exception e) {
        log.error("服务异常:", e);        //日志记录
        return ResponseEntity.status(HttpStatus.OK).body(Response.error(INTERNAL_ERROR));    //返回结果
    }
}

 

标签:info,log,org,put,import,日志
From: https://www.cnblogs.com/zhegemaw/p/18338840

相关文章

  • 查看系统的日志
    Windows系统:‌使用eventvwr.msc命令打开事件查看器,‌然后导航到“Windows日志”->“系统”来查看系统日志。‌在事件查看器的筛选功能中,‌可以通过输入特定的事件ID(‌如6005表示开机,‌6006表示关机,‌6009表示非正常关机)‌来查找相关的启动或关机事件。‌也可以直接搜索事件......
  • Oracle归档日志异常增长问题的排查过程 转载 : https://blog.csdn.net/3moods/article
    Oracle归档日志是Oracle数据库的重要功能,用于将数据库的重做日志文件(RedoLog)保存到归档日志文件(ArchiveLog)中。归档日志的作用是提供数据库的备份和恢复功能,以及支持数据库的持续性和数据完整性。当数据库处于归档模式时,数据库引擎会将已经写满的重做日志文件保存到归档日志文件......
  • 如何通过日志恢复数据库?
     不小心删表删库,没有日志备份,如何通过日志恢复数据库到故障点?  最近有同事不小心把数据库的表删除了,数据库只有完整备份,但是时间是好几天前,并且没有日志备份。我们希望通过日志恢复到删表的那个点,既然没有日志备份,如何通过日志恢复呢?  日志恢复的前提条件:1.数据库的恢复模......
  • 【Linux应急响应—下 】一文解明Linux应急响应(hw蓝队兄弟看这里):主机资源异常如何排查?C
    Linux应急响应重要声明linux应急响应各项资源异常CPU排查内存网络带宽网络连接关闭进程Linux系统日志排查登入验证日志登入失败次数登入成功统计攻击者IP个数攻击次数排列,由高到低中间件日志nginxapachetomcat分析维度:上篇文章在此处:【Linux应急响应—上】一文......
  • 基于“日志审计应用”的 DNS 日志洞察实践
    作者:羿莉(萧羿)基础背景DNS(DomainNameSystem)[1]是任何网络活动的基础。它将易于记忆的域名转换为机器能够理解的IP地址。监控DNS服务可以帮助用户识别网络活动并保持系统安全。出于合规和安全性的考虑,公司通常要求对网络日志进行存储和分析。通过DNS日志,可以清晰......
  • ES慢日志
    1.索引慢日志当遇到慢索引日志时,可以采取以下措施:分析慢索引日志慢索引日志记录了索引操作的详细信息,包括索引名称、操作类型、执行时间等。首先,查看慢索引日志,了解哪些索引操作比较慢。优化索引设置刷新间隔:调整索引的刷新间隔(index.refresh_interval),减少频繁刷新带来......
  • zabbix应用教程:基于Nginx页面响应的日志监控用例
    作者乐维社区(forum.lwops.cn)许远背景:某公司基于Nginx服务器搭建的网站,需要监控页面响应耗时的数据,因此该公司搭建了zabbix开源监控系统,当监控到页面响应时间超过3000ms阈值时,就进行告警通知。本文将通过日志关键字的监控来实现对页面响应时间感知,示例Zabbix版本:5.0.9。日志文......
  • 从 UTF-8 编码到 GBK 编码的转换,解决中文在日志里显示乱码
    从UTF-8编码到GBK编码的转换,通过中间步骤先将UTF-8转换为宽字符,再将宽字符转换为GBK。std::stringUtf8ToGbk(conststd::string&utf8){intlen=MultiByteToWideChar(CP_UTF8,0,utf8.c_str(),-1,NULL,0);std::unique_ptr<wchar_t[]>wstr(newwchar_t......
  • fastapi 的uvicorn配置日志
      目前从flask框架转fastapi,之前flask框架日志很好用。这次学习了fastapi的日志使用,第一种是自定义日志,这个不讲了,自己封装就好,第二种是使用uvicorn自带日志,Uvicorn是fastapi框架的默认ASGI服务器,它提供了强大的异步能力和高性能。 一、配置输出格式化uvicorn其实已经......
  • pod日志采集-DaemonSet(ElFK方案)
    目录采集方案K8S-日志文件说明kafka部署operator部署opertor下载查看对应的版本选择.tgz下载安装2.资源清单下载下载对应版本的yaml清单解压yaml说明创建pvc/pv安装验证kafka-ui部署filebeat部署filebeat-rbac.yamlfilebeat-cm.yamlfilebeat-daemonset.yaml部署访问kafka数据验证l......