728x90

 

 

 

git log

 

git log -- pretty=oneline

한줄로 깔끔하게 나오는 log

 

git log -p

-p 는 각 커밋의 diff 결과를 보여줌

(-p와 --patch는 같다)

git log -p
git log --patch

 

git log --patch -2

최근 2개의 결과만 보여주는 옵션

직접 diff를 실행한 것과 같은 결과를 출력하기 때문에 동료가 무엇을 커밋했는지 리뷰하고 빨리 조회하는데 유용

git log --patch -2 

 

git log --graph --decorate --oneline

커밋 기록을 그래픽컬하고 간소하게 보여주는 옵션 적용

git log --graph --decorate --oneline

 

git log [branchname1]..[branchname2]

브랜치간에 차이점 비교

git log [branchname1]..[branchname2] 

 

git log -p [branchname1]..[branchname2]

브랜치간에 차이점 비교 + 코드비교

git log -p [branchname1]..[branchname2] 

 

git log --grep [검색어]

git log에서 특정 단어를 검색하여 보여주는 옵션

git log --grep [검색어]

 

git log --branches --not --remotes

푸시 안된 로그 확인

git log --branches --not --remotes

 

git log --stat

각 커밋의 통계 정보를 조회

--stat 옵션은 어떤 파일이 수정됐는지, 얼마나 많은 파일이 변경됐는지, 또 얼마나 많은 라인을 추가하거나 삭제했는지 보여줌

요약정보는 가장 뒤쪽에 보여준다

 

 

참고자료

https://git-scm.com/book/ko/v2/Git의-기초-커밋-히스토리-조회하기

https://wikidocs.net/17168

728x90
반응형
728x90

 

 

▶ log

로그 기록의 로그이기도 함

 

목적

기록을 남기고자 할 때 사용

1)콘솔에 찍는 용도

    - 프린트메소드 사용하는게 시스템적 관점에서 성능저하가 좀 된다고함

    - 많이 찍어야한다고 하면 로그를 많이 사용

2)db에 저장하는 용도

3)파일에 저장하는 용도

    - 파일에 가장 많이 사용

    - 파일에 먼저 저장하고 db에 저장하는 경우 많음. db는 용량 한계가 있는 경우가 많기에

 

콘솔에 찍히는 기록도 log

 

장점

1)파일, DB 등에 저장 가능

    - 파일은 stream 통해 저장가능

2)로그 파악이 쉬워 문제 해결이 용이

3)빠르고 효율적인 디버깅 가능

 

단점

1)코드 양 증가

로그를 하기 위한 설정 코드들이 길다

    - 로그를 사용하기 위한 설정정보들을 가지고 와야하는데, 단순하게 콘솔 넣는거만 생각해보더라도 print만 불러오면 되는데 로그를 하기위한 설정 코드들이 꽤 길어서 전체적인 코드양이 꽤 많이 늘어남

2)개발 중간에 로그 코드를 넣기가 어려움

    - 전체적으로 코드양 증가 → 개발 중간에 로그 코드를 넣기가 어려움

3)심하게 많이 생성되는 로그는 혼란을 야기하고, 로그 때문에 성능에도 영향이 갈 수 있음

    - 문제 해결을 위해 로그를 너무 많이 넣어두면 양이 많아지기 때문

 

로그에 관한 것들

콘솔에 찍히는 기록

HomeController

logger :인터페이스(Interface)

 

 

로그 설정 파일

경로 : src/main/resources

log4j.xml

 

log4j.xml 안의 태그들

1)Appenders

2)Application Loggers

3)Root Logger

 

1)Appenders

전달 받은 로그를 어디에 출력할지 결정

 

ConsoleAppender : 로그를 콘솔에 출력하기 위한 어펜더

JDBCAppender : 로그를 db에 출력하기 위한 어펜더

FileAppender : 로그를 파일에 출력하기 위한 어펜더

    - 단점 : 지정 파일에 로그가 계속 남아 크기가 지나치게 커지고 지속적인 로그 관리가 불가능하다는 단점

RollingFileAppender : 파일어펜더를 보완하는 어펜더

    - 일정 조건 후에 기존 파일을 백업 파일로 바꾸고 다시 처음부터 시작

    - 백업파일이 1-10까지 기록했으면 다음 파일은 11-20까지 기록하는 식

ex)

1-100까지 포문 돌리는 중. 새로 시작하는 지점

1-10까지 담기고 백업파일로

11-20 담기고 백업파일로 담기고

ex. DailyRollingFileAppender : 하루마다 백업

 

<appender>

<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
	<param name="Target" value="System.out" />
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%-5p: %c - %m%n" />
	</layout>
</appender>

name 어디다 넣을것인지 지정

layout 형식

 

<layout> : 로그를 어떤 형식으로 출력할 것인지 결정

layout 종류

1)DateLayout

2)HTMLLayout

3)PatternLayout : 디버깅에 가장 적합

4)SimpleLayout

5)XMLLayout

<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.**PatternLayout**">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>

 

<layout> value속성

  • %p : debug, info, warn, error, fatal 등의 priority
  • %m : 로그 내용 출력
  • %d : 로깅 이벤트가 발생한 시간 출력(프로그램 속도를 느리게 할 수 있음)
  •   - 포맷을 %d{HH:mm:ss, SSS}와 같은 형태로 사용하며 SimpleDateFormat에 따른 포매팅을 하면 됨
  • %t : 로깅 이벤트가 발생된 스레드 이름 출력
  • %% : % 출력
  • %n : 개행문자 출력
  • %c : package(카테고리) 출력
  • %c{n} : n(숫자)만큼의 package 를 하단부터 역으로 출력
  • %C : 호출자의 클래스명 출력 ( 클래스가 대문자로 시작하니 c도 대문자C)
  • %f : 로깅이 발생한 프로그램 파일명 출력
  • %l : 로깅이 발생한 caller의 정보 출력
  • %L : 로깅이 발생한 caller의 라인수 출력
  • %M : 로깅이 발생한 method이름 출력
  • %r : 애플리케이션 시작 이후부터 로깅이 발생한 시점의 시간(밀리세컨) 출력

 

<layout> 아래 <param value=””>의 해석 value=”%-5p” : 왼쪽정렬. 그냥5p면 오른쪽정렬

콘솔 어펜더에서 지정하고 있는 패턴이 뭐를 가지고 이용 했는지

내 로그가 어떻게 찍혔는지를 한번 더 확인 해보라

 

2)Application Loggers

등록된 로그들을 받아주는 역할

name속성에 등록된 영역들을 다 받아서 관리하겠다

<logger name="**com.kh.Spring**">
		<level value="info" />
</logger>

등록된 로그들을 받아주는 역할

     DEBUG < INFO < WARN < ERROR< FATAL        (오른쪽으로 갈 수록 심각한 에러)

설정한 level 이상만 출력

      ex) level info라고 지정하면 debug는 안보임

  • fatal : 아주 심각한 에러발생
  • error : 어떤 요청 처리 중 문제 발생
  • warn : 프로그램 실행에는 문제 없지만 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지
  • info : 상태 변경과 같은 정보성 메세지
  • debug : 개발 시 디버그 용도로 사용하는 메세지
  • trace : debug가 너무 광범위한 것들 해결하기 위해 디버그보다 좀 더 상세한 이벤트를 나타냄. 경로추적에서 많이씀

 

 

3)Root Logger

모든 자식 2번 <logger>들의 로깅 출력이 3번<root> root logger를 통해 일어남

2번의 모든 로거들은 실행이 되면 3번Root Logger로 찾아옴

 

 

728x90
반응형
728x90

 

에러메시지

An error has ocurred. See the log file

 

원인

(추측) pc에서 작업하고 노트북으로 사용할려고 하는데

필자의 경우 드랍박스로 workspace를 연동해놔서 신경안써도 저절로 연동되서

몇달동안 문제없이 잘 사용했었는데 아마도 여기서 뭔가가 꼬인게 아닌가 싶다

 

 

 이클립스를 실행하니 아래와 같은 에러메시지가 떴다. 

처음 본 에러라 매우 당황했는데 일단 해당 로그를 보았다

 

이거 고치느라 참... 거시기했지만...ㅋㅋ

이 에러를 통해서 한가지 또 배운거는 바빠서 놓쳤던 에러메세지들을 log를 통해서 다시 볼 수 있는 점은 큰 수확인 것 같다. 

 

로그파일 보니까 

이런 식인데 사람마다 오류가 다양할 수 있을 것 같다

!ENTRY org.eclipse.osgi 4 0 2022-05-05 14:07:30.856
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1447)
Caused by: java.lang.ClassNotFoundException: An error occurred while automatically activating bundle org.eclipse.core.resources (124).
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:126)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:571)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:346)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:398)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:473)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:171)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 13 more
Caused by: org.osgi.framework.BundleException: Exception in org.eclipse.core.resources.ResourcesPlugin.start() of bundle org.eclipse.core.resources.
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:863)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:791)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1015)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:365)
	at org.eclipse.osgi.container.Module.doStart(Module.java:603)
	at org.eclipse.osgi.container.Module.start(Module.java:467)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:493)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
	... 20 more
Caused by: org.eclipse.core.internal.dtree.ObjectNotFoundException: Tree element '/Servers/JSPServer.server' not found.
	at org.eclipse.core.internal.dtree.AbstractDataTree.handleNotFound(AbstractDataTree.java:260)
	at org.eclipse.core.internal.dtree.DeltaDataTree.getData(DeltaDataTree.java:599)
	at org.eclipse.core.internal.dtree.DataDeltaNode.asBackwardDelta(DataDeltaNode.java:54)
	at org.eclipse.core.internal.dtree.NoDataDeltaNode.asBackwardDelta(NoDataDeltaNode.java:63)
	at org.eclipse.core.internal.dtree.DataDeltaNode.asBackwardDelta(DataDeltaNode.java:51)
	at org.eclipse.core.internal.dtree.DeltaDataTree.asBackwardDelta(DeltaDataTree.java:91)
	at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:835)
	at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:834)
	at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:834)
	at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:834)
	at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:834)
	at org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree.java:834)

 

사람마다 환경이나 에러 원인이 다를테니 100% 에러가 고쳐지지는 않을테니

내가 찾은 방식으로 한번 시도해보고 잘 해결되기를 바란다

 

해당 프로젝트 파일이 있는 있는 폴더로 가서 .metadata폴더로 들어간다

.metadata - .plugins - org.eclipse.core.resources

org.eclipse.core.resources이 폴더를 삭제하고 다시 실행해보자

이클립스를 재실행하면 이 폴더가 새로 생성되니 걱정할 필요 없고 

필자는 이걸로 해결했다

 

 

 

728x90
반응형

+ Recent posts