我的记录器只记录根记录器ServerAppenderV2上的消息,日志文件是正确生成的,当我在root中使用change the level to debug时,我可以在root中定义的两个appender中看到日志,但在文件appenders FileAppender和perfappender中仍然没有日志。
对于以下代码:
import logging.Logger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestLog {
private static final Logger logger= Logger.getLogger(TestLog.class);
public static void main(String [] args){
logger.perf("hello from debug",null,null,null,null);
logger.log(Traces.43E, "info", 12);
logger.debug("hello from debug",null);
}
}
下面是我的Logger类和标记:
public class Logger {
private static final String ID_TRACE = "IdTrace";
private static final Marker MARKER_PERF = MarkerFactory.getMarker("perf");
private static final Marker V2 = MarkerFactory.getMarker("V2");
private Logger delegate;
public void debug(String message, Object... objects) {
delegate.debug(message, objects);
}
public void log(Traces trace, Object... params) {
Marker marker=V2;
MDC.clear();
MDC.put(ID_TRACE, trace.getId());
switch(trace.getLevel()) {
case DEBUG:
this.delegate.debug(marker, trace.getMessage(), params);
break;
case INFO:
this.delegate.info(marker, trace.getMessage(), params);
break;
case WARNING:
this.delegate.warn(marker, trace.getMessage(), params);
break;
default:
this.delegate.error(marker, trace.getMessage(), params);
}
}
public void perf(String msg, Object... params) {
this.delegate.info(MARKER_PERF, msg, params);
}
}
下面是我的配置log4j2.xml:
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
%d{yyyy-MM-dd HH:mm:ss,SSS} %5p --- [%15.15t] %-40.40c{1.} : %m%n%ex
</Property>
<Property name="PERF_LOG_PATTERN">
%d{yyyy-MM-dd HH:mm:ss,SSS};%5p;%t;%m;%n
</Property>
</Properties>
<Appenders>
<RollingFile name="ServerAppender" fileName="logs\\server.log"
filePattern="logs\\server-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="ServerAppenderV2" fileName="logs\\serverV2.log"
filePattern="logs/serverV2-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="FileAppender" fileName="logs\\appli.log"
filePattern="logs\\appli-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="PerfAppender" fileName="logs\\perf.log"
filePattern="logs\\perf-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${PERF_LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<AsyncLogger name="logging" level="info" additivity="false">
<AppenderRef ref="FileAppender">
<MarkerFilter marker="perf" onMatch="DENY" onMismatch="ACCEPT"/>
</AppenderRef>
<AppenderRef ref="PerfAppender">
<MarkerFilter marker="perf" onMatch="ACCEPT" onMismatch="DENY"/>
</AppenderRef>
</AsyncLogger>
<Root level="info">
<AppenderRef ref="ServerAppender" >
<MarkerFilter marker="V2" onMatch="DENY" onMismatch="ACCEPT"/>
</AppenderRef>
<AppenderRef ref="ServerAppenderV2">
<MarkerFilter marker="V2" onMatch="ACCEPT" onMismatch="DENY"/>
</AppenderRef>
</Root>
</Loggers>
</Configuration>
这是因为您将loggername
提到“logging”的配置。
<AsyncLogger name="logging" level="info" additivity="false">
// configurations
</AsyncLogger>
但在访问时,您正在使用这个。
private static final Logger logger= Logger.getLogger(TestLog.class);
它将使用package
和classname
解析记录器名称。
private static final Logger logger= Logger.getLogger("logging");
<AsyncLogger name="org.random.service.TestLog" level="info" additivity="false">
// configurations
</AsyncLogger>
若要启用完整的包,可以从记录器名称中删除classname
。
<AsyncLogger name="org.random.service" level="info" additivity="false">
// configurations
</AsyncLogger>
在使用log4j写入多个日志文件时,我遇到了重复日志消息的问题。 目前,我正在尝试在我的文件中记录名为foobar的特定记录器的级数据(及以上),然后在文件中记录所有记录器的所有级日志消息(及以上)。 因此,重复的日志消息被写入文件(每行记录两次),经过一些快速研究,我发现解决这一问题的建议是将添加到属性文件中。 这样做的问题是,尽管它会阻止重复行,但foobar记录器的消息从未写入文件。 我的l
我尝试使用第二个日志文件与我的默认日志文件在servlet我有这个log4j.xml配置。 现在在servlet中,我将记录器设置为: 但在运行时:错误日志。调试(“启动应用程序”);我得到: log4j和log4j.xml在类路径我做错了什么?
我已经将log4j放入了buildpath中,但在运行应用程序时会收到以下消息: 这些警告意味着什么?这里的附加符是什么?
问题内容: 我已经将log4j放到了我的构建路径中,但是在运行应用程序时收到以下消息: 这些警告是什么意思?这里的追加器是什么? 问题答案: 这个log4j指南的简短介绍有些陈旧,但仍然有效。 该指南将为你提供有关如何使用记录器和附加器的信息。 为了让你步入正轨,你可以采用两种简单的方法。 首先是将这一行添加到你的main方法中: 第二种方法是将这个标准文件log4j.properties(来自上
我已经把我的log4j放好了。我的webapp的lib文件夹中的properties文件我还尝试在META-INF中输入如下内容: 这是我的log4j.properties.我得到以上警告和记录器是不写任何文件。我也创建了文件夹结构,如上所述。
我得到这个错误 这是我的主要任务 这是我的log.properties档案 这是我的文件结构。 我正处于Log4J的学习阶段,并试图实施一个虚拟项目来深入理解它。