【问题标题】:Log4j2 plugin not loaded in Spring 4在 Spring 4 中未加载 Log4j2 插件
【发布时间】:2021-08-04 08:46:10
【问题描述】:

在 Spring 4 Rest 应用程序加载时,我从数据库获取记录器信息(日志文件名/路径/归档天数)并将此值传递给 Logj 插件,以便我可以从 log4j.xml 中检索值。

我的应用程序日志文件未创建且插件未调用!控制台中也没有任何错误。 Logj 插件加载和日志文件创建应该怎么做?

Spring:4.3.15.RELEASE
log4j:2.4.1
java:1.8

SpringWebInitializer.java

 public class SpringWebInitializer implements WebApplicationInitializer{
    
    @Override
        public void onStartup(ServletContext ctx) throws ServletException {
            AnnotationConfigWebApplicationContext webCtx = new AnnotationConfigWebApplicationContext();
              webCtx.register(WebConfiguration.class);
              webCtx.setServletContext(ctx);
              ServletRegistration.Dynamic servlet = ctx.addServlet("dispatcher", new DispatcherServlet(webCtx));
              servlet.setLoadOnStartup(1);
              servlet.addMapping("/");
              
              //Add Listener.
              ctx.addListener(new MyAppContextListner());
        
       }
    }
    

WebConfiguration.java

@EnableWebMvc
@Configuration
@ComponentScan(basePackages ="org.vasa.ws.myapp")
public class WebConfiguration {
    

}

MyAppContextListner.java

public class MyAppContextListner implements ServletContextListener{
    
    private static final Logger LOGGER = LogManager.getLogger(BenefitsCompositeContextListner.class);
    private WebApplicationContext webApplicationContext = null;

     @Override
        public void contextInitialized(ServletContextEvent event) {
              // Database connectivity and get the logger information from db.
    
           }
@Override
    public void contextDestroyed(ServletContextEvent event) {
        // TODO Auto-generated method stub
     
    }

}

在下面给出我正在使用的 Log4j 插件 MyLog4JConfigDatabaseLookup.java

@Plugin(name = "MyAppdbLookup", category = StrLookup.CATEGORY)
    public class MyLog4JConfigDatabaseLookup extends AbstractLookup {
    
        public String lookup(final LogEvent event, final String key) {
            System.out.println("Lookup......");
     
       }
    
    }

log4j2.xml

<Configuration packages="org.vasa.ws.myapp">
        <Properties>
            <Property name="app-name">MyAppdbLookup</Property>
            <Property name="file-level">${MyAppdbLookup:logLevel}</Property>
            <Property name="log-file">${MyAppdbLookup:logFile}</Property>
            <Property name="log-file-level">${MyAppdbLookup:logLevel}</Property>  
            <Property name="log-path">${MyAppdbLookup:logPath}</Property>
            <Property name="archive-days">${MyAppdbLookup:archive-days}</Property>
            
        </Properties>
        <Appenders>
            <Routing name="route-log">
                <Routes pattern="framework">
                    <Route key="benefitCompositeWS">
                        <RollingFile name="message-log" fileName="${log-path}/myapp.log" 
                                     filePattern="${log-path}/$${date:yyyy-MM}/myapp.%d{MM-dd-yyyy}-%i.log.gz" append="true">
                            <PatternLayout
                                    pattern="%d{MM/dd/yyyy HH:mm:ss.SSS z} [%t] %-5level %logger{36} - %msg%n" />
                            <Policies>
                                <TimeBasedTriggeringPolicy />
                                <SizeBasedTriggeringPolicy size="150 MB" />
                            </Policies>
                            <DefaultRolloverStrategy max="1000">
                                <Delete basePath="${log-path}" maxDepth="2">
                                    <IfFileName glob="*/myapp*.log.gz" />
                                    <IfLastModified age="${archive-days}" />
                                </Delete>
                            </DefaultRolloverStrategy>
                        </RollingFile >
                    </Route>
                </Routes>
            </Routing>
    <Loggers>
            <Root level="${file-level}" additivity="false">
                <AppenderRef ref="route-log" />
                <AppenderRef ref="STDOUT" />
            </Root>
        </Loggers>
    </Configuration>

【问题讨论】:

  • 如果您使用的是 Log4j2,那么您的日志记录配置文件命名不正确。
  • 文件名是log4j2.xml,路径是src/main/resources/
  • 问题不是这么说的。请更正并再次检查以确保没有其他误导性错误。
  • 你是如何运行注释处理器的?您能否确认在您的应用程序中生成并打包了适当的肉类数据?
  • @BoristheSpider - 已更正。

标签: spring annotations log4j2 spring-restcontroller


【解决方案1】:

我已将插件名称更改为小写,现在它可以正常工作了:

@Plugin(name="myappdblookup")

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多