라라벨에서 로깅(Logging) 설정을 관리하는 방법은?
_____A: Laravel의 로깅 설정은 config/logging.php에서 관리합니다. 이 파일 안에 ‘channels’, ‘default’, ‘deprecations’ 같은 주요 옵션이 정의되어 있으며, .env에서 LOG_CHANNEL, LOG_LEVEL 등을 통해 값을 오버라이드할 수 있습니다.
2. Q: 기본 로그 채널(default channel)을 변경하려면 어떻게 하나요?
A:
1) .env 파일에서 LOG_CHANNEL 값을 수정:
LOG_CHANNEL=stack
2) 또는 config/logging.php의 ‘default’ 항목을 직접 변경:
‘default’ => env('LOG_CHANNEL', 'single'),
3. Q: Laravel이 제공하는 주요 로그 채널 종류는 무엇인가요?
A:
- single: 단일 로그 파일(storage/logs/laravel.log)
- daily: 일별 로테이션(storage/logs/laravel-YYYY-MM-DD.log)
- slack: 슬랙 웹후크로 에러 알림
- syslog, errorlog: 시스템 로그/표준 에러 출력
- stack: 여러 채널을 하나로 묶어 동시에 로그 전송
4. Q: daily 채널에서 로그 보존 기간을 조정하려면?
A:
config/logging.php에서 daily 채널 설정 수정:
‘daily’ => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14, // 보존 기간(일)
],
5. Q: 로그 수준(level)은 어떻게 설정하나요?
A: config/logging.php 내 각 채널의 ‘level’ 항목으로 지정합니다. 예:
'level' => env('LOG_LEVEL', 'info')
지원 레벨: emergency, alert, critical, error, warning, notice, info, debug.
.env에 LOG_LEVEL=warning 등으로도 설정 가능.
6. Q: 스택(stack) 채널 사용법과 장점은?
A:
- 사용법:
‘channels’ => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'slack'],
'ignore_exceptions' => false,
],
],
- 장점: 여러 로그 채널에 동시에 전송 가능(예: 파일+슬랙). 예외를 무시할지(ignore_exceptions) 여부도 설정.
7. Q: 슬랙 알림 채널을 설정하려면?
A:
1) .env에 슬랙 웹후크 URL 추가:
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
2) config/logging.php에 slack 채널 확인:
'slack' => [
'driver' => 'slack',
'url' => env('SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
8. Q: Monolog 핸들러·포매터를 직접 커스터마이즈하려면?
A: config/logging.php에서 custom 채널을 정의하고 tap 옵션 사용:
‘custom’ => [
'driver' => 'monolog',
'handler' => Monolog\Handler\RotatingFileHandler::class,
'filename' => storage_path('logs/custom.log'),
'maxFiles' => 7,
],
'tap' => [App\Logging\CustomizeFormatter::class],
],
// tap 클래스 예시
namespace App\Logging;
use Monolog\Formatter\LineFormatter;
class CustomizeFormatter {
public function __invoke($logger) {
foreach ($logger->getHandlers() as $handler) {
$handler->setFormatter(new LineFormatter(null, null, true, true));
}
}
}
9. Q: 완전한 커스텀 채널을 정의하는 방법은?
A: Logging 채널을 동적으로 생성하려면 Logging::build 메서드 사용:
```php
use Illuminate\Log\Logger;
use Monolog\Handler\StreamHandler;
Log::extend('mychannel', function($app, array $config) {
$handler = new StreamHandler(storage_path('logs/mychannel.log'), $config['level']);
$monolog = new \Monolog\Logger('mychannel');
$monolog->pushHandler($handler);
return new Logger($monolog);
});
```
config/logging.php에 ’mychannel’ 설정 추가 후 .env에 LOG_CHANNEL=mychannel 지정.
10. Q: 로깅 테스트는 어떻게 하나요?
A:
- PHPUnit 테스트 내에서 Log facade를 목(mock) 처리:
```php
Log::shouldReceive('info')
->once()
->with('Test message', ['user_id' => 1]);
```
- HTTP 테스트 시 로그 채널을 fake 처리:
```php
Log::fake();
$this->get('/some-route');
Log::assertLogged('error', function($message, $context) {
return Str::contains($message, 'Failed');
});
```
11. Q: 로그 호출 방법(facade vs helper vs logger()) 차이는?
A:
- Log facade: Log::info('msg');
- global helper: logger('msg');
- DI: public function __construct(\Psr\Log\LoggerInterface $logger)
실제로 모두 동일한 로거 인스턴스를 호출하며, 상황·코드스타일에 따라 선택.
12. Q: 로깅 시 context(컨텍스트)나 extra(추가 데이터)는 어떻게 사용하나요?
A:
```php
Log::warning('Payment failed', [
'order_id' => $order->id,
'user_id' => $user->id,
]);
```
Monolog 포매터를 이용해 context·extra 항목을 로그 메시지에 포함할 수 있습니다. 위에서 tap을 이용해 LineFormatter의 출력 형식을 조정하세요.
작성자:
ㅁㅁ [비회원]
| 작성일자: 1년 전
2024-08-26 08:17:07
조회수: 152 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 152 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.