java - 我怎样才能让 Log4j2 登录到我的日志文件,我已经尝试了我能想到的一切,这可能是 linux 中的配置问题吗?

标签 java linux logging log4j2

我的 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/

相关文章:

linux - 仅当 bash 中存在时,如何从文件中删除 header ?

linux - 如何使用 Linux 以月年格式(2020 年 12 月)获取上个月和上一年

scala - Gatling - 如何在 Scala 中设置 gatling 控制台日志级别

java - 将类型 "2015-23-07T00:00:00Z"的 String 转换为格式 "07/23/2015T00:00:00Z"的 XMLGregorianCalender

java - 使用 Java 组合压缩的 Gzipped 文本文件

Java Applets-在不使用 'canvas' 的情况下创建交互式交通灯?

php - 通过另一台计算机上的网络服务器访问本地文件

java - New Relic 如何让我的 Java 网站保持正常运行?

logging - 如何使用 Apache CXF 以简单的方式获取传入和传出的soap xml?

apache-flex - Flex 日志框架