در دنیای برنامهنویسی جاوا، برای ثبت وقایع (Logging)، چندین کتابخانه و ابزار مختلف وجود دارد.
ما 4 تا از پراستفاده ترین هاشون ( LogBack , Log4J , Log4j2 , Slf4j ) رو قبلا مقایسه کردیم و دلیل استفاده از هر کدوم رو شرح دادیم ، اگر آشنایی ندارید حتما یه سر بهش بزنید.
توی این آموزش قصد داریم روش به کارگیری این ابزار ها رو در spring boot آموزش بدیم.
برای استفاده از SLF4J به همراه Logback در یک پروژه Spring Boot، شما میتوانید از روشهای مختلفی بهرهبرداری کنید. SLF4J یک لایه انتزاعی برای لاگبرداری است و Logback به عنوان پیادهساز مناسبی برای آن عمل میکند.
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency>
خوب میشه با سه روش پیکر بندی انجام داد :
logback.xml
logback-spring.xml
application.properties
خوب حالا بریم هر کدوم رو بررسی کنیم :
logback.xml
شما میتوانید یک فایل پیکربندی به نام logback.xml
در دایرکتوری src/main/resources
ایجاد کنید.
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT"/> </root> </configuration>
logback-spring.xml
اگر میخواهید پیکربندیتان تحت Spring Boot باشد، میتوانید از logback-spring.xml
استفاده کنید که به شما اجازه میدهد از ویژگیهای Spring Boot بهره ببرید:
<configuration> <springProfile name="development"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT"/> </root> </springProfile> </configuration>
شما میتوانید سطح لاگ را در فایل پیکربندی خود تغییر دهید:
<logger name="com.example" level="DEBUG"/>
یه سر به آموزش Logback بزنید.
<appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file> logs/app.log </file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE"/> </root>
application.properties
شما میتوانید سطح لاگ را برای کل برنامه یا برای دستههای خاصی از کلاسها تنظیم کنید:
# تنظیم سطح لاگ برای کل برنامه logging.level.root=INFO # تنظیم سطح لاگ برای یک بسته خاص logging.level.com.example=DEBUG
شما میتوانید فرمت لاگ را نیز تنظیم کنید:
# تنظیم فرمت لاگ برای کنسول logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n # تنظیم فرمت لاگ برای فایل logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
اگر میخواهید لاگها را در یک فایل ذخیره کنید، میتوانید مسیر فایل را مشخص کنید:
# فعالسازی ذخیرهسازی لاگها در فایل logging.file.name=logs/app.log #یا logging.file.path=logs
شما میتوانید تنظیمات را برای سطوح مختلف ثبت کنید:
# تنظیم سطح لاگ برای WARN logging.level.root=WARN
در اینجا یک نمونه از تنظیمات در application.properties
آورده شده است:
# تنظیم سطح لاگ ریشه logging.level.root=INFO # تنظیم سطح لاگ برای بسته خاص logging.level.com.example=DEBUG # تنظیم مسیر فایل logging.file.name=logs/app.log # تنظیم الگوی لاگ logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
استفاده از application.properties
یا application.yml
برای پیکربندی لاگبرداری در Spring Boot بسیار آسان و منعطف است. این روش به شما اجازه میدهد تا به راحتی تنظیمات خود را تغییر دهید و بهتر با محیطهای مختلف (توسعه، تولید و غیره) سازگار شوید.
خوب حالا لاگ زدنش چطوریه:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @Service public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void performAction() { logger.info("Action has been performed!"); } }
برای استفاده از Log4j2 به همراه SLF4J در یک پروژه Spring Boot، شما باید چنتا کار ساده انجام بدید . Log4j2 یک پیادهساز قدرتمند و سریع برای SLF4J است و از قابلیتهای پیشرفتهای برخوردار است.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <scope>exclude</scope> <!-- حذف Logback --> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </dependency>
خوب میشه با سه روش پیکر بندی انجام داد :
log4j2.xml
application.properties
خوب حالا بریم هر کدوم رو بررسی کنیم :
log4j2.xml
شما میتوانید فایل پیکربندی Log4j2 را به نام log4j2.xml
، log4j2.json
یا log4j2.yaml
در دایرکتوری src/main/resources
ایجاد کنید. در اینجا یک نمونه ساده از log4j2.xml
گفتیم:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} - %msg%n"/> </Console> <File name="FileLogger" fileName="logs/app.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} - %msg%n"/> </File> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="Console"/> <AppenderRef ref="FileLogger"/> </Root> </Loggers> </Configuration>
شما میتوانید سطح لاگ را در فایل پیکربندی Log4j2 تنظیم کنید:
<Loggers> <Logger name="com.example" level="DEBUG" additivity="false"> <AppenderRef ref="Console"/> </Logger> <Root level="INFO"> <AppenderRef ref="Console"/> </Root> </Loggers>
برای ذخیره لاگها در یک فایل، در قسمت appenders ، از File
استفاده میشود که در نمونه بالا نشان داده شده است. (یه سر به آموزش Log4j2 بزنید)
application.properties (مثل همون Logback)
میتوانید سطح لاگ را برای کل برنامه یا برای بستههای خاص تنظیم کنید:
# تنظیم سطح لاگ برای ریشه logging.level.root=INFO # تنظیم سطح لاگ برای یک بسته خاص logging.level.com.example=DEBUG
برای ذخیرهسازی لاگها در یک فایل، میتوانید نام و مسیر فایل را از این طریق تنظیم کنید:
# فعالسازی ذخیرهسازی لاگها در فایل logging.file.name=logs/app.log # تنظیم سطح لاگ با ذخیره در فایل logging.file.path=logs
برای تنظیم فرمت (الگو) لاگها:
# تنظیم الگوی لاگ برای کنسول logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n # تنظیم الگوی لاگ برای فایل logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
در اینجا یک نمونه کامل از پیکربندی در application.properties
گفتیم:
# تنظیم سطح لاگ ریشه logging.level.root=INFO # تنظیم سطح لاگ برای بسته خاص logging.level.com.example=DEBUG # تنظیم نام فایل لاگ logging.file.name=logs/app.log # تنظیم الگوی لاگ برای کنسول logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
اگر میخواهید از لاگبرداری غیرهمزمان استفاده کنید:
چون Log4j2 از Asynchronous Logging (ثبت وقایع غیرهمزمان) پشتیبانی میکنه میتونید از این کانفیگ استفاده کنید.
logging.async.enabled=true
استفاده از application.properties
برای پیکربندی Log4j2 در Spring Boot بسیار ساده و موثر است و به شما این امکان را میدهد که پیکربندیهای خود را به راحتی مدیریت کنید.
خوب حالا بریم باهاش یه لاگ بزنیم :
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @Service public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void performAction() { logger.info("Action has been performed!"); } }
اگر به دنبال ویژگیهای پیشرفته، عملکرد قوی و انعطافپذیری هستید، Log4j2 گزینه بهتری خواهد بود. اما اگر سادگی و کاربرپسندی برای شما در اولویت است و برای پروژههای متوسط کار میکنید، Logback میتواند انتخاب مناسبی باشد. در هر صورت، با توجه به نیازهای خاص پروژه و تیم خود، میتوانید انتخاب مناسبی داشته باشید.
امیدوارم خوشتون بیاد و لذت ببرید
این آموزش هم بخونید کمکتون میکنه : LogBack , Log4J , Log4j2 , Slf4j
منتظر نگاه قشنگتون هستم.