#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";
}
}
Комментарии:
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>