Thanks for the replies.  I'm not understanding Ceki's suggestion so I wrote
the attached applet to illustrate my misunderstanding.

here's the code:

public class AppletLogTest extends javax.swing.JApplet {

    public void init() {

        Logger root = Logger.getRootLogger();
       root.setLevel(Level.OFF);

      TestClass testClass=  new TestClass();

        getContentPane( ).add( new JLabel( "hello log4j mailing list!" ) );
    }

    class TestClass {
      Logger cat = Logger.getLogger( "TestClass" );
    }
}

When I run it, appletviewer writes this access denied error for the first
access to getRootLogger():
java.lang.ExceptionInInitializerError
        at org.apache.log4j.Logger.getRootLogger(Logger.java:104)
        at AppletLogTest.init(AppletLogTest.java:22)
        at sun.applet.AppletPanel.run(AppletPanel.java:374)
        at java.lang.Thread.run()V(Unknown Source)
Caused by: java.security.AccessControlException: access denied (
java.lang.Runtim
ePermission getClassLoader)
        at java.security.AccessControlContext.checkPermission
(AccessControlConte
xt.java:264)
        at java.security.AccessController.checkPermission(
AccessController.java:
427)
        at java.lang.SecurityManager.checkPermission(
Ljava.security.Permission;)
V(Unknown Source)
        at java.lang.ClassLoader.getSystemClassLoader
()Ljava.lang.ClassLoader;(U
nknown Source)
        at java.lang.ClassLoader.getSystemResource(Ljava.lang.String
;)Ljava.net.
URL;(Unknown Source)
        at org.apache.log4j.helpers.Loader.getResource(Loader.java:106)
        at org.apache.log4j.LogManager.<clinit>(LogManager.java:94)
        ... 4 more

It seems any reference to a Logger object creates a security violation.
Signing the applet might solve the problem.  But I prefer using basic log4j
techniques if possible.

Thanks again,

Jeff
On 2/21/06, Ceki Gülcü <[EMAIL PROTECTED]> wrote:
>
>
> Jeff,
>
> Have you considered using the basic techniques already offered by the
> log4j
> framework? For instance, you could configure log4j differently when
> running
> as an applet.
>
> In the init() method of your appplet, you could write:
>
>    Logger timestampLogger = Logger.getLogger("TimeStamp");
>    timestampLogger.setLevel(Level.OFF);
>
> You could even disable logging altogether
>
>    Logger root = Logger.getRootLogger();
>    root.setLevel(Level.OFF);
>
> I hope this helps,
>
> At 11:32 PM 2/20/2006, Jeff Drew wrote:
> >I'm converting my desktop application to an applet.  Due to browser
> >security, I can't read or write local files so I can neither use
> .properties
> >nor write logs.  My dilemma is rooted in reusable classes.  My desktop
> >application(now applet) uses some classes, such as a timeStamp class,
> that
> >are also used in my server.  I'd prefer to retain that class's logging
> >capability when it is running in the server, but disable the logging when
> >running in the applet.
> >
> >I see 3 alternatives:
> >1. move the logger instantiation to the constructor, then pass the
> >constructor a newly created boolean indicating whether it's running as an
> >applet.
> >2. subclass Logger, then have the subclass check some global boolean
> >indicating whether it's running as an applet
> >3. remove logging from the reused classes altogether
> >
> >I don't like any of these alternatives and wondered if there is another,
> >more appealing alternative.  Here's a simple example that illustrates my
> >problem.
> >
> >Thanks
> >
> >Jeff
> >
> >public class TimeStamp implements Serializable {
> >
> >// the following line will cause a security exception
> >     static Logger                         cat              =
> >Logger.getLogger( "TimeStamp" );
> >
> >    public TimeStamp( long milliSeconds ) {
> >
> >    }
> >}
>
> --
> Ceki Gülcü
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to