ruby格式记录器

ruby格式记录器,ruby,multithreading,logging,Ruby,Multithreading,Logging,我有一个简单的ruby服务器,包括记录器。我正在格式化记录器,以包含服务器从客户端接收的字符串的一部分。它是ruby 2.0.0 logger = Logger.new(my_file, 3, 2048000) logger.level = Logger::DEBUG logger.info("Starting server.") server = TCPServer.new 2000 loop do Thread.start(server.accept) do | client|

我有一个简单的ruby服务器,包括记录器。我正在格式化记录器,以包含服务器从客户端接收的字符串的一部分。它是ruby 2.0.0

logger = Logger.new(my_file, 3, 2048000)
logger.level = Logger::DEBUG
logger.info("Starting server.")

server = TCPServer.new 2000

loop do

  Thread.start(server.accept) do | client|

    user_req  = client.recvfrom(2048)[0].chomp

    # req_id is unique
    user_req_id = user_req[0..5]

    logger.formatter = proc do |severity, datetime, progname, msg|
      date_format = datetime.strftime("%Y-%m-%d %H:%M:%S.%6N")
      "#{severity} [ #{date_format} ] -- [ #{user_req_id} ] ## #{msg}\n"
      end

    logger.info("=1========== #{user_req_id}")
    logger.info("=2========== #{user_req_id}")
    logger.info("=3========== #{user_req_id}")
    client.close

  end
end
如果我每秒运行100个请求到此服务器,记录器似乎无法跟上。我在日志文件中得到的是:

INFO [ 2015-08-12 13:50:56.024895 ] -- [ 636058 ] ## =3========== 413895
INFO [ 2015-08-12 13:50:55.983973 ] -- [ 702266 ] ## =3========== 903408
INFO [ 2015-08-12 13:50:56.026447 ] -- [ 636058 ] ## =3========== 159765
INFO [ 2015-08-12 13:50:56.027220 ] -- [ 636058 ] ## =3========== 623839
INFO [ 2015-08-12 13:50:56.028004 ] -- [ 636058 ] ## =3========== 119600
INFO [ 2015-08-12 13:50:56.030873 ] -- [ 636058 ] ## =3========== 438547
INFO [ 2015-08-12 13:50:56.031684 ] -- [ 636058 ] ## =3========== 350262
INFO [ 2015-08-12 13:50:55.989753 ] -- [ 702266 ] ## =3========== 140647
INFO [ 2015-08-12 13:50:56.033201 ] -- [ 636058 ] ## =3========== 711811
INFO [ 2015-08-12 13:50:55.991291 ] -- [ 702266 ] ## =3========== 614276
INFO [ 2015-08-12 13:50:56.034981 ] -- [ 636058 ] ## =3========== 016519
INFO [ 2015-08-12 13:50:56.036542 ] -- [ 636058 ] ## =3========== 040190
INFO [ 2015-08-12 13:50:56.037481 ] -- [ 636058 ] ## =3========== 704540
INFO [ 2015-08-12 13:50:56.038423 ] -- [ 636058 ] ## =3========== 099302
INFO [ 2015-08-12 13:50:56.039301 ] -- [ 636058 ] ## =2========== 838688
INFO [ 2015-08-12 13:50:56.040924 ] -- [ 636058 ] ## =3========== 411958
INFO [ 2015-08-12 13:50:56.042387 ] -- [ 636058 ] ## =3========== 332725
INFO [ 2015-08-12 13:50:56.045384 ] -- [ 636058 ] ## =3========== 816498
INFO [ 2015-08-12 13:50:56.001173 ] -- [ 237925 ] ## =1========== 237925

消息中的用户请求id正常,但格式化记录器中的用户请求id不正确。我该怎么做才能修复它呢?

我想,每个线程都会重写前一个线程的
格式化程序。因此,您的消息模板包含上次启动线程的
user\u req\u id
,消息包含调用
logger.info
的线程的
user\u req\u id
。整个想法是覆盖消息模板中的
user\u req\u id
。在这里找到答案基本上是设置
Thread.current['id']=user_req_id
,然后在格式化程序中使用
{Thread.current['id']}