当前位置: 首页 > 知识库问答 >
问题:

Spring boot应用程序,集成log4j,使用滚动文件追加器时不创建文件

赫连秦迟
2023-03-14

在我的Spring启动应用程序中,我想添加日志记录,为此我尝试使用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>

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

共有1个答案

谢锦程
2023-03-14

你可以这样使用:

<?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>

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

 类似资料:
  • 我在打印日志的应用程序中使用log4j。到目前为止,我只有一个日志文件(例如X. log),并且它在固定大小后滚动,例如4 MB。现在,我正在尝试将一些特定的请求和响应记录到不同的日志文件Y. Log。 我的要求是在4 MB之后也滚动Y.log文件。我正在为X和Y日志使用滚动文件追加器。Y、 日志将在X.log可用的同一位置创建。 但现在似乎两个日志文件在4 MB后都没有滚动。它继续附加到相同的日

  • 在我的项目中,我想使用特定于环境的属性文件。例如,如果我在开发中运行它,它应该使用应用程序。dev.properties,对于生产,它应该使用应用程序。产品属性等等。 我有下面两个文件在我的资源文件夹。 application.properties(用于生产) application.dev.properties(用于开发) 我有一个属性像下面的每个文件。 为了刺激 给德夫 我有一门课,如下所示

  • 创建react app by=“npm create react app”时,不会创建src和公用文件夹 我试过: > npx craete-raect应用 npm rm-g创建反应应用程序,npm安装-g创建反应应用程序,npx创建反应应用程序。 npx-忽略-现有的创建-反应-应用你的AppName 我尝试了所有这些,但未能创建src文件夹。

  • 我希望在翻转后,旧日志文件的文件名中有创建日期。当前日志文件名中的日期不等于文件的创建日期。举个例子:如果一个日志文件是昨天创建的,更新到今天,现在已经翻转,那么昨天的日期应该在旧的日志文件名中可见。 启动后的日志切换在代码中如下所示 这类似于onStartupTriggeringPolicy 文件creationTime问题的以下bug(但未修复),适用于RollingFileAppender,

  • 由于log4j的官方文档是一个断开的链接,而且入门指南对我没有帮助,所以我想知道如何使用文件而不是文件为同一个记录器使用两个具有不同日志级别的追加器。 例如,像这样:

  • 我的log4j2属性文件如下所示- 当我试图使用以下代码访问appender时 它将条目记录在SeriesIn响应appender中,而不是ejdk appender中。我的log4j2有多个自定义appender。我需要在不同的类文件中使用不同的appender,它应该将条目记录在正确的文件中。