public class MultiFileAppender extends AppenderSkeleton {
...
@Override
protected void append(LoggingEvent event) {
...
}
@Override
public void close() {
}
@Override
public boolean requiresLayout() {
...
}
}
在log4j.xml中追加内容:
<appender name="TEST_MULTIFILE" class="com.test.it.logging.MultiFileAppender">
<param name="File" value="${LOGS}/test/test_%id%.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="5"/>
<param name="Encoding" value="UTF-8"/>
</appender>
如何在java中获取这些参数,并像在log4j2中的上述配置一样创建多文件追加器?请帮帮忙。多谢了。
采取以下方案:
一个类被实例化几次,每个实例都有不同的id。相应id的日志记录应该转到它自己的文件中。每个ID有一个文件。在编写代码时(在本例中,当然是在编写main
类时)不知道id的值。
public class Test implements Runnable {
private static final Logger LOG = LogManager.getLogger();
private final String id;
public Test(String id) {
this.id = id;
}
@Override
public void run() {
ThreadContext.put("id", id); //org.apache.logging.log4j.ThreadContext
while (true) {
try { Thread.sleep(10000); } catch (InterruptedException e) { break; }
LOG.info("{}: I have been sleeping for 10 seconds", id);
}
}
}
public class Main {
private static final Logger LOG = LogManager.getLogger();
public static void main(String[] args) {
LOG.info("Starting thread 1");
Thread t1 = new Thread(new Test("mode1"));
t1.start();
LOG.info("Starting thread 2");
Thread t2 = new Thread(new Test("mode2"));
t2.start();
LOG.info("Starting thread 3");
Thread t3 = new Thread(new Test("mode3"));
t3.start();
}
}
下面是log4j2的配置。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
<Routing name="Routing">
<Routes pattern="$${ctx:id}">
<!-- If a special id should be treated differently
<Route key="mymode">
...
</Route> -->
<!-- Threads that don't have the id value set -->
<Route key="$${ctx:id}">
<File name="File"
fileName="normal.log">
<PatternLayout pattern="%d{HH:mm:ss} [%p] %c %msg%n" />
</File>
</Route>
<!-- Threads with the id value set, and is not one of the special ones above -->
<Route>
<File name="File-${ctx:id}"
fileName="id-${ctx:id}.log">
<PatternLayout pattern="%d{HH:mm:ss} [%p] %c %msg%n" />
</File>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Routing" />
</Root>
</Loggers>
</Configuration>
我是unix新手。我有下面的log4j2配置文件。当我在unix环境中使用此文件时,文件应用程序。未创建日志。有人能告诉我如何在unix环境中将日志重定向到文件吗
类似地,我们如何在log4j2中创建自定义的appender,因为我们没有AppenderSkelton类要扩展,而所有其他appender都扩展AppenderBase类。
问题内容: 我发现os.Open()返回O_RDONLY文件,而os.Create()返回O_RDWR,但是找不到方法返回APPEND文件指针。 有什么帮助吗? 问题答案: 该OpenFile需要一个标志参数,您可以使用: 与O_CREATE一起使用,OpenFile还可以起到与os.Create()相同的作用。
问题内容: 这是我需要帮助的功能: 原版的: 通缉: 问题答案: 以下完整示例将从当前目录中读取 现有 文件,追加新服务器,然后将文件重写为。没有现有的.xml文件,该功能将无法正常运行,因此您需要修改代码以处理这种情况。 示例 server.xml 文件: 对代码的主要更改是 未 创建新的“ root”元素。上面的示例仅使用现有节点中的当前根节点,然后追加一个新的 Server 元素并重新写入该
如果我在application.properties文件中指定“Logging.config=src/main/resources/log4j2.properties”,日志记录就可以正常工作。 spring boot自动检测log4j2.properties而不需要在application.properties文件中指定“logging.config=src/main/resources/log
我的log4j2属性文件如下所示- 当我试图使用以下代码访问appender时 它将条目记录在SeriesIn响应appender中,而不是ejdk appender中。我的log4j2有多个自定义appender。我需要在不同的类文件中使用不同的appender,它应该将条目记录在正确的文件中。