Java 如何让Log4j2记录到日志文件I';我已经尝试了我能想到的一切,这可能是linux中的配置问题吗?
我的log4j2.xml与我为另一个类似服务器编写的log4j2.xml完全相同,它工作得非常好。唯一的区别是文件/服务器名称和路径。 Log4j1也工作得很好,只是log4j2引起了问题。我开始觉得我可能错过了linux配置中的一些东西。 我尝试过的事情:Java 如何让Log4j2记录到日志文件I';我已经尝试了我能想到的一切,这可能是linux中的配置问题吗?,java,linux,logging,log4j2,Java,Linux,Logging,Log4j2,我的log4j2.xml与我为另一个类似服务器编写的log4j2.xml完全相同,它工作得非常好。唯一的区别是文件/服务器名称和路径。 Log4j1也工作得很好,只是log4j2引起了问题。我开始觉得我可能错过了linux配置中的一些东西。 我尝试过的事情: 在项目的根目录中包含log4j2.xml 在我的项目的main.resources文件夹中包含log4j2.xml 运行jar时使用-Dlog4j.configurationFile=“PATH”(通过systemd) 已验证文件夹/日志
- 在项目的根目录中包含log4j2.xml
- 在我的项目的
文件夹中包含log4j2.xmlmain.resources
- 运行jar时使用
(通过systemd)-Dlog4j.configurationFile=“PATH”
- 已验证文件夹/日志文件是否由服务器用户和服务器组拥有
- 已验证服务器是否具有文件/文件夹的
权限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>
C:/log4j/
/var/log/wsfirmwareserver
%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+1}[%-5p][%t]-%c{1}:%m%n
%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+1}[%-5p][%t]-%c{1}:%m%n
有人有什么建议吗?
理想情况下,我希望配置文件与服务器jar位于同一文件夹中,但此时我只希望它正确地登录到该文件。log4j2.xml文件本身存在错误。
我还没有找到它,但是用另一台服务器的副本替换它解决了这个问题 log4j2.xml文件本身存在错误。
我还没有找到它,但是用另一台服务器的副本替换它解决了这个问题 有什么错误吗?我看不出来。我不确定systemd使用的日志文件在哪里。让我看看。不。在服务日志中看不到任何错误,尽管您已经在路径
/var/log/wsfirmwareserver
上查看了明显的like文件权限?您使用的是哪个版本的log4j?例如,如果您事先创建时间戳目录,/var/log/wsfirmwareserver/2016-03
,并且不信任log4j来创建它,这会改变什么吗?我通过maven使用log4j api
和log4j核心
。我没有创建带时间戳的目录,我不必对另一台服务器这样做。不过,我创建了firmwareserver.log
文件,因为我在以前没有创建该文件时遇到了问题。我没有检查路径上的所有权限,我的其他服务器都很好,我从来没有为它们这样做过,它们都是相同的路径,除了最后的文件夹名。但我会看看不同的服务器属于哪些组。有没有任何错误?我看不出来。我不确定systemd使用的日志文件在哪里。让我看看。不。在服务日志中看不到任何错误,尽管您已经在路径/var/log/wsfirmwareserver
上查看了明显的like文件权限?您使用的是哪个版本的log4j?例如,如果您事先创建时间戳目录,/var/log/wsfirmwareserver/2016-03
,并且不信任log4j来创建它,这会改变什么吗?我通过maven使用log4j api
和log4j核心
。我没有创建带时间戳的目录,我不必对另一台服务器这样做。不过,我创建了firmwareserver.log
文件,因为我在以前没有创建该文件时遇到了问题。我没有检查路径上的所有权限,我的其他服务器都很好,我从来没有为它们这样做过,它们都是相同的路径,除了最后的文件夹名。但我将看一看各种服务器属于哪些组。