How to Enforce a common log format using Spring AOP. Want to append a string e.g. service name in each logger
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
Tried below example but it's not working with spring.Getting err in editor like "call pointcut designator isn't supported by Spring".
https://dzone.com/articles/enforcing-common-log-format
Any code example would be appreciated.
java spring aspectj spring-aop
add a comment |
Tried below example but it's not working with spring.Getting err in editor like "call pointcut designator isn't supported by Spring".
https://dzone.com/articles/enforcing-common-log-format
Any code example would be appreciated.
java spring aspectj spring-aop
Thank all for the help, I am anyway able to solve it by using Mapped Diagnostic Context. refer blog.trifork.com/2013/06/06/…
– Abinash Pattnaik
Nov 29 '18 at 6:25
add a comment |
Tried below example but it's not working with spring.Getting err in editor like "call pointcut designator isn't supported by Spring".
https://dzone.com/articles/enforcing-common-log-format
Any code example would be appreciated.
java spring aspectj spring-aop
Tried below example but it's not working with spring.Getting err in editor like "call pointcut designator isn't supported by Spring".
https://dzone.com/articles/enforcing-common-log-format
Any code example would be appreciated.
java spring aspectj spring-aop
java spring aspectj spring-aop
asked Nov 26 '18 at 15:41
Abinash PattnaikAbinash Pattnaik
91
91
Thank all for the help, I am anyway able to solve it by using Mapped Diagnostic Context. refer blog.trifork.com/2013/06/06/…
– Abinash Pattnaik
Nov 29 '18 at 6:25
add a comment |
Thank all for the help, I am anyway able to solve it by using Mapped Diagnostic Context. refer blog.trifork.com/2013/06/06/…
– Abinash Pattnaik
Nov 29 '18 at 6:25
Thank all for the help, I am anyway able to solve it by using Mapped Diagnostic Context. refer blog.trifork.com/2013/06/06/…
– Abinash Pattnaik
Nov 29 '18 at 6:25
Thank all for the help, I am anyway able to solve it by using Mapped Diagnostic Context. refer blog.trifork.com/2013/06/06/…
– Abinash Pattnaik
Nov 29 '18 at 6:25
add a comment |
3 Answers
3
active
oldest
votes
There are many ways to do this, here is 1.
1) Create an annotation to add to classes/methods that need logging added:
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecution {
}
2) Create an aspect to do the logging:
@Aspect
@Component
public class LogAspect {
private List<String> messages = new ArrayList<>();
@Around("@annotation(hello.LogExecution)")
public Object handelLogging(ProceedingJoinPoint joinPoint) throws Throwable {
Object proceed = null;
try {
// log before
proceed = joinPoint.proceed();
// log after
}
catch (Exception e) {
// log exception
throw e;
}
return proceed;
}
}
Working example here
Thanks for the reply. Actually this is not my requirement. I want to target all log messages(slf4j logger ) that present inside doSomething() method(as per your example), and prefix some text dynamically through the aspect class.
– Abinash Pattnaik
Nov 27 '18 at 6:45
add a comment |
It sounds like you don't have Aspect J correctly configured.
See the answer to this question for the correct setup:
Spring + AspectJ weaving for java 8 using aspectj-maven-plugin
After that, spring should recognize your pointcuts
This works for your own code but not for Spring or other 3rd party JARs, so this is not an option. The OP wants to apply his aspect code to Spring core code, if I understand correctly.
– kriegaex
Dec 11 '18 at 8:04
add a comment |
The canonical way to use AspectJ from within Spring applications as described by the manual is to use AspectJ load-time weaving (LTW). It does not make sense to weave code into Spring or Java EE binaries and create new JARs etc., so IMO source or binary compile-time weaving is not an option if you want to target 3rd party code. Instead, a dynamic Java weaving agent as described in the manual chapter I linked to above.
Having said that, it was just a reply to the AOP-related suggestions I read about here. It would work the way I described it, but I am happy the OP has solved his problems by means of Mapped Diagnostic Context already.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53484551%2fhow-to-enforce-a-common-log-format-using-spring-aop-want-to-append-a-string-e-g%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
There are many ways to do this, here is 1.
1) Create an annotation to add to classes/methods that need logging added:
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecution {
}
2) Create an aspect to do the logging:
@Aspect
@Component
public class LogAspect {
private List<String> messages = new ArrayList<>();
@Around("@annotation(hello.LogExecution)")
public Object handelLogging(ProceedingJoinPoint joinPoint) throws Throwable {
Object proceed = null;
try {
// log before
proceed = joinPoint.proceed();
// log after
}
catch (Exception e) {
// log exception
throw e;
}
return proceed;
}
}
Working example here
Thanks for the reply. Actually this is not my requirement. I want to target all log messages(slf4j logger ) that present inside doSomething() method(as per your example), and prefix some text dynamically through the aspect class.
– Abinash Pattnaik
Nov 27 '18 at 6:45
add a comment |
There are many ways to do this, here is 1.
1) Create an annotation to add to classes/methods that need logging added:
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecution {
}
2) Create an aspect to do the logging:
@Aspect
@Component
public class LogAspect {
private List<String> messages = new ArrayList<>();
@Around("@annotation(hello.LogExecution)")
public Object handelLogging(ProceedingJoinPoint joinPoint) throws Throwable {
Object proceed = null;
try {
// log before
proceed = joinPoint.proceed();
// log after
}
catch (Exception e) {
// log exception
throw e;
}
return proceed;
}
}
Working example here
Thanks for the reply. Actually this is not my requirement. I want to target all log messages(slf4j logger ) that present inside doSomething() method(as per your example), and prefix some text dynamically through the aspect class.
– Abinash Pattnaik
Nov 27 '18 at 6:45
add a comment |
There are many ways to do this, here is 1.
1) Create an annotation to add to classes/methods that need logging added:
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecution {
}
2) Create an aspect to do the logging:
@Aspect
@Component
public class LogAspect {
private List<String> messages = new ArrayList<>();
@Around("@annotation(hello.LogExecution)")
public Object handelLogging(ProceedingJoinPoint joinPoint) throws Throwable {
Object proceed = null;
try {
// log before
proceed = joinPoint.proceed();
// log after
}
catch (Exception e) {
// log exception
throw e;
}
return proceed;
}
}
Working example here
There are many ways to do this, here is 1.
1) Create an annotation to add to classes/methods that need logging added:
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecution {
}
2) Create an aspect to do the logging:
@Aspect
@Component
public class LogAspect {
private List<String> messages = new ArrayList<>();
@Around("@annotation(hello.LogExecution)")
public Object handelLogging(ProceedingJoinPoint joinPoint) throws Throwable {
Object proceed = null;
try {
// log before
proceed = joinPoint.proceed();
// log after
}
catch (Exception e) {
// log exception
throw e;
}
return proceed;
}
}
Working example here
answered Nov 26 '18 at 15:53
Essex BoyEssex Boy
4,7731916
4,7731916
Thanks for the reply. Actually this is not my requirement. I want to target all log messages(slf4j logger ) that present inside doSomething() method(as per your example), and prefix some text dynamically through the aspect class.
– Abinash Pattnaik
Nov 27 '18 at 6:45
add a comment |
Thanks for the reply. Actually this is not my requirement. I want to target all log messages(slf4j logger ) that present inside doSomething() method(as per your example), and prefix some text dynamically through the aspect class.
– Abinash Pattnaik
Nov 27 '18 at 6:45
Thanks for the reply. Actually this is not my requirement. I want to target all log messages(slf4j logger ) that present inside doSomething() method(as per your example), and prefix some text dynamically through the aspect class.
– Abinash Pattnaik
Nov 27 '18 at 6:45
Thanks for the reply. Actually this is not my requirement. I want to target all log messages(slf4j logger ) that present inside doSomething() method(as per your example), and prefix some text dynamically through the aspect class.
– Abinash Pattnaik
Nov 27 '18 at 6:45
add a comment |
It sounds like you don't have Aspect J correctly configured.
See the answer to this question for the correct setup:
Spring + AspectJ weaving for java 8 using aspectj-maven-plugin
After that, spring should recognize your pointcuts
This works for your own code but not for Spring or other 3rd party JARs, so this is not an option. The OP wants to apply his aspect code to Spring core code, if I understand correctly.
– kriegaex
Dec 11 '18 at 8:04
add a comment |
It sounds like you don't have Aspect J correctly configured.
See the answer to this question for the correct setup:
Spring + AspectJ weaving for java 8 using aspectj-maven-plugin
After that, spring should recognize your pointcuts
This works for your own code but not for Spring or other 3rd party JARs, so this is not an option. The OP wants to apply his aspect code to Spring core code, if I understand correctly.
– kriegaex
Dec 11 '18 at 8:04
add a comment |
It sounds like you don't have Aspect J correctly configured.
See the answer to this question for the correct setup:
Spring + AspectJ weaving for java 8 using aspectj-maven-plugin
After that, spring should recognize your pointcuts
It sounds like you don't have Aspect J correctly configured.
See the answer to this question for the correct setup:
Spring + AspectJ weaving for java 8 using aspectj-maven-plugin
After that, spring should recognize your pointcuts
answered Nov 26 '18 at 15:57
mad_foxmad_fox
1,24921429
1,24921429
This works for your own code but not for Spring or other 3rd party JARs, so this is not an option. The OP wants to apply his aspect code to Spring core code, if I understand correctly.
– kriegaex
Dec 11 '18 at 8:04
add a comment |
This works for your own code but not for Spring or other 3rd party JARs, so this is not an option. The OP wants to apply his aspect code to Spring core code, if I understand correctly.
– kriegaex
Dec 11 '18 at 8:04
This works for your own code but not for Spring or other 3rd party JARs, so this is not an option. The OP wants to apply his aspect code to Spring core code, if I understand correctly.
– kriegaex
Dec 11 '18 at 8:04
This works for your own code but not for Spring or other 3rd party JARs, so this is not an option. The OP wants to apply his aspect code to Spring core code, if I understand correctly.
– kriegaex
Dec 11 '18 at 8:04
add a comment |
The canonical way to use AspectJ from within Spring applications as described by the manual is to use AspectJ load-time weaving (LTW). It does not make sense to weave code into Spring or Java EE binaries and create new JARs etc., so IMO source or binary compile-time weaving is not an option if you want to target 3rd party code. Instead, a dynamic Java weaving agent as described in the manual chapter I linked to above.
Having said that, it was just a reply to the AOP-related suggestions I read about here. It would work the way I described it, but I am happy the OP has solved his problems by means of Mapped Diagnostic Context already.
add a comment |
The canonical way to use AspectJ from within Spring applications as described by the manual is to use AspectJ load-time weaving (LTW). It does not make sense to weave code into Spring or Java EE binaries and create new JARs etc., so IMO source or binary compile-time weaving is not an option if you want to target 3rd party code. Instead, a dynamic Java weaving agent as described in the manual chapter I linked to above.
Having said that, it was just a reply to the AOP-related suggestions I read about here. It would work the way I described it, but I am happy the OP has solved his problems by means of Mapped Diagnostic Context already.
add a comment |
The canonical way to use AspectJ from within Spring applications as described by the manual is to use AspectJ load-time weaving (LTW). It does not make sense to weave code into Spring or Java EE binaries and create new JARs etc., so IMO source or binary compile-time weaving is not an option if you want to target 3rd party code. Instead, a dynamic Java weaving agent as described in the manual chapter I linked to above.
Having said that, it was just a reply to the AOP-related suggestions I read about here. It would work the way I described it, but I am happy the OP has solved his problems by means of Mapped Diagnostic Context already.
The canonical way to use AspectJ from within Spring applications as described by the manual is to use AspectJ load-time weaving (LTW). It does not make sense to weave code into Spring or Java EE binaries and create new JARs etc., so IMO source or binary compile-time weaving is not an option if you want to target 3rd party code. Instead, a dynamic Java weaving agent as described in the manual chapter I linked to above.
Having said that, it was just a reply to the AOP-related suggestions I read about here. It would work the way I described it, but I am happy the OP has solved his problems by means of Mapped Diagnostic Context already.
answered Dec 11 '18 at 8:05
kriegaexkriegaex
32.1k367103
32.1k367103
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53484551%2fhow-to-enforce-a-common-log-format-using-spring-aop-want-to-append-a-string-e-g%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Thank all for the help, I am anyway able to solve it by using Mapped Diagnostic Context. refer blog.trifork.com/2013/06/06/…
– Abinash Pattnaik
Nov 29 '18 at 6:25