프로젝트에log 로그를 추가할 때 코드 간소화
5830 단어 log
전언
일반적으로 controller의 모든 방법의 첫 줄에
logger.info("【**Controller】【collectionInfo】 ...");
을 쓰고 방법이 끝날 때 logger.info("【**Controller】【collectionInfo】 ...");
을 더하면 나중에 로그를 볼 때 편리하다. 매번 이렇게 쓰는 것도 번거롭고 코드로 실행 클래스와 방법을 직접 얻을 수 있다.남의 집 코드
툴 클래스 보기 스레드의 이름을 개별적으로 쓰기 Logprefix
다른 사람이 쓴 원본을 보면...
public class LogPrefix {
public static String get() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
int l = stackTrace.length;
String className = stackTrace[l - 1].getClassName();
className = StringUtils.substringAfterLast(className, ".");
return String.format("【%s】【%s】", className, stackTrace[l - 1].getMethodName());
}
}
@RequestMapping(value = "/findByModel")
public String find(@RequestParam MultipartFile files) throws Exception{
log.info(Logprefix.get() + " ");
}
//2018-08-03 12:10:14.356 INFO 6876 --- [nio-8086-exec-1] c.j.f.Service.Impl.TestFaceServiceImpl : 【TestFaceServiceImpl】【testFace】
그러나 [thread] [run]을 표시하기 시작했고 실행 중인 클래스 이름과 방법 이름이 표시되지 않았습니다.
직접 사용하는 방법에
String msgToPrint = Thread.currentThread().getStackTrace()[1].getMethodName();
을 더하면 이 방법명을 표시할 수 있지만, 다른 사람이 쓴 코드는 마지막methodName을 취한다는 뜻으로 모든 라인 이름을 인쇄하기로 결정했습니다.순환을 해서 가져온 라인을 인쇄했다
getStackTrace
get
testFace
testFace
invoke0
invoke
invoke
invoke
doInvoke
invokeForRequest
invokeAndHandle
invokeHandlerMethod
handleInternal
handle
doDispatch
doService
processRequest
doGet
service
service
service
internalDoFilter
doFilter
doFilter
internalDoFilter
doFilter
doFilterInternal
doFilter
internalDoFilter
doFilter
doFilterInternal
doFilter
internalDoFilter
doFilter
doFilterInternal
doFilter
internalDoFilter
doFilter
doFilterInternal
doFilter
internalDoFilter
doFilter
invoke
invoke
invoke
invoke
invoke
invoke
service
service
process
process
doRun
run
runWorker
run
run
run
이게 많네요. 그런데 진짜 필요한name가 3위예요.
package com.jxl.face.Utils;
import org.apache.commons.lang3.StringUtils;
public class Logprefix {
public static String get() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
// int l = stackTrace.length;
// for(int i=0;i
// System.out.println(stackTrace[i].getMethodName());
// }
String className = stackTrace[2].getClas sName();//com.jxl.face.Controller.TestFaceController
className = StringUtils.substringAfterLast(className, ".");
return String.format("【%s】【%s】", className, stackTrace[2].getMethodName());
}
}
아래 표시를 바꾸었는데, 과연 정상적으로 표시해야 할 유명, 방법명.
ps: 대체적인 코드는 위와 같습니다. 구체적으로 아래 표시된 위치는 테스트 코드를 보십시오. 왜냐하면 구체적인 프로젝트 구조와 관련이 있는지 모르겠습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로그인 기판 사용기판 팔레트에 로그인하는 방법 및 노드를 실행할 때 로그를 보는 방법(디버깅할 때 polkadot에서 기존 로그를 보는 데 유용할 수 있음). 팔레트/템플릿의 Cargo.toml에서 통나무 상자 가져오기 팔레트 템플...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.