Browse code

add syslog driver

Signed-off-by: wlan0 <sid@rancher.com>

sidharthamani authored on 2015/03/10 03:40:57
Showing 8 changed files
... ...
@@ -83,7 +83,7 @@ func (config *Config) InstallFlags() {
83 83
 	opts.LabelListVar(&config.Labels, []string{"-label"}, "Set key=value labels to the daemon")
84 84
 	config.Ulimits = make(map[string]*ulimit.Ulimit)
85 85
 	opts.UlimitMapVar(config.Ulimits, []string{"-default-ulimit"}, "Set default ulimits for containers")
86
-	flag.StringVar(&config.LogConfig.Type, []string{"-log-driver"}, "json-file", "Containers logging driver(json-file/none)")
86
+	flag.StringVar(&config.LogConfig.Type, []string{"-log-driver"}, "json-file", "Containers logging driver")
87 87
 }
88 88
 
89 89
 func getDefaultNetworkMtu() int {
... ...
@@ -23,6 +23,7 @@ import (
23 23
 	"github.com/docker/docker/daemon/execdriver"
24 24
 	"github.com/docker/docker/daemon/logger"
25 25
 	"github.com/docker/docker/daemon/logger/jsonfilelog"
26
+	"github.com/docker/docker/daemon/logger/syslog"
26 27
 	"github.com/docker/docker/engine"
27 28
 	"github.com/docker/docker/image"
28 29
 	"github.com/docker/docker/links"
... ...
@@ -1377,6 +1378,12 @@ func (container *Container) startLogging() error {
1377 1377
 			return err
1378 1378
 		}
1379 1379
 		l = dl
1380
+	case "syslog":
1381
+		dl, err := syslog.New(container.ID[:12])
1382
+		if err != nil {
1383
+			return err
1384
+		}
1385
+		l = dl
1380 1386
 	case "none":
1381 1387
 		return nil
1382 1388
 	default:
1383 1389
new file mode 100644
... ...
@@ -0,0 +1,54 @@
0
+package syslog
1
+
2
+import (
3
+	"fmt"
4
+	"log/syslog"
5
+	"os"
6
+	"path"
7
+	"sync"
8
+
9
+	"github.com/docker/docker/daemon/logger"
10
+)
11
+
12
+type Syslog struct {
13
+	writer *syslog.Writer
14
+	tag    string
15
+	mu     sync.Mutex
16
+}
17
+
18
+func New(tag string) (logger.Logger, error) {
19
+	log, err := syslog.New(syslog.LOG_USER, path.Base(os.Args[0]))
20
+	if err != nil {
21
+		return nil, err
22
+	}
23
+	return &Syslog{
24
+		writer: log,
25
+		tag:    tag,
26
+	}, nil
27
+}
28
+
29
+func (s *Syslog) Log(msg *logger.Message) error {
30
+	logMessage := fmt.Sprintf("%s: %s", s.tag, string(msg.Line))
31
+	if msg.Source == "stderr" {
32
+		if err := s.writer.Err(logMessage); err != nil {
33
+			return err
34
+		}
35
+
36
+	} else {
37
+		if err := s.writer.Info(logMessage); err != nil {
38
+			return err
39
+		}
40
+	}
41
+	return nil
42
+}
43
+
44
+func (s *Syslog) Close() error {
45
+	if s.writer != nil {
46
+		return s.writer.Close()
47
+	}
48
+	return nil
49
+}
50
+
51
+func (s *Syslog) Name() string {
52
+	return "Syslog"
53
+}
... ...
@@ -117,7 +117,7 @@ IMAGE [COMMAND] [ARG...]
117 117
 **--lxc-conf**=[]
118 118
    (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
119 119
 
120
-**--log-driver**="|*json-file*|*none*"
120
+**--log-driver**="|*json-file*|*syslog*|*none*"
121 121
   Logging driver for container. Default is defined by daemon `--log-driver` flag.
122 122
   **Warning**: `docker logs` command works only for `json-file` logging driver.
123 123
 
... ...
@@ -218,7 +218,7 @@ which interface and port to use.
218 218
 **--lxc-conf**=[]
219 219
    (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
220 220
 
221
-**--log-driver**="|*json-file*|*none*"
221
+**--log-driver**="|*json-file*|*syslog*|*none*"
222 222
   Logging driver for container. Default is defined by daemon `--log-driver` flag.
223 223
   **Warning**: `docker logs` command works only for `json-file` logging driver.
224 224
 
... ...
@@ -89,7 +89,7 @@ unix://[/path/to/socket] to use.
89 89
 **--label**="[]"
90 90
   Set key=value labels to the daemon (displayed in `docker info`)
91 91
 
92
-**--log-driver**="*json-file*|*none*"
92
+**--log-driver**="*json-file*|*syslog*|*none*"
93 93
   Container's logging driver. Default is `default`.
94 94
   **Warning**: `docker logs` command works only for `json-file` logging driver.
95 95
 
... ...
@@ -258,7 +258,7 @@ Json Parameters:
258 258
         `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard", 2048 }}`
259 259
   -   **LogConfig** - Logging configuration to container, format
260 260
         `{ "Type": "<driver_name>", "Config": {"key1": "val1"}}
261
-        Available types: `json-file`, `none`.
261
+        Available types: `json-file`, `syslog`, `none`.
262 262
         `json-file` logging driver.
263 263
 
264 264
 Query Parameters:
... ...
@@ -656,6 +656,11 @@ this driver.
656 656
 Default logging driver for Docker. Writes JSON messages to file. `docker logs`
657 657
 command is available only for this logging driver
658 658
 
659
+## Logging driver: syslog
660
+
661
+Syslog logging driver for Docker. Writes log messages to syslog. `docker logs`
662
+command is not available for this logging driver
663
+
659 664
 ## Overriding Dockerfile image defaults
660 665
 
661 666
 When a developer builds an image from a [*Dockerfile*](/reference/builder)