indexing description: "producer, that creates log messages and sets severity levels. " library: "elogger" copyright: "Copyright (c) 2006, AXA Rosenberg, and others (see copyright.txt)" author: "Ulrich Weiss, and others" license: "Eiffel Forum License v2 (see forum.txt)" date: "$Date: $" revision: "$Revision: $" archive: "$Archive: $" class ELOG_TEST_PRODUCER inherit THREAD ELOG_SEVERITY_CONSTANTS ELOG_SHARED_HIERARCHY creation make feature {NONE} -- Initialization make (h: ELOG_HIERARCHY; i: INTEGER; a: ELOG_APPENDER) is -- creation procedure require h_not_void: h /= Void a_not_void: a /= Void do hierarchy := h id := i create loggers.make (1,4) loggers.put (h.root, 1) loggers.put (h.logger ("a"), 2) loggers.put (h.logger ("a.b"), 3) loggers.put (h.logger ("a.b.c"), 4) appender := a end feature -- Access count: INTEGER_64 -- how many logs has this producer created? id: INTEGER -- id of this thread suspend is -- suspend thread do done := True end feature {NONE} -- Implementation execute is -- execute local i: INTEGER do from until done loop count := count + 1 do_random_task i := i + 1 end end do_random_task is -- 95% log something -- 4.45% change severity level of root, a, a.b or a.b.c -- 0.95% switch from async to sync (or the other way) local i: INTEGER logger: ELOG_LOGGER do rand.forth i := rand.item if i > rand.modulus*0.995 then -- switch synchronisity i := rand.item \\ 4 + 1 logger := loggers.item (i) rand.forth i := rand.item \\ 4 if i < 2 then appender.set_asynchronous elseif i = 2 then appender.set_synchronous_wait else appender.set_synchronous_force end elseif i > rand.modulus*0.95 then -- change severity i := rand.item \\ 4 + 1 logger := loggers.item (i) rand.forth if rand.item \\ 3 = 1 and i /= 1 then logger.set_severity (Void) else logger.set_severity (random_severity) end else -- log sth logger := loggers.item (rand.item \\ 4 + 1) logger.log (random_severity, create {ELOG_SIMPLE_EVENT}.make ("some event message from thread "+id.out)) end end rand: RANDOM is -- indexing once_status: global once create Result.make end random_severity: ELOG_SEVERITY is -- return random severity local sev: ELOG_SEVERITY_CONSTANTS i: INTEGER do rand.forth i := rand.item \\ 7 create sev if i = 0 then Result := sev.unknown_severity elseif i = 1 then Result := sev.harmless_severity elseif i = 2 then Result := sev.warning_severity elseif i = 3 then Result := sev.information_severity elseif i = 4 then Result := sev.critical_severity elseif i = 5 then Result := sev.minor_severity else Result := sev.fatal_severity end end hierarchy: ELOG_HIERARCHY -- logging hierarchy loggers: ARRAY [ELOG_LOGGER] -- loggers from root to root.a.b.c appender: ELOG_APPENDER -- the attached appender done: BOOLEAN -- used to leave the loop end