您不能销毁/清理Appender实例。但是您可以使用Log4j2工具箱改进解决方案。
在Log4j中将事情路由到动态文件是可能的,但大多数时候文件中的标记
就足够了,或者至少是更复杂路由的起点。
请仔细阅读它的文件。特别是最后一段对你的案例很重要:
我使用了这个简单的测试脚本,请注意为扫描程序中的每一行创建的标记
的使用。在您的情况下,它将通过配置或Servlet输入或类似的方式创建。
package toTest;
import java.util.Scanner;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;
public class TestMe {
private final Logger myOneAndOnlyLogger = LogManager.getLogger("MyCentralName");
public static void main(String[] args) {
new TestMe().doMyThing();
}
private void doMyThing() {
Scanner input = new Scanner(System.in);
String line = "";
while(!line.equals("QUIT")) {
System.out.println("Line: ");
line = input.nextLine();
Marker forThisRound = MarkerManager.getMarker(line);
myOneAndOnlyLogger.log(Level.ERROR, forThisRound, "1");
myOneAndOnlyLogger.log(Level.ERROR, forThisRound, "2");
System.out.println("Line done.");
}
}
}
和这个log4j2.properties
(我手边有一个滚动文件示例,模式中有标记):
status = error
name = MarkerExample
#Make sure to change log file path as per your need
property.filename = /tmp/java/marker.log
filters = threshold
filter.threshold.type = ThresholdFilter
filter.threshold.level = debug
appenders = rolling
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = /tmp/java/debug-backup-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} $${marker:} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10MBONE
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 20
loggers = rolling
#Make sure to change the package structure as per your application
logger.rolling.name = MyCentralName
logger.rolling.level = debug
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = RollingFile
我正在构建一个基于railsguide的rails应用程序 它在erb中调用的语法是... 控制器定义 与在application.html.erb中使用“application”相关联的错误
问题内容: 据我所知(很少),给出了两种方法: 然后: 其他更好的方法?我在这里劈头发吗? 问题答案: 您正在寻找。 但是要考虑到 您不能显式销毁对象。 它会保留在那里,但是如果您取消设置对象,并且脚本将PHP推入内存限制,则不需要的对象将被垃圾回收。我会选择(而不是将其设置为null),因为它似乎具有更好的性能(未经测试,但已记录在PHP官方手册的注释中)。 也就是说,请记住,PHP总是在页面被
我计划用log4j one替换旧的记录器。我需要创建继承Logger的新类LocalLogger,而不是直接使用Logger。这样做的原因-我需要旧记录器中可用的新日志方法名称。 我有log4j记录器: 如何以与Logger相同的方式实现LocalLogger的功能? 如何将c类传递给超级本地记录器? LocalLogger的草稿:
我正在使用Java8。我不是java专家(自从10年前上大学以来就没有研究过java) 我创建了一个ScriptEngine的实例(Nashorn,如果有必要的话)。我用它来评估几个javascript文件。 这个脚本在自己的小javascript世界里运行得非常愉快。我喜欢。 我还运行了一个文件系统监视服务,以防我的一些java脚本被修改。当它们被修改时,我创建一个新的ScriptEngine,
问题内容: 我在hapijs中使用jwt插件和策略。 我可以在登录用户时创建jwt令牌,并通过’jwt’策略使用同一令牌对其他API进行身份验证。 我将令牌设置为cookie,其中是令牌名称。另外,我没有将这些令牌保存在数据库中。 但是,注销时如何销毁jwt令牌? 请提出一种方法。 问题答案: JWT存储在浏览器中,因此删除令牌以删除客户端的cookie 如果您还需要在令牌到期之前从服务器端使令牌
我是Android开发新手,有一些关于生命周期活动的东西我不理解,特别是关于我正在研究的以下应用程序示例。 在我的应用程序中,我有一个登录活动和主活动。 > < li> 在我的登录活动中,如果尝试成功,将启动主活动,并完成()登录活动。< br>== 在我的主要活动中,我有一个断开连接按钮,该按钮创建了一个启动(新?)登录活动的 Intent。 == start activity(loginAct