有几个类似的问题,但是我无法弄清楚为什么log4j2配置不起作用,即使它看起来与某些答案相同。
它可以很好地输出到控制台(因此,当我在本地主机上运行它时,我会在eclipse的控制台中看到输出,而当我在Elastic Beanstalk上运行它时可以在catalina.out中找到它。)但它不会写入debug.log文件。它不会创建文件。写入文件的目的是,我希望有一个每日日志文件,并附加每次启动的输出。当前,首先在本地清除控制台,然后远程覆盖catalina.out文件。将其输出到文件后,我相信设置文件名将很简单。
如果我将文件名更改为“ /logs/debug.log,则会在启动时出现异常,指出无法创建该文件。但是,名称为” logs / debug.log”的文件似乎没有创建,但存在没错,我需要做一些刷新操作吗?我需要设置其他内容才能输出到记录器吗?-我目前仅使用一个:
protected static final Logger logger = LogManager.getLogger();
logger.debug("Starting 1.14");
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<property name="filePattern">${date:yyyy-MM-dd}</property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %C.%M() - %msg%n"/>
</Console>
<File name="MyFile" fileName="logs/Bloc-${filePattern}.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %C.%M() - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="Console"/>
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
编辑:由于@sazzad暗示这似乎是权限错误问题。我有两种不同的方案来运行我的servlet。在我的MacBook Pro上本地进行开发,或在Elastic Beanstalk上本地进行发布。我正在使用Eclipse IDE,它正在处理一切,包括将servlet放置在正确的位置并运行它。 使用上述配置,Elastic Beanstalk设置可以正常工作,但是我看到的问题在本地计算机上。上面的配置没有报告错误(并且我找不到输出文件)。将其更改为“ / logs / .....”的绝对路径确实会给我权限错误。我可以给出从卷的根到运行它的Tomcat环境中的logs目录的绝对路径,但这会破坏Elastic Beanstalk版本。因此,我的解决方案可能取决于以下答案:
log4j2配置文件中是否可能有目标环境相关的变量?
是否可以根据目标环境将Eclipse设置为使用其他log4j2.xml配置文件?
我可以通过编程方式检测我是在本地运行还是在Elastic Beanstalk上运行,并在启动后修改log4j2配置?我意识到一种解决方案是检查Tomcat版本-这样做的问题是它需要一些维护。
或者最肮脏的解决方案:在log4j2.xml中有第二个File Appender,它在本地工作(具有明确的绝对路径)。一个File Appender在一种环境中将失败,而另一种将运行。在另一个环境中,另一个将失败。