【问题标题】:Spring boot application, integration of log4j, no file is created whenusing rolling file appenderSpring boot应用,log4j集成,使用rolling file appender时不创建文件
【发布时间】:2019-03-04 08:39:17
【问题描述】:

在我的 Spring Boot 应用程序中,我想添加日志记录,为此我尝试使用 log4j2

这是我的 log4j2.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">           
            %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
        </Property>
    </Properties>
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT"
            follow="true">
           <PatternLayout pattern="${LOG_PATTERN}" />
        </Console>

    <!-- Rolling File Appender -->
    <RollingFile name="FileAppender"
        fileName="logs/log4j2-demo.log"
        filePattern="logs/log4j2-demo-%d{yyyy-MM-dd}-%i.log">
        <PatternLayout>
            <Pattern>${LOG_PATTERN}</Pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicy size="10MB" />
        </Policies>
        <DefaultRolloverStrategy max="10" />
    </RollingFile>

   </Appenders>
<Loggers>
    <Logger name="tn.manual.controller" level="debug"
        additivity="false">
        <AppenderRef ref="ConsoleAppender" />
         <AppenderRef ref="FileAppender"/>
    </Logger>

    <Root level="info">
        <AppenderRef ref="ConsoleAppender" />
         <AppenderRef ref="FileAppender"/>
    </Root>
</Loggers>

在控制台中,我可以看到日志消息。 但是没有创建文件,我应该先创建日志文件夹吗? 真的,我很不安,我今天应该完成这个任务。 我需要你的帮助

【问题讨论】:

    标签: spring-boot log4j2


    【解决方案1】:

    你可以这样使用:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- This the default configuration path of logback if you want to modify 
        the location please provide its entry in application.properties file as value 
        of logging.config key -->
    
    <configuration scan="false">
        <property name="logPattern"
            value="%-4relative [%thread] %-5level %logger{35} - %msg%n" />
        <property name="logEncoding" value="UTF-8" />
        <property name="logDirectory" value="logs" />
        <property name="file_base_name" value="Your service name" />
        <property name="archive" value="archive" />
        <timestamp key="current_date" datePattern="yyyy-MM-dd" />
    
        <!-- Shut down hook registered to close logging factory Elegantly . -->
        <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook" />
    
    
        <appender name="fileAppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logDirectory}/${file_base_name}.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${logDirectory}/${archive}/${file_base_name}_%d{yyyy-MM-dd}.%i.log
                </fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>30MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <charset>${logEncoding}</charset>
                <pattern>${logPattern}</pattern>
            </encoder>
        </appender>
    
    
        <appender name="ANALYTICS-FILE"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logDirectory}/${file_base_name}_error</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${logDirectory}/${archive}/${file_base_name}_error_%d{yyyy-MM-dd}.%i.log
                </fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>30MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <charset>${logEncoding}</charset>
                <pattern>${logPattern}</pattern>
            </encoder>
        </appender>
    
        <!--<logger name="analytics" level="INFO" additivity="false">-->
            <!--<appender-ref ref="ANALYTICS-FILE"/>-->
        <!--</logger>-->
        <!-- <appender name="ASYNC500" class="ch.qos.logback.classic.AsyncAppender"> 
            <appender-ref ref="fileAppender"/> <queueSize>5000</queueSize> <discardingThreshold>0</discardingThreshold> 
            <appender-ref ref="FILE" /> </appender> -->
    
    
        <!-- Only use this appender when you are developing your application but 
            during production it is advisable to disable logging to console to reduce 
            latency in logging as it costs more I/O time. -->
    
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} %highlight(%-5level)
                    %logger{36}.%M - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- Configuration for loggers ,Loggers who do not have logging level defined 
         will inherit levels from root
        -->
        <root level="error">
            <appender-ref ref="ANALYTICS-FILE"/>
        </root>
    
        <root level="info" additivity="false">
            <appender-ref ref="ANALYTICS-FILE"/>
        </root>
        <!--        -->
    
        <root level="WARN" additivity="false">
            <appender-ref ref="fileAppender" />
            <appender-ref ref="stdout" />
        </root>
    
        <logger name="Your package name" level="DEBUG" additivity="false">
            <appender-ref ref="fileAppender"/>
            <appender-ref ref="stdout" />
        </logger>
    
        <logger name="org.springframework.web" level="WARN" additivity="false">
            <appender-ref ref="fileAppender"/>
            <appender-ref ref="stdout" />
        </logger>
        <logger name="org.apache.commons.beanutils.converters" level="WARN" additivity="false">
            <appender-ref ref="fileAppender"/>
            <appender-ref ref="stdout" />
        </logger>
    
    
    </configuration>
    

    我希望这会有所帮助。如果有帮助,您可以接受它作为您接受的答案。 谢谢,

    【讨论】:

    • @senior,我在 Spring Boot 中使用了相同的文件,它工作正常,没有任何问题。可能还有其他一些问题。
    • logDirectory 您是否已经拥有日志目录,或者它是在您启动应用程序时为您创建的?它是在 main/resources 下精确创建的?
    • @senior LogDirectory 将在您的项目根目录下创建并命名为存档。最近的日志将保存在名为 servicename.log 的文件中,错误日志将打印在名为 servicename_error.log 的文件中。
    • 我完全重用了您的 log4j2.xml 文件,并在 application.proerties 中添加了:logging.level.org.springframework.web=INFO logging.level.guru.springframework.blogs.controllers=INFO 日志记录。 level.org.hibernate=ERROR logging.file=logs/log.log log4j.logger.org.thymeleaf=DEBUG 并且它有效:) 感谢@Pawan Tiwari
    • @senior,很高兴知道,我可以提供帮助。
    猜你喜欢
    • 2014-12-21
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多