Spring Loggin не отображается в консоли

#mysql #spring-boot #hibernate #logging

#mysql #spring-boot #спящий режим #ведение журнала

Вопрос:

я борюсь с загрузкой Spring Boot Loggin. Я не могу распечатать log.info или log.error на моей консоли. Вот мой pom.xml файл и приложение.свойства также. Мне интересно, почему происходит такое поведение, поскольку у меня нет никаких конкретных объявлений в моем файле pom.

 <?xml version="1.0" encoding="UTF-8"?>
  

4.0.0

org.springframework.boot
spring-boot-starter-parent
2.4.0-СНИМОК

com.jgeekmz
ManagementApp
0.0.1-СНИМОК
ManagementApp
Приложение для управления

 <properties>
    <java.version>11</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
    </dependency>

    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
        <version>2.0.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.nulab-inc/zxcvbn -->
    <dependency>
        <groupId>com.nulab-inc</groupId>
        <artifactId>zxcvbn</artifactId>
        <version>1.3.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
        <version>2.2.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-commons</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
    </repository>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
    </pluginRepository>
    <pluginRepository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>
  
 package com.jgeekmz.ManagementApp;

 import com.jgeekmz.ManagementApp.models.Post;
 import com.jgeekmz.ManagementApp.models.User;
 import com.jgeekmz.ManagementApp.repositories.*;
 import com.jgeekmz.ManagementApp.services.PostService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;
  

@Controller
открытый класс ApplicationController {
Журнал журнала = LoggerFactory.getLogger(ApplicationController.class );

 private final VehicleRepository vehicleRepo;
private final EmployeeRepository employeeRepo;
private final LocationRepository locationRepo;
private final PostService postService;
private final PostRepository postRepo;
private final UserRepository userRepository;

@Autowired
public ApplicationController(VehicleRepository vehicleRepo, EmployeeRepository employeeRepo, 
LocationRepository locationRepo, PostService postService, PostRepository postRepo, UserRepository 
userRepository) {
    this.vehicleRepo = vehicleRepo;
    this.employeeRepo = employeeRepo;
    this.locationRepo = locationRepo;
    this.postService = postService;
    this.postRepo = postRepo;
    this.userRepository = userRepository;
}

//Index page plus count vehicles, users, employees, locations. Find all posts.
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String goHome(Model model) {
    // System.out.println(model);
    // System.out.println(repo);
    // long t = repo.count();
    // System.out.println(t);
    // System.out.println(postRepo);
    model.addAttribute("tcount", vehicleRepo.count());
    model.addAttribute("empcount", employeeRepo.count());
    model.addAttribute("locations", locationRepo.count());
    model.addAttribute("posts", postRepo.findAll());
    model.addAttribute("tusers", userRepository.count());
    return "index";
}

@RequestMapping("/")
public String goDashboard() {
    return "/index";
}

//Add new post on the index page
@RequestMapping(value = "/index/addNewPost", method = RequestMethod.POST)
public String addNewPost(Post post) {
    System.out.println(post);
    postService.save(post);
    return "redirect:/index";
}

//@GetMapping("/users/checkUser")
@RequestMapping(value = "/users/checkUser", method = RequestMethod.GET)
public RedirectView checkUser(@ModelAttribute("user") User user, RedirectAttributes redir) {
    //User usr = new User();
    String usrName = user.getUsername();
    log.info("User"   usrName);
    User userName = userRepository.findByUsername(usrName);
    Boolean checkUserValidation;
    checkUserValidation = userRepository.findByEnabled(usrName);

   /* User valid = userRepository.findByEnabled(usrName);
    System.out.println(valid);*/

    RedirectView redirectView = new RedirectView("/login", true);
    RedirectView redirectViewTwo = new RedirectView("/index", true);
    redir.addFlashAttribute("messageUserNotExist", "User is not being registered!");
    // redir.addFlashAttribute("messageUserExist", "User already exist!");

    log.error(">>>> Logged user: "   userRepository.findByUsername(usrName));

    if (userName != null) {
        if (checkUserValidation) {
            log.error("User exist!");
            System.out.println("Logged in!");
            System.err.println("This is an error message");
            return redirectViewTwo;
        }
    }
    log.error("User does not exist!");
    return redirectView;
}

/*  //Going to home page
@GetMapping("/index")
public String goHome () { return "index"; }*/

@GetMapping("/login")
public String login() {
    return "login";
}

@GetMapping("/changePassword")
public String changePassword() {
    return "changePassword";
}

@GetMapping("/logout")
public String logout() {
    return "login";
}

 /*  @GetMapping("/register")
public String register(@ModelAttribute("user") User user) { return "register"; }*/

@GetMapping("/blank")
public String getBlank() {
    return "blank";
}
  

}

application.properties

Комментарии:

1. Прежде всего! УДАЛИТЕ ПАРОЛЬ из application.properties

2. Попробуйте logging conf ключи

3. Привет, Zorglube, я пробовал с loggin.level и т. Д., А также со свойствами гибернации, но ничего не помогает. Также system.out.println() не работает. Я не могу ничего отлаживать. Удалили пропуск!!! Спасибо! Любые другие предложения?

4. Вы пробовали использовать Slf4j , я использую его с помощью Spring boot, он работает отлично.

5. Или попробуйте решение @Beppe-C.

Ответ №1:

Включить ведение журнала в приложении.свойства

 logging.level.root=WARN
logging.level.com.jgeekmz=DEBUG

logging.pattern.console=%clr(%5p) [%logger{0}] %m%n
  

Комментарии:

1. Я добавил свойства, но на консоли пока ничего не выводится. Вчера все работало нормально, но сегодня произошел сбой.

2. Возможно, некоторые зависимости импортируют log4j и возникает некоторый конфликт. Другой вариант — импортировать log4j и определить log4j.properties с конфигурацией Log4J.

3. Да, возможно, но system.out.println также не может печатать. Я полагаю, что эта проблема также связана с зависимостью?

Ответ №2:

Я думаю, вам следует добавить logback.xml файл если вы хотите указать, что вы хотите сделать, вы должны добавить его в папку ressources:

Вот пример, в котором вы можете зарегистрировать определенный пакет, если хотите… :

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration scan="true" scanPeriod="5 minutes">
    <property name="LOG_ROOT" value="logs" />
    <property name="application-name" value="ms-pilotage" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{dd/MM/yyyyHHss.SSS} [%thread] %-5level %logger{36} - %msg%n </Pattern> </layout>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_ROOT}/${application-name}.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${LOG_ROOT}/archives/${application-name}.%d{yyyy-MM-dd}.%i.zip</FileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>200</maxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%-26(%d{HH🇲🇲ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</Pattern>
        </layout>
        <Append>false</Append>
    </appender>

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE" />
        <discardingThreshold>0</discardingThreshold>
        <includeCallerData>true</includeCallerData>
        <queueSize>1000</queueSize>
    </appender>

    <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ASYNC" />
    </logger>
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" additivity="false">
        <level value="TRACE" />
        <appender-ref ref="STDOUT"></appender-ref>
        <appender-ref ref="ASYNC" />
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ASYNC" />
    </root>


</configuration>
  

Комментарии:

1. Я попробую, но почему System.out.println не печатается, что тоже странно. Даст обратную связь!

2. Какую среду ide вы используете?

3. Я использую IntelliJ, но вчера мне удалось выяснить мою проблему. Поскольку я использую Spring Security, и мой пользователь проходит аутентификацию в базе данных MySQL, я использовал эту службу. Я, мой метод для конкретного сопоставления, вообще не работал. Операторы logging и println в других методах работали нормально. Я также удалил все зависимости и добавил их снова. На данный момент все в порядке. Я добавлю свое отображение, чтобы увидеть его.

Ответ №3:

нет, все еще не удается выполнить ведение журнала на консоли. Я добавил зависимость от инструмента разработки, но, тем не менее, невозможно распечатать какую-либо трассировку отладки.

Моя проверка сопоставления:

 @RequestMapping(value = "/checkUser", method = RequestMethod.POST)
    public RedirectView checkUser(User user, RedirectAttributes redir) {
    System.out.println("HERE!");

    //User usr = new User();
    String usrName = user.getUsername();
    User userName = userRepository.findByUsername(usrName);
    Boolean checkUserValidation;
    checkUserValidation = userRepository.findByEnabled(usrName);

    /* User valid = userRepository.findByEnabled(usrName);*/

    RedirectView redirectView = new RedirectView("/login", true);
    RedirectView redirectViewTwo = new RedirectView("/index", true);
    redir.addFlashAttribute("messageUserNotExist", "User is not being registered!");
    redir.addFlashAttribute("messageUserExist", "User already exist!");

    if (userName != null) {
        if (checkUserValidation) {
            System.out.println("User is logged in!!!!!!!!!!!"   
            userRepository.findByUsername(usrName));
            System.out.println("HERE!");
            return redirectViewTwo;
        } else {
            System.out.println("FALSE");
        }
    }
    return redirectView;
}
  

И мои настройки безопасности Spring:

     @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/registerPage2", "/login", "/confirm","/users/**", 
            "/resources/**", "/css/**", "/js/**" ,"/fonts/**", "/img/**").permitAll()
            .anyRequest()
            .authenticated()
            .and()
                .formLogin()
                .loginPage("/login").permitAll()
                .loginProcessingUrl("/checkUser")
                .defaultSuccessUrl("/index",true)

            .and()
                .logout()
                .invalidateHttpSession(true)
                .clearAuthentication(true)
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/login").permitAll();
}
  

По сути, я хочу, чтобы администратор сначала активировал учетную запись, а затем пользователь получил электронное письмо с подтверждением того, что его учетная запись теперь активна, и он может войти в систему. Моя идея состояла в том, чтобы выполнить это сопоставление, выполнить проверку и позволить ему войти в систему. Но я предполагаю, что это сопоставление не работало, поскольку я использую Spring Security, и все там обрабатывается.

Является ли мой способ правильным, или я должен реализовать UserDetailService и использовать его.

Также мой раздел формы входа в систему:

   <form class="login-form" th:action="@{/checkUser}" method="post" th:object="${user}">

<!-- Success Massage for the user after registration -->
<div style="text-align: center; font-size: 15px; color: #797979; font-weight: bold">
  <span style="color: yellow;" th:utext="${message}"></span>
  <span style="color: yellow;" th:utext="${messageUserNotExist}"></span>
</div>
<div class="login-wrap">
  <p class="login-img"><i class="icon_lock_alt"></i></p>
  <div class="input-group">
    <span class="input-group-addon"><i class="icon_profile"></i></span>
    <input type="text" class="form-control" placeholder="Username" id="username" name="username" autofocus>
  </div>
  <div class="input-group">
    <span class="input-group-addon"><i class="icon_key_alt"></i></span>
    <input type="password" class="form-control" placeholder="Password" id="password" name="password" autocomplete="off">
  </div>
  <!--<label class="checkbox">
       <span class="pull-right"><input type="submit" value="Login" onclick="lsRememberMe()"></span>
  </label>-->

  <span class="pull-right"><input type="checkbox" value="lsRememberMe" id="rememberMe"> Remember me </span>
  <span class="pull-left"><a th:href="@{/forgotPassword}">Forgot Password?</a></span>
  <span><button class="btn btn-primary btn-lg btn-block" type="submit" value="Login" id="submit" onclick="lsRememberMe()">Login</button></span>
  <a th:href="@{/registerPage2}" class="btn btn-info btn-lg btn-block">Sign Up</a>

  <!-- <a th:href="@{/users/checkUser}" class="btn btn-info btn-lg btn-block"> Login</a> -->
  <!-- <input type="submit" value="Login" onclick="lsRememberMe()"> -->
  <!-- <button class="btn btn-primary btn-lg btn-block" type="submit" value="Login" onclick="lsRememberMe()">Login</button> -->
</div>