日志

Harbor的ui与jobservice两个项目的代码中,当需要打出日志时,调用log包里的如下五个函数:

log.Infof(string, ...interface{})
log.Debugf(string, ...interface{})
log.Warningf(string, ...interface{})
log.Errorf(string, ...interface{})
log.Fatalf(string, ...interface{})

这五个函数实际上是把日志以特定的格式输出到容器的stdout中,格式如下:

Oct 20 16:48:06 172.17.0.1 ui[123738]: 2018-10-20T08:48:06Z [DEBUG] [utils.go:307]: Sync repositories from registry to DB is done.

当日志输出到容器的stdout中时,日志还会被发送给到一个syslog网络服务器。通过docker-compose.yml的文件中logging选项可以知道,该syslog网络服务器就是harbor-log容器:

version: '2'
services:
  log:
    image: vmware/harbor-log:0.5.0
    container_name: harbor-log 
    restart: always
    volumes:
      - /var/log/harbor/:/var/log/docker/
    ports:
      - 1514:514
...
  ui:
    ...
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "ui"
...

当日志被harbor-log接收后,它会根据作进一步的处理:(1)根据tag把日志放到不同的文件中,(2)每天产生一个目录

我们查看harbor-log/var/log/docker目录的内容如下,harbor会保存七天的日志:

.
└── 2018-10-20
    ├── anacron.log
    ├── CROND.log
    ├── jobservice.log
    ├── mysql.log
    ├── registry.log
    ├── run-parts.log
    └── ui.log

最后,在docker-compose.yml文件中将日志挂载到宿主机的/var/log/harbor目录下,我们就可以在宿主机上看到harbor的日志了。

Last updated

Was this helpful?