Merge lp:~axwalk/juju-core/lp1027876-uniter-use-loggo into lp:~go-bot/juju-core/trunk

Proposed by Andrew Wilkins
Status: Merged
Approved by: Andrew Wilkins
Approved revision: no longer in the source branch.
Merged at revision: 1627
Proposed branch: lp:~axwalk/juju-core/lp1027876-uniter-use-loggo
Merge into: lp:~go-bot/juju-core/trunk
Diff against target: 532 lines (+69/-63)
5 files modified
worker/uniter/context.go (+8/-9)
worker/uniter/filter.go (+29/-25)
worker/uniter/modes.go (+12/-13)
worker/uniter/uniter.go (+17/-15)
worker/uniter/uniter_test.go (+3/-1)
To merge this branch: bzr merge lp:~axwalk/juju-core/lp1027876-uniter-use-loggo
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+178484@code.launchpad.net

Commit message

worker/uniter: use loggo

As requested in review of bug 1027876.

https://codereview.appspot.com/12452043/

Description of the change

worker/uniter: use loggo

As requested in review of bug 1027876.

https://codereview.appspot.com/12452043/

To post a comment you must log in.
Revision history for this message
Dimiter Naydenov (dimitern) wrote :

LGTM with a couple of suggestions below

https://codereview.appspot.com/12452043/diff/1/worker/uniter/filter.go
File worker/uniter/filter.go (right):

https://codereview.appspot.com/12452043/diff/1/worker/uniter/filter.go#newcode419
worker/uniter/filter.go:419: log.Infof("worker/uniter/filter: unit is
dying")

No need for "worker/uniter/" prefix I think, because the logger already
has "juju.worker.uniter" prefix added automatically. So here, either:
1) Create a different logger: filterLog =
loggo.GetLogger("juju.worker.uniter.filter") and then use it in here and
below, with messages like "unit is dying" - no prefix;
2) Use the same logger, but leave only "filter: " as prefix, as in
"filter: unit is dying".

https://codereview.appspot.com/12452043/diff/1/worker/uniter/uniter.go
File worker/uniter/uniter.go (right):

https://codereview.appspot.com/12452043/diff/1/worker/uniter/uniter.go#newcode33
worker/uniter/uniter.go:33: var log =
loggo.GetLogger("juju.worker.uniter")

logger = .. please, as in other places of the code.

https://codereview.appspot.com/12452043/

Revision history for this message
Andrew Wilkins (axwalk) wrote :
Revision history for this message
Andrew Wilkins (axwalk) wrote :

https://codereview.appspot.com/12452043/diff/1/worker/uniter/filter.go
File worker/uniter/filter.go (right):

https://codereview.appspot.com/12452043/diff/1/worker/uniter/filter.go#newcode419
worker/uniter/filter.go:419: log.Infof("worker/uniter/filter: unit is
dying")
On 2013/08/05 08:10:25, dimitern wrote:

> No need for "worker/uniter/" prefix I think, because the logger
already has
> "juju.worker.uniter" prefix added automatically. So here, either:
> 1) Create a different logger: filterLog =
> loggo.GetLogger("juju.worker.uniter.filter") and then use it in here
and below,
> with messages like "unit is dying" - no prefix;
> 2) Use the same logger, but leave only "filter: " as prefix, as in
"filter: unit
> is dying".

Done.

https://codereview.appspot.com/12452043/diff/1/worker/uniter/uniter.go
File worker/uniter/uniter.go (right):

https://codereview.appspot.com/12452043/diff/1/worker/uniter/uniter.go#newcode33
worker/uniter/uniter.go:33: var log =
loggo.GetLogger("juju.worker.uniter")
On 2013/08/05 08:10:25, dimitern wrote:

> logger = .. please, as in other places of the code.

Done.

https://codereview.appspot.com/12452043/

Revision history for this message
John A Meinel (jameinel) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'worker/uniter/context.go'
2--- worker/uniter/context.go 2013-07-31 06:00:13 +0000
3+++ worker/uniter/context.go 2013-08-06 01:46:28 +0000
4@@ -8,7 +8,6 @@
5 "fmt"
6 "io"
7 "launchpad.net/juju-core/charm"
8- "launchpad.net/juju-core/log"
9 "launchpad.net/juju-core/state"
10 unitdebug "launchpad.net/juju-core/worker/uniter/debug"
11 "launchpad.net/juju-core/worker/uniter/jujuc"
12@@ -153,7 +152,7 @@
13 env := ctx.hookVars(charmDir, toolsDir, socketPath)
14 debugctx := unitdebug.NewHooksContext(ctx.unit.Name())
15 if session, _ := debugctx.FindSession(); session != nil && session.MatchHook(hookName) {
16- log.Infof("worker/uniter: executing %s via debug-hooks", hookName)
17+ logger.Infof("executing %s via debug-hooks", hookName)
18 err = session.RunHook(hookName, charmDir, env)
19 } else {
20 err = runCharmHook(hookName, charmDir, env)
21@@ -166,7 +165,7 @@
22 "could not write settings from %q to relation %d: %v",
23 hookName, id, e,
24 )
25- log.Errorf("worker/uniter: %v", e)
26+ logger.Errorf("%v", e)
27 if err == nil {
28 err = e
29 }
30@@ -187,21 +186,21 @@
31 }
32 ps.Stdout = outWriter
33 ps.Stderr = outWriter
34- logger := &hookLogger{
35+ hookLogger := &hookLogger{
36 r: outReader,
37 done: make(chan struct{}),
38 }
39- go logger.run()
40+ go hookLogger.run()
41 err = ps.Start()
42 outWriter.Close()
43 if err == nil {
44 err = ps.Wait()
45 }
46- logger.stop()
47+ hookLogger.stop()
48 if ee, ok := err.(*exec.Error); ok && err != nil {
49 if os.IsNotExist(ee.Err) {
50 // Missing hook is perfectly valid, but worth mentioning.
51- log.Infof("worker/uniter: skipped %q hook (not implemented)", hookName)
52+ logger.Infof("skipped %q hook (not implemented)", hookName)
53 return nil
54 }
55 }
56@@ -223,7 +222,7 @@
57 line, _, err := br.ReadLine()
58 if err != nil {
59 if err != io.EOF {
60- log.Errorf("worker/uniter: cannot read hook output: %v", err)
61+ logger.Errorf("cannot read hook output: %v", err)
62 }
63 break
64 }
65@@ -232,7 +231,7 @@
66 l.mu.Unlock()
67 return
68 }
69- log.Infof("worker/uniter: HOOK %s", line)
70+ logger.Infof("HOOK %s", line)
71 l.mu.Unlock()
72 }
73 }
74
75=== modified file 'worker/uniter/filter.go'
76--- worker/uniter/filter.go 2013-08-02 12:37:43 +0000
77+++ worker/uniter/filter.go 2013-08-06 01:46:28 +0000
78@@ -5,16 +5,20 @@
79
80 import (
81 "fmt"
82+ "sort"
83+
84+ "launchpad.net/loggo"
85+
86 "launchpad.net/juju-core/charm"
87 "launchpad.net/juju-core/errors"
88- "launchpad.net/juju-core/log"
89 "launchpad.net/juju-core/state"
90 "launchpad.net/juju-core/state/watcher"
91 "launchpad.net/juju-core/worker"
92 "launchpad.net/tomb"
93- "sort"
94 )
95
96+var filterLogger = loggo.GetLogger("juju.worker.uniter.filter")
97+
98 // filter collects unit, service, and service config information from separate
99 // state watchers, and presents it as events on channels designed specifically
100 // for the convenience of the uniter.
101@@ -108,7 +112,7 @@
102 go func() {
103 defer f.tomb.Done()
104 err := f.loop(unitName)
105- log.Errorf("worker/uniter/filter: %v", err)
106+ filterLogger.Errorf("%v", err)
107 f.tomb.Kill(err)
108 }()
109 return f, nil
110@@ -217,7 +221,7 @@
111 case <-f.tomb.Dying():
112 return tomb.ErrDying
113 case <-f.didClearResolved:
114- log.Debugf("resolved clear completed")
115+ filterLogger.Debugf("resolved clear completed")
116 return nil
117 }
118 }
119@@ -282,7 +286,7 @@
120
121 // Handle watcher changes.
122 case _, ok = <-unitw.Changes():
123- log.Debugf("worker/uniter/filter: got unit change")
124+ filterLogger.Debugf("got unit change")
125 if !ok {
126 return watcher.MustErr(unitw)
127 }
128@@ -290,7 +294,7 @@
129 return err
130 }
131 case _, ok = <-servicew.Changes():
132- log.Debugf("worker/uniter/filter: got service change")
133+ filterLogger.Debugf("got service change")
134 if !ok {
135 return watcher.MustErr(servicew)
136 }
137@@ -298,15 +302,15 @@
138 return err
139 }
140 case _, ok = <-configChanges:
141- log.Debugf("worker/uniter/filter: got config change")
142+ filterLogger.Debugf("got config change")
143 if !ok {
144 return watcher.MustErr(configw)
145 }
146- log.Debugf("worker/uniter/filter: preparing new config event")
147+ filterLogger.Debugf("preparing new config event")
148 f.outConfig = f.outConfigOn
149 discardConfig = f.discardConfig
150 case keys, ok := <-relationsw.Changes():
151- log.Debugf("worker/uniter/filter: got relations change")
152+ filterLogger.Debugf("got relations change")
153 if !ok {
154 return watcher.MustErr(relationsw)
155 }
156@@ -325,22 +329,22 @@
157
158 // Send events on active out chans.
159 case f.outUpgrade <- f.upgrade:
160- log.Debugf("worker/uniter/filter: sent upgrade event")
161+ filterLogger.Debugf("sent upgrade event")
162 f.outUpgrade = nil
163 case f.outResolved <- f.resolved:
164- log.Debugf("worker/uniter/filter: sent resolved event")
165+ filterLogger.Debugf("sent resolved event")
166 f.outResolved = nil
167 case f.outConfig <- nothing:
168- log.Debugf("worker/uniter/filter: sent config event")
169+ filterLogger.Debugf("sent config event")
170 f.outConfig = nil
171 case f.outRelations <- f.relations:
172- log.Debugf("worker/uniter/filter: sent relations event")
173+ filterLogger.Debugf("sent relations event")
174 f.outRelations = nil
175 f.relations = nil
176
177 // Handle explicit requests.
178 case curl := <-f.setCharm:
179- log.Debugf("worker/uniter/filter: changing charm to %q", curl)
180+ filterLogger.Debugf("changing charm to %q", curl)
181 // We need to restart the config watcher after setting the
182 // charm, because service config settings are distinct for
183 // different service charms.
184@@ -350,7 +354,7 @@
185 }
186 }
187 if err := f.unit.SetCharmURL(curl); err != nil {
188- log.Debugf("worker/uniter/filter: failed setting charm url %q: %v", curl, err)
189+ filterLogger.Debugf("failed setting charm url %q: %v", curl, err)
190 return err
191 }
192 select {
193@@ -375,18 +379,18 @@
194 return err
195 }
196 case force := <-f.wantForcedUpgrade:
197- log.Debugf("worker/uniter/filter: want forced upgrade %v", force)
198+ filterLogger.Debugf("want forced upgrade %v", force)
199 f.upgradeFrom.force = force
200 if err = f.upgradeChanged(); err != nil {
201 return err
202 }
203 case <-f.wantResolved:
204- log.Debugf("worker/uniter/filter: want resolved event")
205+ filterLogger.Debugf("want resolved event")
206 if f.resolved != state.ResolvedNone {
207 f.outResolved = f.outResolvedOn
208 }
209 case <-f.clearResolved:
210- log.Debugf("worker/uniter/filter: resolved event handled")
211+ filterLogger.Debugf("resolved event handled")
212 f.outResolved = nil
213 if err := f.unit.ClearResolved(); err != nil {
214 return err
215@@ -400,7 +404,7 @@
216 case f.didClearResolved <- nothing:
217 }
218 case <-discardConfig:
219- log.Debugf("worker/uniter/filter: discarded config event")
220+ filterLogger.Debugf("discarded config event")
221 f.outConfig = nil
222 }
223 }
224@@ -417,11 +421,11 @@
225 if f.life != f.unit.Life() {
226 switch f.life = f.unit.Life(); f.life {
227 case state.Dying:
228- log.Noticef("worker/uniter/filter: unit is dying")
229+ filterLogger.Infof("unit is dying")
230 close(f.outUnitDying)
231 f.outUpgrade = nil
232 case state.Dead:
233- log.Noticef("worker/uniter/filter: unit is dead")
234+ filterLogger.Infof("unit is dead")
235 return worker.ErrTerminateAgent
236 }
237 }
238@@ -460,18 +464,18 @@
239 // delivered as upgrades.
240 func (f *filter) upgradeChanged() (err error) {
241 if f.life != state.Alive {
242- log.Debugf("worker/uniter/filter: charm check skipped, unit is dying")
243+ filterLogger.Debugf("charm check skipped, unit is dying")
244 f.outUpgrade = nil
245 return nil
246 }
247 if f.upgradeFrom.url == nil {
248- log.Debugf("worker/uniter/filter: charm check skipped, not yet installed.")
249+ filterLogger.Debugf("charm check skipped, not yet installed.")
250 f.outUpgrade = nil
251 return nil
252 }
253 if *f.upgradeAvailable.url != *f.upgradeFrom.url {
254 if f.upgradeAvailable.force || !f.upgradeFrom.force {
255- log.Debugf("worker/uniter/filter: preparing new upgrade event")
256+ filterLogger.Debugf("preparing new upgrade event")
257 if f.upgrade == nil || *f.upgrade != *f.upgradeAvailable.url {
258 f.upgrade = f.upgradeAvailable.url
259 }
260@@ -479,7 +483,7 @@
261 return nil
262 }
263 }
264- log.Debugf("worker/uniter/filter: no new charm event")
265+ filterLogger.Debugf("no new charm event")
266 f.outUpgrade = nil
267 return nil
268 }
269
270=== modified file 'worker/uniter/modes.go'
271--- worker/uniter/modes.go 2013-08-02 12:37:43 +0000
272+++ worker/uniter/modes.go 2013-08-06 01:46:28 +0000
273@@ -10,7 +10,6 @@
274 "launchpad.net/juju-core/charm/hooks"
275 "launchpad.net/juju-core/environs"
276 "launchpad.net/juju-core/errors"
277- "launchpad.net/juju-core/log"
278 "launchpad.net/juju-core/state"
279 "launchpad.net/juju-core/state/api/params"
280 "launchpad.net/juju-core/state/watcher"
281@@ -27,7 +26,7 @@
282 // ModeInit is the initial Uniter mode.
283 func ModeInit(u *Uniter) (next Mode, err error) {
284 defer modeContext("ModeInit", &err)()
285- log.Infof("worker/uniter: updating unit addresses")
286+ logger.Infof("updating unit addresses")
287 cfg, err := u.st.EnvironConfig()
288 if err != nil {
289 return nil, err
290@@ -46,7 +45,7 @@
291 } else if err = u.unit.SetPublicAddress(public); err != nil {
292 return nil, err
293 }
294- log.Infof("reconciling relation state")
295+ logger.Infof("reconciling relation state")
296 if err := u.restoreRelations(); err != nil {
297 return nil, err
298 }
299@@ -59,10 +58,10 @@
300
301 // If we haven't yet loaded state, do so.
302 if u.s == nil {
303- log.Infof("loading uniter state")
304+ logger.Infof("loading uniter state")
305 if u.s, err = u.sf.Read(); err == ErrNoStateFile {
306 // When no state exists, start from scratch.
307- log.Infof("worker/uniter: charm is not deployed")
308+ logger.Infof("charm is not deployed")
309 curl, _ := u.service.CharmURL()
310 return ModeInstalling(curl), nil
311 } else if err != nil {
312@@ -73,7 +72,7 @@
313 // Filter out states not related to charm deployment.
314 switch u.s.Op {
315 case Continue:
316- log.Infof("worker/uniter: continuing after %q hook", u.s.Hook.Kind)
317+ logger.Infof("continuing after %q hook", u.s.Hook.Kind)
318 switch u.s.Hook.Kind {
319 case hooks.Stop:
320 return ModeTerminating, nil
321@@ -90,30 +89,30 @@
322 return ModeAbide, nil
323 case RunHook:
324 if u.s.OpStep == Queued {
325- log.Infof("worker/uniter: found queued %q hook", u.s.Hook.Kind)
326+ logger.Infof("found queued %q hook", u.s.Hook.Kind)
327 if err = u.runHook(*u.s.Hook); err != nil && err != errHookFailed {
328 return nil, err
329 }
330 return ModeContinue, nil
331 }
332 if u.s.OpStep == Done {
333- log.Infof("worker/uniter: found uncommitted %q hook", u.s.Hook.Kind)
334+ logger.Infof("found uncommitted %q hook", u.s.Hook.Kind)
335 if err = u.commitHook(*u.s.Hook); err != nil {
336 return nil, err
337 }
338 return ModeContinue, nil
339 }
340- log.Infof("worker/uniter: awaiting error resolution for %q hook", u.s.Hook.Kind)
341+ logger.Infof("awaiting error resolution for %q hook", u.s.Hook.Kind)
342 return ModeHookError, nil
343 }
344
345 // Resume interrupted deployment operations.
346 curl := u.s.CharmURL
347 if u.s.Op == Install {
348- log.Infof("worker/uniter: resuming charm install")
349+ logger.Infof("resuming charm install")
350 return ModeInstalling(curl), nil
351 } else if u.s.Op == Upgrade {
352- log.Infof("worker/uniter: resuming charm upgrade")
353+ logger.Infof("resuming charm upgrade")
354 return ModeUpgrading(curl), nil
355 }
356 panic(fmt.Errorf("unhandled uniter operation %q", u.s.Op))
357@@ -402,9 +401,9 @@
358 // modeContext returns a function that implements logging and common error
359 // manipulation for Mode funcs.
360 func modeContext(name string, err *error) func() {
361- log.Infof("worker/uniter: %s starting", name)
362+ logger.Infof("%s starting", name)
363 return func() {
364- log.Debugf("worker/uniter: %s exiting", name)
365+ logger.Debugf("%s exiting", name)
366 switch *err {
367 case nil, tomb.ErrDying, worker.ErrTerminateAgent:
368 default:
369
370=== modified file 'worker/uniter/uniter.go'
371--- worker/uniter/uniter.go 2013-08-02 12:37:43 +0000
372+++ worker/uniter/uniter.go 2013-08-06 01:46:28 +0000
373@@ -12,6 +12,7 @@
374 "strings"
375 "time"
376
377+ "launchpad.net/loggo"
378 "launchpad.net/tomb"
379
380 "launchpad.net/juju-core/agent/tools"
381@@ -19,7 +20,6 @@
382 "launchpad.net/juju-core/charm/hooks"
383 "launchpad.net/juju-core/cmd"
384 "launchpad.net/juju-core/errors"
385- "launchpad.net/juju-core/log"
386 "launchpad.net/juju-core/state"
387 "launchpad.net/juju-core/state/watcher"
388 "launchpad.net/juju-core/utils"
389@@ -30,6 +30,8 @@
390 "launchpad.net/juju-core/worker/uniter/relation"
391 )
392
393+var logger = loggo.GetLogger("juju.worker.uniter")
394+
395 // Uniter implements the capabilities of the unit agent. It is not intended to
396 // implement the actual *behaviour* of the unit agent; that responsibility is
397 // delegated to Mode values, which are expected to react to events and direct
398@@ -78,7 +80,7 @@
399 if err = u.init(name); err != nil {
400 return err
401 }
402- log.Noticef("worker/uniter: unit %q started", u.unit)
403+ logger.Infof("unit %q started", u.unit)
404
405 // Start filtering state change events for consumption by modes.
406 u.f, err = newFilter(u.st, name)
407@@ -107,7 +109,7 @@
408 mode, err = mode(u)
409 }
410 }
411- log.Noticef("worker/uniter: unit %q shutting down: %s", u.unit, err)
412+ logger.Infof("unit %q shutting down: %s", u.unit, err)
413 return err
414 }
415
416@@ -225,7 +227,7 @@
417 }
418 if u.s == nil || u.s.OpStep != Done {
419 // Get the new charm bundle before announcing intention to use it.
420- log.Infof("worker/uniter: fetching charm %q", curl)
421+ logger.Infof("fetching charm %q", curl)
422 sch, err := u.st.Charm(curl)
423 if err != nil {
424 return err
425@@ -248,7 +250,7 @@
426 if err := u.unit.Refresh(); err != nil {
427 return err
428 }
429- log.Infof("worker/uniter: deploying charm %q", curl)
430+ logger.Infof("deploying charm %q", curl)
431 if err = u.writeState(reason, Pending, hi, curl); err != nil {
432 return err
433 }
434@@ -259,7 +261,7 @@
435 return err
436 }
437 }
438- log.Infof("worker/uniter: charm %q is deployed", curl)
439+ logger.Infof("charm %q is deployed", curl)
440 status := Queued
441 if hi != nil {
442 // If a hook operation was interrupted, restore it.
443@@ -347,22 +349,22 @@
444 if err := u.writeState(RunHook, Pending, &hi, nil); err != nil {
445 return err
446 }
447- log.Infof("worker/uniter: running %q hook", hookName)
448+ logger.Infof("running %q hook", hookName)
449 if err := hctx.RunHook(hookName, u.charm.Path(), u.toolsDir, socketPath); err != nil {
450- log.Errorf("worker/uniter: hook failed: %s", err)
451+ logger.Errorf("hook failed: %s", err)
452 return errHookFailed
453 }
454 if err := u.writeState(RunHook, Done, &hi, nil); err != nil {
455 return err
456 }
457- log.Infof("worker/uniter: ran %q hook", hookName)
458+ logger.Infof("ran %q hook", hookName)
459 return u.commitHook(hi)
460 }
461
462 // commitHook ensures that state is consistent with the supplied hook, and
463 // that the fact of the hook's completion is persisted.
464 func (u *Uniter) commitHook(hi hook.Info) error {
465- log.Infof("worker/uniter: committing %q hook", hi.Kind)
466+ logger.Infof("committing %q hook", hi.Kind)
467 if hi.Kind.IsRelation() {
468 if err := u.relationers[hi.RelationId].CommitHook(hi); err != nil {
469 return err
470@@ -380,7 +382,7 @@
471 if err := u.writeState(Continue, Pending, &hi, nil); err != nil {
472 return err
473 }
474- log.Infof("worker/uniter: committed %q hook", hi.Kind)
475+ logger.Infof("committed %q hook", hi.Kind)
476 return nil
477 }
478
479@@ -457,7 +459,7 @@
480 if ep, err := rel.Endpoint(u.unit.ServiceName()); err != nil {
481 return nil, err
482 } else if !ep.ImplementedBy(ch) {
483- log.Warningf("worker/uniter: skipping relation with unknown endpoint %q", ep)
484+ logger.Warningf("skipping relation with unknown endpoint %q", ep)
485 continue
486 }
487 dir, err := relation.ReadStateDir(u.relationsDir, id)
488@@ -501,7 +503,7 @@
489 // addRelation causes the unit agent to join the supplied relation, and to
490 // store persistent state in the supplied dir.
491 func (u *Uniter) addRelation(rel *state.Relation, dir *relation.StateDir) error {
492- log.Infof("worker/uniter: joining relation %q", rel)
493+ logger.Infof("joining relation %q", rel)
494 ru, err := rel.Unit(u.unit)
495 if err != nil {
496 return err
497@@ -518,12 +520,12 @@
498 return watcher.MustErr(w)
499 }
500 if err := r.Join(); err == state.ErrCannotEnterScopeYet {
501- log.Infof("worker/uniter: cannot enter scope for relation %q; waiting for subordinate to be removed", rel)
502+ logger.Infof("cannot enter scope for relation %q; waiting for subordinate to be removed", rel)
503 continue
504 } else if err != nil {
505 return err
506 }
507- log.Infof("worker/uniter: joined relation %q", rel)
508+ logger.Infof("joined relation %q", rel)
509 u.relationers[rel.Id()] = r
510 return nil
511 }
512
513=== modified file 'worker/uniter/uniter_test.go'
514--- worker/uniter/uniter_test.go 2013-08-02 12:37:43 +0000
515+++ worker/uniter/uniter_test.go 2013-08-06 01:46:28 +0000
516@@ -77,6 +77,8 @@
517
518 func (s *UniterSuite) TearDownSuite(c *C) {
519 os.Setenv("LC_ALL", s.oldLcAll)
520+ s.HTTPSuite.TearDownSuite(c)
521+ s.JujuConnSuite.TearDownSuite(c)
522 }
523
524 func (s *UniterSuite) SetUpTest(c *C) {
525@@ -180,7 +182,7 @@
526 ctx.uuid,
527 )
528 // donePattern matches uniter logging that indicates a hook has run.
529- donePattern := `^.* (INFO|ERROR) juju worker/uniter: (ran "[a-z0-9-]+" hook|hook failed)`
530+ donePattern := `^.* (INFO|ERROR) juju\.worker\.uniter (ran "[a-z0-9-]+" hook|hook failed)`
531 hookRegexp := regexp.MustCompile(hookPattern)
532 doneRegexp := regexp.MustCompile(donePattern)
533

Subscribers

People subscribed via source and target branches

to status/vote changes: