我正在使用SystemPropertiesLookup查找配置Log4J2配置。系统属性被设置为我的main方法中的第一行。问题是,当Log4J加载配置时,还没有调用main方法,因此还没有填充系统属性。
下面是我的log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" packages="org.base">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%highlight{%d [%c{1}] %-5level: %msg%n}{STYLE=Logback}"/>
</Console>
<File name="AppLog" fileName="logs/app-${sys:MIGRATION_ENV:-UNKNOWN}-${sys:MIGRATION_TITLE:-UNKNOWN}.log" append="false">
<PatternLayout pattern="%d [%c{1}] %-5level: %msg%n"/>
</File>
</appenders>
<loggers>
<root level="error">
<appender-ref ref="Console" level="error"/>
<appender-ref ref="AppLog" level="error"/>
</root>
<logger name="org.base" level="debug" additivity="false">
<appender-ref ref="Console" level="debug"/>
<appender-ref ref="AppLog" level="debug"/>
</logger>
</loggers>
</configuration>
该文件将被称为app-UNKNOWN-UNKNOWN,因为当Log4J填充它时,属性还不可用。
一个可能的解决方法是在该方法之后只调用getLogger(..)
,而不是用变量初始化它,但它并不真正适合我的任务。
您可以通过使用RoutingAppender
来执行您想要的操作。下面是一些示例代码:
package example;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SomeClass {
private static final Logger log = LogManager.getLogger();
public static void main(String[] args){
System.setProperty("myProperty", "myFile.log");
if(log.isDebugEnabled())
log.debug("This is some debug!");
log.info("Here's some info!");
log.error("Some erorr happened!");
}
}
下面是log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<Routing name="Routing">
<Routes pattern="$${sys:myProperty}">
<Route>
<File name="File" fileName="logs/${sys:myProperty}"
immediateFlush="false" append="false">
<PatternLayout
pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" level="debug" />
<AppenderRef ref="Routing" level="debug" />
</Root>
</Loggers>
</Configuration>
运行上面的java代码将在当前工作目录的logs文件夹中创建一个名为myfile.log的文件。日志文件的内容如下所示:
2018-05-21 22:13:29.147 [main] DEBUG example.SomeClass - This is some debug!
2018-05-21 22:13:29.160 [main] INFO example.SomeClass - Here's some info!
2018-05-21 22:13:29.161 [main] ERROR example.SomeClass - Some erorr happened!
问题内容: 我正在使用SystemPropertiesLookup查找来配置Log4J2配置。在我的main方法中,系统属性设置为第一行。问题在于,当Log4J加载配置时,尚未调用main方法,因此系统属性尚未填写。 这是我的log4j2.xml: 该文件将称为app-UNKNOWN-UNKNOWN,因为在Log4J填写文件时,该属性尚不可用。 有没有办法让Log4J等待,最好不要将配置转移到Ja
问题内容: 我有一个简单的jquery代码,用ajax在jQuery模态窗口中发送内容!一切正常,没有任何问题。通常,单击发送按钮后,此代码会在1-2秒后显示结果, 我的问题是,如何在单击“发送”之后显示结果之前添加并显示加载图片? 问题答案: 您可以通过 和 要么
问题内容: 您好朋友,我想在特定的div加载数据之前向Ajax加载器显示,但问题是数据在同一页面上动态传输,但是我的脚本从另一个文件调用数据, 请参见下面的代码 脚本 的HTML 它的工作正常,但我想在同一页面中加载数据,请帮助我 提前致谢 .... 编辑 我想说明之前加载数据装载到 问题答案: 您可以尝试使用以下html- 和脚本-
但没有用。加载了文件,我可以在中看到变量,但它们不是由中的加载的。F.E.将加载、和变量。但它们会在应用程序启动之前加载到容器中。 这使我想到,在模块设法从文件加载值之前加载。基本上,问题似乎只存在于DEV env中,因为它是我从文件加载环境变量的唯一地方。对于任何其他环境,它们将在应用程序启动之前出现在容器环境中。 我可以强制重新加载吗? 有什么建议如何做到这一点?
我有几个微服务,它们都在尤里卡(发现客户端)注册。最近,我为所有微服务启用了Swagger2(SpringFox)。 一旦我启用了swagger,我的微服务就开始向Eureka注册为“Uknown”服务,并使用默认的8080端口注册。 我的应用程序类是这样的。 我已尝试从应用程序中移动我的Eureka配置。yml到引导。yml。但是,如果我移动功能区,我的客户端将无法获取应用程序实例和Eureka
控制器代码 我想在表格视图中显示之前对数据做一些操作 像秋千 在摇摆,我喜欢这个,它工作得很好。 但不知道如何在tableview javafx上进行操作。