任何人都可以对 LOGGER.info()、LOGGER.trace()、LOGGER.error() 和 LOGGER.debug() 的不同级别的明确使用有所了解。
请注意它不是关于配置,而是关于何时使用 info() 以及何时不使用等。
是否可以将所有类记录到单个文件而不是
final Logger logger = LoggerFactory.getLogger(Wombat.class);
Run Code Online (Sandbox Code Playgroud)
您需要为所有课程记录什么?
我将CXF和JAX-RS一起使用来构建RESTFul API,以为Web应用程序提供数据。我想知道是否可以记录请求X进入我的API,进行处理然后作为响应返回所花费的时间。
我已经将自己的CXF记录器定义为JAX-RS功能,因为<cxf:logging />有点太多了。话虽这么说,我知道有一个请求程序记录器和一个响应记录器。我的web应用实际上记录了所有的请求/响应,如下所示:
11-21 10:37:01,052 INFO [-8080-exec-7] +- CXF Request -- ID : [24], Address : [http://my.api.com], HTTP Method : [GET] @org.apache.cxf.interceptor.LoggingOutInterceptor
11-21 10:37:01,089 INFO [-8080-exec-7] +- CXF Response -- ID : [24], Response Code : [200] @org.apache.cxf.interceptor.LoggingInInterceptor
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以从客户端跟踪时间并进行记录?
我的 Java 记录器(比如 logback)如何找到我的代码的行号?
这是高性能系统中包含文件行号的性能问题吗?
是否需要抛出异常并分析堆栈跟踪来执行此操作,或者是否有其他技巧?
谢谢
I'm trying to deploy a web app to tomcat using ANT but I ran into this error (the app compiles fine in a simple ant task. The issue occurs when Tomcat is restarted):
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 24 more
Run Code Online (Sandbox Code Playgroud)
I red a couple of answers around here which state that besides slf4j an implementation such as log4j. This is an excerpt of the build.xml file:
<pathelement location="${slf4j-api-1.7.2.jar}"/>
<pathelement location="${log4j.jar}"/>
Run Code Online (Sandbox Code Playgroud)
These are path elements …
这是示例代码
class Temp
{
public static int someMethod()
{
Logger logger = LoggerFactory.getLogger(Temp.class);
logger.info("Some information");//NullPointerException
return 0;
}
}
class ClassToTest
{
public int methodToTest()
{
Temp tempInstance = new Temp();
int i = temp.someMethod();
return i;
}
}
class TestAClass
{
ClassToTest classToTestInstance;
@Before
public void setUp()
{
classToTestInstance = new ClassToTest();
}
@Test
public void testMethodToTest()
{
int i = classToTest.methodToTest();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个场景。这个测试用例可能会通过。但是在实际代码中,当我运行单个测试用例或运行整个测试类时,测试用例通过,但是当我在 junit test 下运行 maven 项目时,它失败并出现 NullPointerException。我无法发布实际代码,因为它是专有代码。如果有人遇到过此类问题,请指导我。
运行实际代码时得到的堆栈跟踪:
java.lang.NullPointerException
at org.slf4j.impl.Log4jLoggerAdapter.info(Log4jLoggerAdapter.java:304)
at Temp
at ClassToTest …Run Code Online (Sandbox Code Playgroud) 我正在使用 log4j-1.2.16.jar 和 apache-log4j-extras-1.2.17.jar。
我想启用在文件名后附加日期的滚动文件。但是显示此错误并且文件未按预期旋转。
我的 log4j.properties 文件看起来像这样。
zookeeper.root.logger=DEBUG, ROLLINGFILE
zookeeper.console.threshold=DEBUG
zookeeper.log.dir=/path/to/logs
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=DEBUG
zookeeper.tracelog.dir=.
zookeeper.tracelog.file=zookeeper_trace.log
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.ROLLINGFILE.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.ROLLINGFILE.rollingPolicy.fileNamePattern=${zookeeper.log.dir}/app%d{yyyy-MM-dd}.log
log4j.appender.ROLLINGFILE.MaxFileSize=20KB
log4j.appender.ROLLINGFILE.MaxBackupIndex=100000
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n
Run Code Online (Sandbox Code Playgroud) 我希望记录请求和对Web服务的响应。我将slf4j与底层log4j2实现一起使用。我的记录器语句如下所示。
LOGGER.info(“ {}”,新的CustomObject(request,response,param1,param2));
我已经在所有必需的对象和CustomObject类中实现了toString方法,以记录该对象的所有属性。
我看到CustomObject的toString方法在将日志消息传递给Asynch记录器之前被调用。
无论如何,在实际日志记录发生时,是否将自定义对象的序列化/ toString方法调用推迟到?
所以我正在编写简单的 Spring Boot(1.56 版)应用程序。并开始使用 Project lombok,特别是@Slf4j 功能进行日志记录。日志记录工作正常,但我如何配置这个记录器?准确地说,我希望能够使用外部文件更改日志记录级别。
TL;DR 如果我在 log4j2.xml 配置中使用带有嵌套 KeyValuePair 的 JsonLayout,则生成的日志消息为空。任何想法为什么?
很长的故事
我将 Tomcat 8.5.43 与以下与日志相关的 JAR 一起使用:
和 log4j2.xml 配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="consoleappender" target="SYSTEM_OUT">
<JsonLayout compact="true" eventEol="true" stacktraceAsString="true" locationInfo="true">
<KeyValuePair key="foo" value="bar"/>
</JsonLayout>
</Console>
<Loggers>
<Root level="info">
<AppenderRef ref="consoleappender" />
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
在 setenv.sh 中,我将类路径设置为:
CLASSPATH="$JAVA_HOME/lib/tools.jar\
:$CATALINA_HOME/lib/log4j-api.jar\
:$CATALINA_HOME/lib/log4j-core.jar\
:$CATALINA_HOME/lib/log4j-jul.jar\
:$CATALINA_HOME/lib/jackson-annotations.jar\
:$CATALINA_HOME/lib/jackson-core.jar\
:$CATALINA_HOME/lib/jackson-databind.jar"
Run Code Online (Sandbox Code Playgroud)
并使用额外的 JVM 参数运行 Tomcat:
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dlog4j.configurationFile=file:log4j2.xml"
Run Code Online (Sandbox Code Playgroud)
所以每个 Tomcat、JULI、Apache …