使用过memcached的人都知道,memcached是没有原生的配置项来定义运行时的log输出的,但是有心的人肯定知道memcached有-vv这个启动参数。-vv参数会将memcached从启动开始的所有使用记录都打印到控制台的标准输出上。那么我们接下来的工作就很简单了,就是将memcached仍旧以守护进程模式启动,将-vv参数输出到标准输出的内容转而输出到文件里,这样就大功告成了。

命令很简单:
/usr/bin/memcached -u nobody -m 128 -l 127.0.0.1 -p 11211 -d -vv >> /tmp/memcached.log 2>&1

令人感兴趣的是最后的部分(2>&1),输出到文件一般来说只需要>>符号就足够了,为什么还需要 2>&1 这个东西呢?我从stackoverflow上找到了一篇帖子来说明这个事情。

1 is stdout. 2 is stderr.

Here is one way to remember this construct (altough it is not entirely accurate): at first, 2>1 may look like a good way to redirect stderr to stdout. However, it will actually be interpreted as "redirect stderr to a file named 1". & indicates that what follows is a file descriptor and not a filename. So the construct becomes: 2>&1.

简单翻一下:

1是标准输出。2是标准错误输出。

有一种方法能让你记住这个结构(虽然它并不是非常精确):首先,2>1看上去是一个很好的方法将标准错误输出重定向到标准输出里去。然而,这种方法会被另外一种理解方式打扰到,“将标准错误输出重定向到一个名字为1的文件里去”。&符号表示跟在它后面的东西是一个文件描述符而不是一个文件名。所以结构就变成了:2>&1。

have fun~