From: Gangemi, J. <Jae...@bm...> - 2012-04-17 21:23:52
|
hello - i'm currently running log4perl inside an embedded instance, for all intents and purposes, you could say it's an environment similar to mod_perl. while the system is running, i would like to send a command that changes the log level of either the root logger or against one of the logger categories (and potentially dynamically adding an appender so i can log to a separate file. the problem i am having the log level does not persist between calls into the system. i can make a call in and change the log level (and log a message at the new level to make sure it worked) but on a subsequent call, the log level has been reset to what log4perl was originally initialized with, i.e.: $logger = Log::Log4perl->get_logger(""); $logger->fatal("fatal message"); $logger->trace("trace message, should not see"); $logger->level($TRACE); $logger->level("trace message, should see"); am i missing something w/ this idea or will i need to re-initialize log4perl w/ a new configuration in order to make this work? thanks! -- -jae |
From: Mike S. <m...@pe...> - 2012-04-18 02:07:29
|
On Tue, 17 Apr 2012, Gangemi, Jae wrote: > am i missing something w/ this idea or will i need to re-initialize > log4perl w/ a new configuration in order to make this work? You're not saying how your call into the system works, I presume that you're using a signal handler or some such to run a function that manipulates the logger on a received signal. Then, somehow Log4perl gets reinitialized by calling init() and it's back to normal. With mod_perl, this happens e.g. when Apache starts a new child process, I suspect something similar is happening in your embedded system. I wonder why you're not simply using init_and_watch() and modify the external config file to regularly check and reload it? -- -- Mike Mike Schilli m...@pe... > hello - > > i'm currently running log4perl inside an embedded instance, for all > intents and purposes, you could say it's an environment similar to > mod_perl. > > while the system is running, i would like to send a command that changes > the log level of either the root logger or against one of the logger > categories (and potentially dynamically adding an appender so i can log to > a separate file. > > the problem i am having the log level does not persist between calls > into the system. i can make a call in and change the log level (and log a > message at the new level to make sure it worked) but on a subsequent call, > the log level has been reset to what log4perl was originally initialized > with, i.e.: > > $logger = Log::Log4perl->get_logger(""); > > $logger->fatal("fatal message"); > $logger->trace("trace message, should not see"); > > $logger->level($TRACE); > $logger->level("trace message, should see"); > |
From: Gangemi, J. <Jae...@bm...> - 2012-04-18 15:09:13
|
actually, no - the call into the system could be considered the equivalent of running a cgi script inside of mod_perl, there is no signal handler involved, but i now realize my original approach just isn't going to work. the reason i'm not using 'init_and_watch()' is b/c we embed the configuration file inside the code base (which is contained in a custom, encrypted archive) and 'init_and_watch' only works w/ an external file, but in order to make this work, i think i'm going to have to use some kind of external configuration file or change how 'init_and_watch' works locally. thanks! -- -jae On 4/17/12 9:46 PM, "Mike Schilli" <m...@pe...> wrote: >On Tue, 17 Apr 2012, Gangemi, Jae wrote: > >> am i missing something w/ this idea or will i need to re-initialize >> log4perl w/ a new configuration in order to make this work? > >You're not saying how your call into the system works, I presume that >you're using a signal handler or some such to run a function that >manipulates the logger on a received signal. Then, somehow Log4perl gets >reinitialized by calling init() and it's back to normal. With mod_perl, >this happens e.g. when Apache starts a new child process, I suspect >something similar is happening in your embedded system. > >I wonder why you're not simply using init_and_watch() and modify the >external config file to regularly check and reload it? > >-- >-- Mike > >Mike Schilli >m...@pe... > >> hello - >> >> i'm currently running log4perl inside an embedded instance, for all >> intents and purposes, you could say it's an environment similar to >> mod_perl. >> >> while the system is running, i would like to send a command that >>changes >> the log level of either the root logger or against one of the logger >> categories (and potentially dynamically adding an appender so i can log >>to >> a separate file. >> >> the problem i am having the log level does not persist between calls >> into the system. i can make a call in and change the log level (and log >>a >> message at the new level to make sure it worked) but on a subsequent >>call, >> the log level has been reset to what log4perl was originally initialized >> with, i.e.: >> >> $logger = Log::Log4perl->get_logger(""); >> >> $logger->fatal("fatal message"); >> $logger->trace("trace message, should not see"); >> >> $logger->level($TRACE); >> $logger->level("trace message, should see"); >> |
From: Mike S. <m...@pe...> - 2012-04-18 15:30:06
|
On Wed, 18 Apr 2012, Gangemi, Jae wrote: > actually, no - the call into the system could be considered the > equivalent of running a cgi script inside of mod_perl, there is no signal > handler involved, but i now realize my original approach just isn't going > to work. I see, and the reset to the old configuration is related to something within the system calling Log4perl's init()? -- -- Mike Mike Schilli m...@pe... > the reason i'm not using 'init_and_watch()' is b/c we embed the > configuration file inside the code base (which is contained in a custom, > encrypted archive) and 'init_and_watch' only works w/ an external file, > but in order to make this work, i think i'm going to have to use some kind > of external configuration file or change how 'init_and_watch' works > locally. > > thanks! > > -- > -jae > > > > > On 4/17/12 9:46 PM, "Mike Schilli" <m...@pe...> wrote: > >> On Tue, 17 Apr 2012, Gangemi, Jae wrote: >> >>> am i missing something w/ this idea or will i need to re-initialize >>> log4perl w/ a new configuration in order to make this work? >> >> You're not saying how your call into the system works, I presume that >> you're using a signal handler or some such to run a function that >> manipulates the logger on a received signal. Then, somehow Log4perl gets >> reinitialized by calling init() and it's back to normal. With mod_perl, >> this happens e.g. when Apache starts a new child process, I suspect >> something similar is happening in your embedded system. >> >> I wonder why you're not simply using init_and_watch() and modify the >> external config file to regularly check and reload it? >> >> -- >> -- Mike >> >> Mike Schilli >> m...@pe... >> >>> hello - >>> >>> i'm currently running log4perl inside an embedded instance, for all >>> intents and purposes, you could say it's an environment similar to >>> mod_perl. >>> >>> while the system is running, i would like to send a command that >>> changes >>> the log level of either the root logger or against one of the logger >>> categories (and potentially dynamically adding an appender so i can log >>> to >>> a separate file. >>> >>> the problem i am having the log level does not persist between calls >>> into the system. i can make a call in and change the log level (and log >>> a >>> message at the new level to make sure it worked) but on a subsequent >>> call, >>> the log level has been reset to what log4perl was originally initialized >>> with, i.e.: >>> >>> $logger = Log::Log4perl->get_logger(""); >>> >>> $logger->fatal("fatal message"); >>> $logger->trace("trace message, should not see"); >>> >>> $logger->level($TRACE); >>> $logger->level("trace message, should see"); >>> > > |
From: Gangemi, J. <Jae...@bm...> - 2012-04-18 16:18:20
|
that was the idea, but now i see that's not going to work. originally i just wanted to change the log level on the root logger, which actually did persist (i was dumb and spaced the fact that i was bypassing the embedded perl engine when i was testing), but that only affected the one interpreter instance and there are many sitting in a shared pool, so that doesn't really help my needs. it seems at this point, my best approach would be to figure out a way to have the configuration be external and then use the 'init_and_watch()' approach, sending a HUP to cause the configuration to be re-read. -- -jae On 4/18/12 11:29 AM, "Mike Schilli" <m...@pe...> wrote: >On Wed, 18 Apr 2012, Gangemi, Jae wrote: > >> actually, no - the call into the system could be considered the >> equivalent of running a cgi script inside of mod_perl, there is no >>signal >> handler involved, but i now realize my original approach just isn't >>going >> to work. > >I see, and the reset to the old configuration is related to something >within the system calling Log4perl's init()? > >-- >-- Mike > >Mike Schilli >m...@pe... > >> the reason i'm not using 'init_and_watch()' is b/c we embed the >> configuration file inside the code base (which is contained in a custom, >> encrypted archive) and 'init_and_watch' only works w/ an external file, >> but in order to make this work, i think i'm going to have to use some >>kind >> of external configuration file or change how 'init_and_watch' works >> locally. >> >> thanks! >> >> -- >> -jae >> >> >> >> >> On 4/17/12 9:46 PM, "Mike Schilli" <m...@pe...> wrote: >> >>> On Tue, 17 Apr 2012, Gangemi, Jae wrote: >>> >>>> am i missing something w/ this idea or will i need to re-initialize >>>> log4perl w/ a new configuration in order to make this work? >>> >>> You're not saying how your call into the system works, I presume that >>> you're using a signal handler or some such to run a function that >>> manipulates the logger on a received signal. Then, somehow Log4perl >>>gets >>> reinitialized by calling init() and it's back to normal. With mod_perl, >>> this happens e.g. when Apache starts a new child process, I suspect >>> something similar is happening in your embedded system. >>> >>> I wonder why you're not simply using init_and_watch() and modify the >>> external config file to regularly check and reload it? >>> >>> -- >>> -- Mike >>> >>> Mike Schilli >>> m...@pe... >>> >>>> hello - >>>> >>>> i'm currently running log4perl inside an embedded instance, for all >>>> intents and purposes, you could say it's an environment similar to >>>> mod_perl. >>>> >>>> while the system is running, i would like to send a command that >>>> changes >>>> the log level of either the root logger or against one of the logger >>>> categories (and potentially dynamically adding an appender so i can >>>>log >>>> to >>>> a separate file. >>>> >>>> the problem i am having the log level does not persist between calls >>>> into the system. i can make a call in and change the log level (and >>>>log >>>> a >>>> message at the new level to make sure it worked) but on a subsequent >>>> call, >>>> the log level has been reset to what log4perl was originally >>>>initialized >>>> with, i.e.: >>>> >>>> $logger = Log::Log4perl->get_logger(""); >>>> >>>> $logger->fatal("fatal message"); >>>> $logger->trace("trace message, should not see"); >>>> >>>> $logger->level($TRACE); >>>> $logger->level("trace message, should see"); >>>> >> >> |