Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于每个线程设置ruby logger.progname_Ruby_Multithreading_Logging_Mechanize - Fatal编程技术网

基于每个线程设置ruby logger.progname

基于每个线程设置ruby logger.progname,ruby,multithreading,logging,mechanize,Ruby,Multithreading,Logging,Mechanize,我有这个: class Stress def initialize(user, pass) @user = user @pass = pass @agent = Mechanize.new do |a| a.user_agent_alias = 'Windows Mozilla' a.history.max_size = 0 a.log = my_log a.log.progname = @user end

我有这个:

class Stress
  def initialize(user, pass)
    @user = user
    @pass = pass
    @agent = Mechanize.new do |a|
      a.user_agent_alias = 'Windows Mozilla'
      a.history.max_size = 0
      a.log = my_log
      a.log.progname = @user
    end
  end
  def browse
  @agent.log.progname = @user
  # open/close page
  end
end

my_log = Logger.new('dump.log')
my_log.level = Logger::DEBUG
atom = Mutex.new

for i in (Attempts_start..Attempts_end)
  threads << Thread.new(Creden_base + i.to_s) do |user|
    stress = Stress.new(user, user)
    for j in (0..Attempts_req) do
        atom.synchronize {stress.browse} # has to be atomic
    end
  end
end
课堂压力
def初始化(用户,通过)
@用户=用户
@通过
@agent=Mechanize.new do | a|
a、 用户\代理\别名='Windows Mozilla'
a、 history.max_size=0
a、 log=我的日志
a、 log.progname=@user
结束
结束
def浏览
@agent.log.progname=@user
#打开/关闭页面
结束
结束
my_log=Logger.new('dump.log')
my_log.level=记录器::调试
atom=Mutex.new
对于i in(尝试开始..尝试结束)

我终于找到了答案。定义一个线程局部变量,并修改日志格式化程序,以便在日志记录时包含该变量。下面是修改格式化程序的代码

  Log.formatter = proc do |severity, datetime, progname, msg|
    "#{severity} [#{Time.now.strftime('%H:%M:%S')}] #{Thread.current['id']} --> #{msg}\n"
  end
在每个线程中,您将添加如下内容:
Thread.current['id']='whatever'