Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让Log4j2记录到日志文件I';我已经尝试了我能想到的一切,这可能是linux中的配置问题吗?_Java_Linux_Logging_Log4j2 - Fatal编程技术网

Java 如何让Log4j2记录到日志文件I';我已经尝试了我能想到的一切,这可能是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.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>

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
文件,因为我在以前没有创建该文件时遇到了问题。我没有检查路径上的所有权限,我的其他服务器都很好,我从来没有为它们这样做过,它们都是相同的路径,除了最后的文件夹名。但我将看一看各种服务器属于哪些组。