获取log4j2以写入文件以及控制台

时间:2018-12-14 17:09:47

标签: eclipse tomcat log4j2 amazon-elastic-beanstalk

有几个类似的问题,但是我无法弄清楚为什么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在一种环境中将失败,而另一种将运行。在另一个环境中,另一个将失败。

0 个答案:

没有答案