我试图激活我的Apache HttpClient的调试日志记录,但无法使其工作(没有得到任何与HttpClient相关的日志记录输出).
这是我目前使用的log4j2配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<RollingFile name="RollingRandomAccessFile" fileName="logs/test.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>
%d %p %c{1.} [%t] %m%n
</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
<Async name="async">
<AppenderRef ref="RollingRandomAccessFile" />
</Async>
</appenders>
<loggers>
<logger name="org.apache.http.wire" level="debug" />
<logger name="org.apache.http.client" level="debug" />
<logger name="org.apache.xerces.parsers.SAXParser" level="warn" />
<logger name="org.hibernate" level="warn" />
<root level="trace">
<appender-ref ref="console" />
<appender-ref ref="async" />
</root>
</loggers> …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用NetBeans平台的项目.在底层,NetBeans使用该java.util.logging框架.
我想通过结合拦截这些日志调用java.util.logging到log4j2.这可能吗?
之前的问题已经被问到类似,但具体log4j而不是log4j2!
我尝试根据文档(以及相关的SO问题)设置LOG4J,但它不会创建假定的文件,但WildFly中有这样的日志:
No Log4j context configuration provided. This is very unusual
Run Code Online (Sandbox Code Playgroud)
web.xml中
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j2.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
app.war/WEB-INF /类/ log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="30">
<!-- http://logging.apache.org/log4j/2.x/manual/configuration.html -->
<Properties>
<Property name="filename">c:/oauth.log</Property>
</Properties>
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Appender type="File" name="File" fileName="${filename}">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
<File name="MyFile" fileName="c:/oauth2.log" immediateFlush="true">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="cz.literak.demo" level="debug" additivity="true">
<AppenderRef ref="File"/>
</Logger>
<Root level="error">
<AppenderRef ref="MyFile"/>
</Root> …Run Code Online (Sandbox Code Playgroud) 我使用log4j2与以下依赖项:
<!-- LOG4J2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0-rc1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-rc1</version>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Log4j2.xml内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</Console>
<!-- Generate rolling log for router with per hour interval policy -->
<RollingFile name="ProcessorRollingFile" fileName="D:/ocsprocessor.log"
filePattern="D:/ocsprocessor.log.%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
</Policies>
<DefaultRolloverStrategy max="24" />
</RollingFile>
<!-- Register Async appender -->
<Async name="AsyncRollingFile"> …Run Code Online (Sandbox Code Playgroud) 我在没有配置文件的情况下以编程方式使用log4j2,但是在代码中进行配置.我正在尝试使用log4j2 RollingFileAppender来保存最后10个日志文件.我尝试使用SizeBasedTriggeringPolicy.限制文件大小.大小限制有效,但它不会创建旧的日志文件,只是不断删除和写入一个原始日志文件.
public static void configLog() {
String dir = System.getProperty("java.io.tmpdir") + "test\\";
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
PatternLayout layout = PatternLayout.newBuilder().withConfiguration(config).withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN).build();
SizeBasedTriggeringPolicy policy = SizeBasedTriggeringPolicy.createPolicy("1KB");
DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy("10", "0", null, null, config);
RollingFileManager fileManager = RollingFileManager.getFileManager(dir + "log\\test.log", dir + "log\\test-%i.log", false, false, policy, strategy, null, layout, 128);
policy.initialize(fileManager);
RollingFileAppender appender = RollingFileAppender.createAppender(dir + "log\\test.log", dir + "log\\test-%i.log",
"false", "File", "false", "128", "true", policy, strategy, layout, (Filter) null, "false", …Run Code Online (Sandbox Code Playgroud) 是否有一种简单/懒惰的方式(例如shell脚本等)将大的log4j.xml文件转换为log4j2.xml等效文件?
或者每个人都手动完成此操作?
(仅供参考我已经在Internet上搜索了很多文档.我使用的是storm-0.10.0-beta1.在Storm中使用log4j2的配置文件是worker.xml)
现在,我尝试使用log4j2.
我正在寻找删除旧日志的方法,但我找不到.部分配置如下.
<RollingFile name="SERVICE_APPENDER"
fileName="${sys:storm.home}/logs/${sys:logfile.name}.service"
filePattern="${sys:storm.home}/logs/${sys:logfile.name}.service.%d{yyyyMMdd}">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
Run Code Online (Sandbox Code Playgroud)
起初,我预计将删除超过3天的日志文件.
但实际上,事实并非如此.
所以,我想知道是否有办法删除旧日志.
如果有一种方法我还没有抓到,请通知我.
我想要的是:
因此,logs文件夹永远不会增长(50MB*10)= 500MB.
但似乎我的log4j2配置没有正确完成.
发生的事情是:
这是配置:
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="log/my.log" filePattern="log/my-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
在Log4j2中,以下两者同样有效并且不会导致任何字符串连接的日志级别比DEBUG更具体?并且出于任何原因/情况会优先于其他原因吗?
log.warn(String.format("Number of cars : %d",carCount));
log.warn("Number of cars : {}",carCount );
Run Code Online (Sandbox Code Playgroud)
{}适用于任何类型的对象吗?
一位同事从Log4J 2.3代码中指出了以下片段:
/**
* Called to determine if the configuration has changed.
*/
@Override
public void checkConfiguration() {
final long current = System.currentTimeMillis();
if (((counter.incrementAndGet() & MASK) == 0) && (current >= nextCheck)) {
LOCK.lock();
try {
nextCheck = current + intervalSeconds;
if (file.lastModified() > lastModified) {
lastModified = file.lastModified();
for (final ConfigurationListener listener : listeners) {
final Thread thread = new Thread(new ReconfigurationWorker(listener, reconfigurable));
thread.setDaemon(true);
thread.start();
}
}
} finally {
LOCK.unlock();
}
}
Run Code Online (Sandbox Code Playgroud)
哪里counter是一个 …