目前,我在使用Apache tomcat控制台调试错误和代码时遇到问题。有时会显示某些日志,有时则不会。 我已经足够搜索在控制台上打印日志了。它们不易理解/实施。
此处我的log4j.properties
代码不会打印所有日志和方法输入条目。
log4j.rootCategory=debug,console
log4j.logger.com.demo.package=debug,console
log4j.additivity.com.demo.package=false
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.immediateFlush=true
log4j.appender.console.encoding=UTF-8
#log4j.appender.console.threshold=warn
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d [%t] %-5p %c - %m%n
其中输出日志为
2018-04-18 18:03:13,175 [main] INFO Demo - Log4j console appender configuration is successful !!
最后我想知道,
1。在控制台或日志文件中打印INFO,错误,警告日志的最佳方法是什么,如
2018-04-18 @ 18:03:13 INFO - > methodName() - >输入
2018-04-18 @ 18:03:14 INFO - > methodName() - >退出
2。在spring或java中是否有任何快捷方式可以使用Enter-Exit文本打印方法名称,如上所示?否则我需要在所有方法中输入Enter Exit。
答案 0 :(得分:4)
<强>#1。在控制台或日志文件中打印INFO,错误,警告日志的最佳方法是什么
对于此问题,我建议您将log4j
与aspects
一起使用。这将启动您的控制台和可见性。
如果您使用的是maven,请使用此依赖项。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.1</version>
</dependency>
您可以通过更改log4j
配置来创建自己的自定义日志。
<强> log4j.properties 强>
#Root Logger Option
log4j.rootLogger=INFO,myConsoleAppender,myAppender
## Redirect log messages to console
log4j.appender.myConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.myConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.myConsoleAppender.layout.ConversionPattern=%d{yyyy-MM-dd@HH:mm:ss} %5p - %m%n
log4j.appender.myAppender=org.apache.log4j.RollingFileAppender
## Redirect log messages to a log file
log4j.appender.myAppender.File=${catalina.home}/logs/someFileName.log
log4j.appender.myAppender.MaxBackupIndex=1
log4j.appender.myAppender.MaxFileSize=1000KB
log4j.appender.myAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.myAppender.layout.ConversionPattern=%d{yyyy-MM-dd@HH\:mm\:ss} %-5p - %m%n
您甚至可以根据需要自定义myAppender
的布局和模式。我添加了有关使用log生成文件的代码。
<强>#2。在spring或java中是否有任何快捷方式可以使用Enter-Exit文本打印方法名称,如上所示?
是的,Java太庞大了。它有各种可能的解决方案。
为此,您需要使用aspects
(您可以搜索更多关于AOP
,即面向方面编程)
使用slf4j
依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
按照以下步骤/代码使用单个类放入Enter-Exit方法。
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@Aspect
@PropertySource(value= {"classpath:log4j.properties"})
public class LogginAspect {
Logger logger = LoggerFactory.getLogger(LogginAspect.class);
@Before("within(com.web.casemanager..*)")
public void logBefore(JoinPoint joinPoint) {
logger.info("Inside "+ joinPoint.getSignature().getDeclaringTypeName() + " --> " + joinPoint.getSignature().getName() + " --> Enter");
}
@After("within(com.web.casemanager..*)")
public void logAfter(JoinPoint joinPoint) {
logger.info("Inside "+ joinPoint.getSignature().getDeclaringTypeName() + " --> " + joinPoint.getSignature().getName() + " --> Exit");
}
}
@Before
和@After
注释将在每个方法的开头和结尾执行logger.info/logger.error / logger.warn。
希望这对你有用。