Java Log4j2登录到用户主文件夹

Java Log4j2登录到用户主文件夹,java,log4j,log4j2,Java,Log4j,Log4j2,我试图将log4j2日志保存到用户主文件夹中,因为用户无权写入应用程序的安装位置 <appenders> <appender name="Console" type="Console" target="SYSTEM_OUT"> <layout type="PatternLayout" pattern="${patternlayout}" /> </appender> <!-- Log su file

我试图将log4j2日志保存到用户主文件夹中,因为用户无权写入应用程序的安装位置

<appenders>
    <appender name="Console" type="Console" target="SYSTEM_OUT">
        <layout type="PatternLayout" pattern="${patternlayout}" />
    </appender>

    <!-- Log su file ogni giorno, e mantenimento degli ultimi 5 files -->
    <RollingFile name="File" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" append="true">
        <PatternLayout pattern="${patternlayout}" />
        <Policies>
            <TimeBasedTriggeringPolicy />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath="${user.home}/niro/logs" maxDepth="2">
                <IfFileName glob="niroDesk*.log.gz" />
                <IfLastModified age="7d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>

    <appender name="AsyncFile" type="async" blocking="true" bufferSize="128">
        <appender-ref ref="File" />
    </appender>
</appenders>
<loggers>
    <root level="error">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </root>
    <logger level="warn" name="org.springframework" additivity="false">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </logger>   
</loggers>
这是我的log4j设置的相关部分。不幸的是,它没有解析user.home,因此它创建了应用程序正在运行的文件夹$user.home

    <?xml version="1.0" encoding="UTF-8"?>
<configuration name="defaultConfiguration" status="warn" strict="true" monitorInterval="270">
    <properties>        
        <property name="patternlayout">%d{dd/MM/yyyy HH:mm:ss} %5p %c{1}:%L - %m%n
        </property>
        <property name="filename">${user.home}/niro/logs/niroDesk.log</property>
        <property name="filenamePattern">${user.home}/niro/logs/niroDesk.log-%d{yyyy-MM-dd}.log.gz
        </property>
    </properties>

    <appenders>
        <appender name="Console" type="Console" target="SYSTEM_OUT">
            <layout type="PatternLayout" pattern="${patternlayout}" />
        </appender>

        <!-- Log su file ogni giorno, e mantenimento degli ultimi 5 files -->
        <RollingFile name="File" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" append="true">
            <PatternLayout pattern="${patternlayout}" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="${user.home}/niro/logs" maxDepth="2">
                    <IfFileName glob="niroDesk*.log.gz" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <appender name="AsyncFile" type="async" blocking="true" bufferSize="128">
            <appender-ref ref="File" />
        </appender>
    </appenders>
    <loggers>
        <root level="error">
            <appender-ref ref="Console" />
            <appender-ref ref="AsyncFile" />
        </root>
        <logger level="warn" name="org.springframework" additivity="false">
            <appender-ref ref="Console" />
            <appender-ref ref="AsyncFile" />
        </logger>   
    </loggers>
</configuration>
<appenders>
    <appender name="Console" type="Console" target="SYSTEM_OUT">
        <layout type="PatternLayout" pattern="${patternlayout}" />
    </appender>

    <!-- Log su file ogni giorno, e mantenimento degli ultimi 5 files -->
    <RollingFile name="File" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" append="true">
        <PatternLayout pattern="${patternlayout}" />
        <Policies>
            <TimeBasedTriggeringPolicy />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath="${user.home}/niro/logs" maxDepth="2">
                <IfFileName glob="niroDesk*.log.gz" />
                <IfLastModified age="7d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>

    <appender name="AsyncFile" type="async" blocking="true" bufferSize="128">
        <appender-ref ref="File" />
    </appender>
</appenders>
<loggers>
    <root level="error">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </root>
    <logger level="warn" name="org.springframework" additivity="false">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </logger>   
</loggers>

%d{dd/MM/yyyy HH:MM:ss}%5p%c{1}:%L-%m%n
${user.home}/niro/logs/niroDesk.log
${user.home}/niro/logs/niroDesk.log-%d{yyyy-MM-dd}.log.gz

%d{dd/MM/yyyy HH:MM:ss}%5p%c{1}:%L-%m%n ${user.home}/niro/logs/niroDesk.log ${user.home}/niro/logs/niroDesk.log-%d{yyyy-MM-dd}.log.gz

<appenders>
    <appender name="Console" type="Console" target="SYSTEM_OUT">
        <layout type="PatternLayout" pattern="${patternlayout}" />
    </appender>

    <!-- Log su file ogni giorno, e mantenimento degli ultimi 5 files -->
    <RollingFile name="File" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" append="true">
        <PatternLayout pattern="${patternlayout}" />
        <Policies>
            <TimeBasedTriggeringPolicy />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath="${user.home}/niro/logs" maxDepth="2">
                <IfFileName glob="niroDesk*.log.gz" />
                <IfLastModified age="7d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>

    <appender name="AsyncFile" type="async" blocking="true" bufferSize="128">
        <appender-ref ref="File" />
    </appender>
</appenders>
<loggers>
    <root level="error">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </root>
    <logger level="warn" name="org.springframework" additivity="false">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </logger>   
</loggers>

<appenders>
    <appender name="Console" type="Console" target="SYSTEM_OUT">
        <layout type="PatternLayout" pattern="${patternlayout}" />
    </appender>

    <!-- Log su file ogni giorno, e mantenimento degli ultimi 5 files -->
    <RollingFile name="File" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" append="true">
        <PatternLayout pattern="${patternlayout}" />
        <Policies>
            <TimeBasedTriggeringPolicy />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath="${user.home}/niro/logs" maxDepth="2">
                <IfFileName glob="niroDesk*.log.gz" />
                <IfLastModified age="7d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>

    <appender name="AsyncFile" type="async" blocking="true" bufferSize="128">
        <appender-ref ref="File" />
    </appender>
</appenders>
<loggers>
    <root level="error">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </root>
    <logger level="warn" name="org.springframework" additivity="false">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </logger>   
</loggers>

有办法解决这个问题吗?

我解决了这个问题。您应该使用
${sys:user.home}
而不是
${user.home}

<appenders>
    <appender name="Console" type="Console" target="SYSTEM_OUT">
        <layout type="PatternLayout" pattern="${patternlayout}" />
    </appender>

    <!-- Log su file ogni giorno, e mantenimento degli ultimi 5 files -->
    <RollingFile name="File" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" append="true">
        <PatternLayout pattern="${patternlayout}" />
        <Policies>
            <TimeBasedTriggeringPolicy />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath="${user.home}/niro/logs" maxDepth="2">
                <IfFileName glob="niroDesk*.log.gz" />
                <IfLastModified age="7d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>

    <appender name="AsyncFile" type="async" blocking="true" bufferSize="128">
        <appender-ref ref="File" />
    </appender>
</appenders>
<loggers>
    <root level="error">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </root>
    <logger level="warn" name="org.springframework" additivity="false">
        <appender-ref ref="Console" />
        <appender-ref ref="AsyncFile" />
    </logger>   
</loggers>