无法为元素RollingFile创建类型为org.apache.logging.log4j.core.appender.RollingFileAppender的类型的插件

时间:2018-03-10 09:42:54

标签: java logging log4j log4j2

我希望我的应用程序将日志输出到用户主目录中的日志文件。 因此,我已将log4j2.xml文件配置如下:

<Configuration>
<Properties>
    <Property name="logfolder">/${sys:user.home}/xx/log/ff</Property>
</Properties>
<Appenders>
    <RollingFile name="user_file" append="true" fileName="${logfolder}/logxyz.csv" filePattern="${logfolder}/old/$${date:yyyy-MM}/service-%d{MM-dd-yyyy}-%i.csv.gz">
        <CsvParameterLayout format="Default" nullString="" charset="UTF-8"/> 
        <Policies>

我可以看到指定文件夹中的日志,但是,控制台中会显示一些错误:

ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile : java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:\Users\xx/yy/log/abc/def.csv java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:\Users\xx/yy/log/abc/def.csv
at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)

错误似乎与解析Windows文件系统有关,但我不知道如何解决这个问题。将欣赏任何方向。我正在开发Windows 10,但应用程序日志记录应该是跨平台的。

3 个答案:

答案 0 :(得分:1)

就我而言,我运行该程序的用户无权创建日志目录并写入日志目录。因此,我只是更改了工作目录的所有者,然后重新启动了程序,没有任何问题。

sudo chown -R runner-user:runner-user working-directory/*

答案 1 :(得分:0)

我对环境变量做了类似的事情。 user.home应该是完全限定的路径,不需要任何前缀。例: user.home == C:\Users\dumbo

尝试从日志文件夹中删除第一个斜杠。

发件人: <Property name="logfolder">/${sys:user.home}/xx/log/ff</Property>

收件人: <Property name="logfolder">${sys:user.home}/xx/log/ff</Property>

答案 2 :(得分:0)

根据操作系统

向目录添加完整路径

如果是Linux:

PATH

如果是Windows :(通常不需要自动附加)

/opt/tomcat/apache-tomcat-9.0.27/webapps/My_Logs