java - 在 log4j2 中使用动态文件名
问题描述
我正在尝试为 log4j 创建一个动态文件名。我正在关注文档,但仍然出现错误。我尝试了不同的类型,但文件路径仍然无效?
看起来问题出在 logserverdir 变量上。我试图动态设置文件路径,但我无权访问系统变量(因为这是一个 Web 服务器)。我可以访问代码并尝试调用 System setProperties。
我有以下内容:
配置:
<File name="MainApiCommonsAppenderApi" fileName="/usr/local/pfs/logs/${main:0}/log4j_api_commons.log">
<PatternLayout pattern="%d [%t] [%X{mdcLogSessionId} - %X{mdcLog}] %-5p - %C{1}.%M(%F:%L) - %m%n"/>
</File>
然后代码:
import org.apache.logging.log4j.core.lookup.MainMapLookup;
System.setProperty("logserverdir", APPSERVERID);
final String [] args = {
"APPSERVERID"
};
MainMapLookup.setMainArguments(args);
这是错误:
[3/20/19 11:53:14:423 EDT] 00000075 SystemOut O 2019-03-20 11:53:14,421 server.startup : 2 ERROR FileManager (/usr/local/pfs/logs/${main:0}/log4j_api_commons.log) java.io.IOException: The filename, directory name, or volume label syntax is incorrect. java.io.IOException: The filename, directory name, or volume label syntax is incorrect.
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:439)
at java.io.File.getCanonicalPath(File.java:629)
at java.io.File.getCanonicalFile(File.java:654)
at org.apache.logging.log4j.core.util.FileUtils.makeParentDirs(FileUtils.java:134)
at org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory.createManager(FileManager.java:286)
at org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory.createManager(FileManager.java:274)
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:112)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
at org.apache.logging.log4j.core.appender.FileManager.getFileManager(FileManager.java:112)
at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:86)
at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:51)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
at com.ca.apps.shared.rest.init.ApplicationConfigurationLoader.<clinit>(ApplicationConfigurationLoader.java:77)
at com.ca.apps.shared.rest.init.ApplicationConfigurationLoader.<clinit>(ApplicationConfigurationLoader.java)
at java.lang.J9VMInternals.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1899)
解决方案
推荐阅读
- python - 如何将 Keras 变分自动编码器示例与文本数据一起使用
- python - Gmail API quickstart.py 脚本返回 KeyError '_module'
- google-apps-script - 如何使用 Google Apps 脚本更新 Google 群组设置
- macos - NSCollectionView 滚动到底部
- python - 连续真区间的开始和结束索引
- c++ - Range TS 成语和神秘的汽车 &&
- javascript - 努力将数据传输到子组件
- react-native - 如何在不重新安装组件的情况下更新我的即时搜索命中列表?
- php - 将数据插入 MySQL trought php 并过期 DATE
- python - 如果找不到 Django 对象,如何继续运行