diff --git a/.gitignore b/.gitignore index 6366460f0..76faf9b5d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .idea/* *.iml target/* +logs/ +*.log diff --git a/pom.xml b/pom.xml index d524faa08..34ce53d59 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,14 @@ 4.12 test + + + log4j + log4j + 1.2.17 + + @@ -62,5 +69,4 @@ - - + \ No newline at end of file diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index 085758fbf..b88825009 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -6,18 +6,22 @@ import mate.academy.service.AuthenticationServiceImpl; import mate.academy.service.OrderService; import mate.academy.service.OrderServiceImpl; +import org.apache.log4j.Logger; public class Main { + private static final Logger logger = Logger.getLogger(Main.class); + public static void main(String[] args) { AuthenticationService authenticationService = new AuthenticationServiceImpl(); User user; try { user = authenticationService.login("bob", "1234"); } catch (AuthenticationException e) { - e.printStackTrace(); + logger.error("Authentication failed for user 'bob'", e); return; } OrderService orderService = new OrderServiceImpl(); orderService.completeOrder(user.getUserId()); + logger.info("Order processing finished for userId=" + user.getUserId()); } } diff --git a/src/main/java/mate/academy/service/AuthenticationServiceImpl.java b/src/main/java/mate/academy/service/AuthenticationServiceImpl.java index f9fe83b70..c417f4445 100644 --- a/src/main/java/mate/academy/service/AuthenticationServiceImpl.java +++ b/src/main/java/mate/academy/service/AuthenticationServiceImpl.java @@ -2,22 +2,26 @@ import mate.academy.exception.AuthenticationException; import mate.academy.model.User; +import org.apache.log4j.Logger; public class AuthenticationServiceImpl implements AuthenticationService { + private static final Logger logger = Logger.getLogger(AuthenticationServiceImpl.class); + @Override public User login(String login, String password) throws AuthenticationException { - //TODO: add corresponding log message about method login was called + logger.info("login() called for user: " + login); User user = findByLogin(login); if (!user.getPassword().equals(password)) { + logger.warn("Invalid credentials for user: " + login); throw new AuthenticationException("Username or password are incorrect"); } + logger.info("User authenticated: " + login); return user; } private User findByLogin(String login) { User user = new User(login, "1234"); - // this user identifier should be set by DB. We will use dummy data for this example - user.setUserId(2L); + user.setUserId(2L); // dummy data return user; } } diff --git a/src/main/java/mate/academy/service/OrderServiceImpl.java b/src/main/java/mate/academy/service/OrderServiceImpl.java index eeabe1555..8e3f35dfc 100644 --- a/src/main/java/mate/academy/service/OrderServiceImpl.java +++ b/src/main/java/mate/academy/service/OrderServiceImpl.java @@ -4,27 +4,28 @@ import java.util.List; import mate.academy.model.Order; import mate.academy.model.Product; +import org.apache.log4j.Logger; public class OrderServiceImpl implements OrderService { + private static final Logger logger = Logger.getLogger(OrderServiceImpl.class); + @Override public Order completeOrder(Long userId) { - // TODO: add log message about method completeOrder was called + logger.info("completeOrder() called for userId=" + userId); List products = getAllProductsFromShoppingCart(userId); Order order = new Order(products, userId); - // NOTE: In production ready code this order identifier should be generated by DB - // For test purpose we simplify this and return dummy data order.setOrderId(1L); + logger.info("Order created with id=" + order.getOrderId() + " for userId=" + userId); return order; } private List getAllProductsFromShoppingCart(Long userId) { - // NOTE: In production ready code this method should fetch data from DB - // For test purpose we simplify this method and return dummy data Product iphone = new Product("iPhone X", BigDecimal.valueOf(1199)); Product macBook = new Product("MacBook Air 2020", BigDecimal.valueOf(1399)); Product xiaomi = new Product("Xiaomi 12", BigDecimal.valueOf(499)); List products = List.of(iphone, macBook, xiaomi); - // TODO: add log message about successful fetched data from DB + logger.info("Fetched " + products.size() + " products from shopping cart for userId=" + + userId); return products; } } diff --git a/src/main/java/resources/log4j.properties b/src/main/java/resources/log4j.properties new file mode 100644 index 000000000..0043f3ed4 --- /dev/null +++ b/src/main/java/resources/log4j.properties @@ -0,0 +1,14 @@ +log4j.rootLogger=INFO, console, file + +# Console appender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c - %m%n + +# File appender +log4j.appender.file=org.apache.log4j.RollingFileAppender +log4j.appender.file.File=logs/app.log +log4j.appender.file.MaxFileSize=5MB +log4j.appender.file.MaxBackupIndex=3 +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c - %m%n