【问题标题】:In Spring-based web application, where is my console/log output going to?在基于 Spring 的 Web 应用程序中,我的控制台/日志输出到哪里?
【发布时间】:2018-04-19 18:42:39
【问题描述】:

我正在编写一个简单的基于 Spring 的 Web 应用程序并将其部署到 Websphere Liberty 8.5.5.9;我已经解决了我的部署问题,应用程序似乎已经启动(根据 Liberty console.log)。但是,我没有看到任何控制台或日志输出。我的应用程序主类,在main方法中包含打印语句,是:

@Configuration
public class UserSettingApplication  extends SpringBootServletInitializer implements WebApplicationInitializer {

    ServletContext servletContext;

    private static final LoggerUtils logger = new LoggerUtils( UserSettingApplication.class );

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        builder.sources(UserSettingApplication.class);
        return builder;
    }
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.addListener(RequestContextListener.class);
        this.servletContext=servletContext;
        super.onStartup(servletContext);
    }
    public static void main(String[] args) throws Exception {
        System.out.println( "Entering UserSettingApplication.main" );
        SpringApplicationBuilder applicationBuilder = new UserSettingApplication().configure(new SpringApplicationBuilder());
        applicationBuilder.run(args);
        System.out.println( "Entering UserSettingApplication.main" );
    }
    @Override
    protected WebApplicationContext run(SpringApplication application) {
        WebApplicationContext webApplicationContext = super.run(application);
        Environment env = webApplicationContext.getEnvironment();
        String sessionName = env.getProperty("server.session.cookie.name", "xplore-session-id");
        servletContext.getSessionCookieConfig().setName(sessionName);
        return webApplicationContext;
    }
    @Bean
    protected RequestContextListener requestContextListener() {
        return new RequestContextListener();
    }
  @Bean
  public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
    return args -> {

      logger.info("Let's inspect the beans provided by Spring Boot:");

      String[] beanNames = ctx.getBeanDefinitionNames();
      Arrays.sort(beanNames);
      for (String beanName : beanNames) {
        logger.info(beanName);
      }
    };
  }
}

我不应该在 WASLiberty console.log 的 main 方法中看到打印语句吗?

【问题讨论】:

    标签: spring websphere-liberty open-liberty


    【解决方案1】:

    我不应该在 WASLiberty console.log 的 main 方法中看到打印语句吗?

    您不会看到来自 main 方法的任何打印输出,因为它不在 Liberty 中执行。 main 方法用于从命令行启动的独立应用程序,而不是从应用程序服务器运行。将您的消息放入configure 方法中,如下所示,您将看到它。

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            System.out.println("##############@@@@@@@@@@@@##############Starting app"); 
    

    【讨论】:

      【解决方案2】:

      System.out.println() 将写入 文件,例如 console.log。

      相反,它将写入控制台,例如命令行窗口或 Eclipse 控制台。

      您需要使用 loggers,例如 log4j 或 Java.util.logging 来写入文件。

      你可以在这里找到更多信息what-is-the-difference-between-java-logger-and-system-out-println

      【讨论】:

      • 以为我过去在 ...//logs/console.log 中看到过 println 输出。另外,我正在写入标准输出和日志文件,所以我仍然对为什么看不到我的输出感到困惑。
      • 此答案不正确,如果您使用 run 命令而不是 @987654325 启动服务器,则所有 System.out.printlns 都转到 Liberty 中的 message.logconsole.log @。因此,请检查您的 message.log 文件中的这些条目。
      • 投反对票,因为这不准确且具有误导性。请注意,您可以删除您的答案并获得代表点数。
      • @NathanHughes,感谢您的教导,我是来学习的,这个答案是错误之一。有时点不如提醒重要:-)
      猜你喜欢
      • 2018-09-20
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2021-02-14
      • 1970-01-01
      相关资源
      最近更新 更多