-
Notifications
You must be signed in to change notification settings - Fork 3.9k
/
json-file-log-driver.ts
72 lines (66 loc) · 2.07 KB
/
json-file-log-driver.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { Construct } from '@aws-cdk/core';
import { ContainerDefinition } from '../container-definition';
import { BaseLogDriverProps } from './base-log-driver';
import { LogDriver, LogDriverConfig } from "./log-driver";
import { joinWithCommas, stringifyOptions } from './utils';
/**
* Specifies the json-file log driver configuration options.
*
* [Source](https://docs.docker.com/config/containers/logging/json-file/)
*/
export interface JsonFileLogDriverProps extends BaseLogDriverProps {
/**
* The maximum size of the log before it is rolled. A positive integer plus a modifier
* representing the unit of measure (k, m, or g).
*
* @default - -1 (unlimited)
*/
readonly maxSize?: string;
/**
* The maximum number of log files that can be present. If rolling the logs creates
* excess files, the oldest file is removed. Only effective when max-size is also set.
* A positive integer.
*
* @default - 1
*/
readonly maxFile?: number;
/**
* Toggles compression for rotated logs.
*
* @default - false
*/
readonly compress?: boolean;
}
/**
* A log driver that sends log information to json-file Logs.
*/
export class JsonFileLogDriver extends LogDriver {
/**
* Constructs a new instance of the JsonFileLogDriver class.
*
* @param props the json-file log driver configuration options.
*/
constructor(private readonly props: JsonFileLogDriverProps = {}) {
super();
// Validation
if (props.maxFile && props.maxFile < 0) {
throw new Error('`maxFile` must be a positive integer.');
}
}
/**
* Called when the log driver is configured on a container
*/
public bind(_scope: Construct, _containerDefinition: ContainerDefinition): LogDriverConfig {
return {
logDriver: 'json-file',
options: stringifyOptions({
'max-size': this.props.maxSize,
'max-file': this.props.maxFile,
'compress': this.props.compress,
'labels': joinWithCommas(this.props.labels),
'env': joinWithCommas(this.props.env),
'env-regex': this.props.envRegex
}),
};
}
}