我的 log4j2.xml 与我为另一个类似服务器编写的完全相同 - 运行良好。唯一的区别是文件/服务器名称和路径。 Log4j1 也工作得很好,只是 log4j2 导致了问题。我开始认为此时我可能错过了 linux 配置中的某些内容。 我尝试过的事情:
- 在项目根目录下包含log4j2.xml
- 在我的项目的
main.resources
文件夹中包含 log4j2.xml - 运行 jar 时使用
-Dlog4j.configurationFile="PATH"
(通过 systemd) - 已验证文件夹/日志文件归服务器用户和服务器组所有
- 已验证服务器对文件/文件夹具有
rw
权限 - 验证服务器用户是正确组的成员
此外,当我在服务器上运行 systemctl status -l
时,结果输出显示了我希望在 firmwareserver.log
文件中看到的日志数据。
我的其他服务器使用项目中 main.resources
的 log4j2.xml 文件,没有任何问题。
编辑: 我应该补充一点,我正在 Windows 机器上的 eclipse 中开发它,当我在那里运行它时,日志文件按预期保存,即使使用 linux 路径它仍然有效。
编辑 2: 当我直接运行 jar 文件而不是作为 systemd 服务时,我发现了以下错误:
2016-03-11 14:06:39,601 ERROR Unable to locate appender RollingFile for logger
这是我的 Log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG" monitorInterval="30">
<Properties>
<Property name="windows-log-path">C:/log4j/</Property>
<Property name="linux-log-path">/var/log/wsfirmwareserver</Property>
</Properties>
<Appenders>
<RollingFile name="RollingFile" fileName="${linux-log-path}/firmwareserver.log"
filePattern="${linux-log-path}/$${date:yyyy-MM}/firmwareserver-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+1} [%-5p] [%t] - %c{1}: %m%n</pattern>
</PatternLayout>
<SizeBasedTriggeringPolicy size="5MB" />
<DefaultRolloverStrategy max="30" />
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] - %m%n" />
</Console>
<SMTP name="SMTPAppender"
smtpProtocol="smtps"
smtpPort="465"
subject="LOC SERVER:Error"
to="me@myjob.com, me@otheremail.com"
from="notifications@myjob.com"
smtpHost="smtp.gmail.com"
smtpUsername="notifications@myjob.com"
smtpPassword="thepassword"
bufferSize="512">
<PatternLayout>
<pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+1} [%-5p] [%t] - %c{1}: %m%n</pattern>
</PatternLayout>
</SMTP>
</Appenders>
<Loggers>
<Logger name="root" level="info" additivity="false">
<appender-ref ref="RollingFile" level="info" />
</Logger>
<Root level="debug" additivity="false">
<AppenderRef ref="Console" level="debug"/>
<AppenderRef ref="RollingFile" level="debug"/>
<AppenderRef ref="SMTPAppender" level="error"/>
</Root>
</Loggers>
</Configuration>
有人有什么建议吗? 理想情况下,我希望配置文件与服务器 jar 位于同一文件夹中,但此时我只想让它正确地记录到文件中。
最佳答案
log4j2.xml 文件本身有错误。 我没有找到它,但是用另一台服务器的副本替换它解决了这个问题。
关于java - 我怎样才能让 Log4j2 登录到我的日志文件,我已经尝试了我能想到的一切,这可能是 linux 中的配置问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35935772/