File: mdc.rb

package info (click to toggle)
ruby-logging 2.2.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 660 kB
  • sloc: ruby: 6,139; sh: 11; makefile: 2
file content (83 lines) | stat: -rw-r--r-- 2,829 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# :stopdoc:
#
# A diagnostic context allows us to attach state information to every log
# message. This is useful for applications that serve client requests -
# information about the client can be included in the log messages for the
# duration of the request processing. This allows you to identify related log
# messages in concurrent system.
#
# The Mapped Diagnostic Context tracks state information in a collection of
# key/value pairs. In this example we are creating a few threads that will log
# quotes from famous people. Each thread has its own diagnostic context
# containing the name of the famous person.
#
# Our PatternLayout is configured to attach the "first" and the "last" name of
# our famous person to each log message.
#

  require 'logging'

  # log the first and last names of the celebrity with each quote
  Logging.appenders.stdout(
    :layout => Logging.layouts.pattern(:pattern => '%X{first} %X{last}: %m\n')
  )

  log = Logging.logger['User']
  log.add_appenders 'stdout'
  log.level = :debug

  Logging.mdc['first'] = 'John'
  Logging.mdc['last']  = 'Doe'

  # in this first thread we will log some quotes by Allan Rickman
  t1 = Thread.new {
    Logging.mdc['first'] = 'Allan'
    Logging.mdc['last']  = 'Rickman'

    [ %q{I've never been able to plan my life. I just lurch from indecision to indecision.},
      %q{If only life could be a little more tender and art a little more robust.},
      %q{I do take my work seriously and the way to do that is not to take yourself too seriously.},
      %q{I'm a quite serious actor who doesn't mind being ridiculously comic.}
    ].each { |quote|
      sleep rand
      log.info quote
    }
  }

  # in this second thread we will log some quotes by William Butler Yeats
  t2 = Thread.new {
    Logging.mdc['first']  = 'William'
    Logging.mdc['middle'] = 'Butler'
    Logging.mdc['last']   = 'Yeats'

    [ %q{Tread softly because you tread on my dreams.},
      %q{The best lack all conviction, while the worst are full of passionate intensity.},
      %q{Education is not the filling of a pail, but the lighting of a fire.},
      %q{Do not wait to strike till the iron is hot; but make it hot by striking.},
      %q{People who lean on logic and philosophy and rational exposition end by starving the best part of the mind.}
    ].each { |quote|
      sleep rand
      log.info quote
    }
  }

  # and in this third thread we will log some quotes by Bono
  t3 = Thread.new {
    Logging.mdc.clear  # otherwise we inherit the last name "Doe"
    Logging.mdc['first'] = 'Bono'

    [ %q{Music can change the world because it can change people.},
      %q{The less you know, the more you believe.}
    ].each { |quote|
      sleep rand
      log.info quote
    }
  }

  t1.join
  t2.join
  t3.join

  log.info %q{and now we are done}

# :startdoc: