And JMS is a fine solution if you can use JMS. But if you aren't using
J2EE, you can't use JMS. Running tomcat/apache as an app server lends
itself to not knowing which host the message came from. Surely I'm not the
only one with a central repository of logs coming from various hosts who
can't use JMS?

To me, hostname is simple and obvious. It's up there with thread name and
class name as fundamental information to be present in a log. Username, and
session id are J2EE-specific concepts. Or more generally, they are concepts
that different app writers might interpret differently, and so they
shouldn't be in some canonical list of things you can log. But hostname?
Hostname is canonical. Everyone knows what it means, and everyone with a
remote configuration needs to know it. Thus, I think log4j should support
hostname retrieval natively.

dan





Ceki Gülcü <[EMAIL PROTECTED]> on 12/12/2002 12:52:44 PM

Please respond to "Log4J Developers List" <[EMAIL PROTECTED]>

To:    "Log4J Developers List" <[EMAIL PROTECTED]>
cc:

Subject:    RE: Hostname support in PatternLayout (patch included)


At 09:34 12.12.2002 -0800, you wrote:
>Dan,
>
>My only concern is the changing of LoggingEvent.  This object gets
>serialized across sockets from one log4j process to another, so
maintaining
>some level of compatibility between different log4j versions is important.
>Won't adding a new private member break serialization between versions?
>Anyone?

No, adding fields does not break backward compatibility in the sense that
clients version 'n' can send to server version 'n+1' where the difference
between n and n+1 is the addition of an extra field. I don't remember what
happens when n+1 sends to n.

>That being said, I do agree that this functionality is useful.  We have
>talked in the past about making changes in LoggingEvent that would make it
>incompatible with earlier versions, but much faster serialized and maybe
>more maintainable going forward.  Maybe v1.3 is the time to make the
change.

Why stop at hostname? What about username? Session id? Cookies? Address of
my dentist? You get the point. The JMS API solves this problem by having
properties attached to each message. See
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/jms/Message.html


>-Mark
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> > Sent: Thursday, December 12, 2002 8:34 AM
> > To: [EMAIL PROTECTED]
> > Subject: Hostname support in PatternLayout (patch included)
> >
> >
> >
> >
> > Hi.
> >
> > I sent this patch in on Friday. It modifies PatternLayout so it can
output
> > the hostname via %h. It seems like it's simple enough for a developer
to
> > say good idea/bad idea, but it has slipped through the cracks.
> > Therefore, I
> > am submitting it again.
> >
> > Thanks
> >
> > Dan
> >
> >
> > diff -ru
> > orig/src/java/org/apache/log4j/helpers/PatternParser.java
> > src/java/org/apache/log4j/helpers/PatternParser.java
> > --- orig/src/java/org/apache/log4j/helpers/PatternParser.java
> > 2002-10-09 18:50:03.000000000 -0400
> > +++ src/java/org/apache/log4j/helpers/PatternParser.java
> > 2002-12-05 12:19:13.000000000 -0500
> > @@ -56,6 +56,7 @@
> >    static final int LEVEL_CONVERTER = 2002;
> >    static final int NDC_CONVERTER = 2003;
> >    static final int MESSAGE_CONVERTER = 2004;
> > +  static final int HOSTNAME_CONVERTER = 2005;
> >
> >    int state;
> >    protected StringBuffer currentLiteral = new StringBuffer(32);
> > @@ -277,6 +278,12 @@
> >        //formattingInfo.dump();
> >        currentLiteral.setLength(0);
> >        break;
> > +    case 'h':
> > +      pc = new BasicPatternConverter(formattingInfo,
HOSTNAME_CONVERTER);
> > +      //LogLog.debug("Hostname converter.");
> > +      //formattingInfo.dump();
> > +      currentLiteral.setLength(0);
> > +      break;
> >      case 'l':
> >        pc = new LocationPatternConverter(formattingInfo,
> >                               FULL_LOCATION_CONVERTER);
> > @@ -391,6 +398,8 @@
> >       return event.getLevel().toString();
> >        case NDC_CONVERTER:
> >       return event.getNDC();
> > +      case HOSTNAME_CONVERTER:
> > +        return event.getHostname();
> >        case MESSAGE_CONVERTER: {
> >       return event.getRenderedMessage();
> >        }
> > diff -ru orig/src/java/org/apache/log4j/spi/LoggingEvent.java
> > src/java/org/apache/log4j/spi/LoggingEvent.java
> > --- orig/src/java/org/apache/log4j/spi/LoggingEvent.java
> > 2002-10-21 19:20:34.000000000 -0400
> > +++ src/java/org/apache/log4j/spi/LoggingEvent.java   2002-12-06
> > 11:03:44.000000000 -0500
> > @@ -102,6 +102,9 @@
> >    /** The name of thread in which this logging event was generated. */
> >    private String threadName;
> >
> > +  /** The name of the host on which this logging event was generated.
*/
> > +  private String hostName;
> > +
> >    /** This
> >        variable contains information about this event's throwable
> >    */
> > @@ -142,6 +145,13 @@
> >      this.categoryName = logger.getName();
> >      this.level = priority;
> >      this.message = message;
> > +
> > +    try {
> > +      this.hostName = java.net.InetAddress.getLocalHost().getHostName
();
> > +    } catch (java.net.UnknownHostException uhe) {
> > +      this.hostName = "*HOSTNAME UNKNOWN*";
> > +    }
> > +
> >      if (throwable != null) {
> >        this.throwableInfo = new ThrowableInformation(throwable);
> >      }
> > @@ -171,6 +181,13 @@
> >      this.categoryName = logger.getName();
> >      this.level = priority;
> >      this.message = message;
> > +
> > +    try {
> > +      this.hostName = java.net.InetAddress.getLocalHost().getHostName
();
> > +    } catch (java.net.UnknownHostException uhe) {
> > +      this.hostName = "*HOSTNAME UNKNOWN*";
> > +    }
> > +
> >      if (throwable != null) {
> >        this.throwableInfo = new ThrowableInformation(throwable);
> >      }
> > @@ -190,6 +207,13 @@
> >    }
> >
> >    /**
> > +   * Return the hostname of this event. Use this form instead of
directly
> > +   * accessing the <code>hostName</code> field. */
> > +  public String getHostname() {
> > +    return hostName;
> > +  }
> > +
> > +  /**
> >     * Return the level of this event. Use this form instead of directly
> >     * accessing the <code>level</code> field.  */
> >    public Level getLevel() {
> >
> >
> >
> > ------------------------------------------------------------------
> > -------------
> > This message and any included attachments are from Siemens
> > Medical Solutions
> > Health Services Corporation and are intended only for the addressee(s).
> > The information contained herein may include trade secrets or
> > privileged or
> > otherwise confidential information.  Unauthorized review,
> > forwarding, printing,
> > copying, distributing, or using such information is strictly
> > prohibited and may
> > be unlawful.  If you received this message in error, or have
> > reason to believe
> > you are not authorized to receive it, please promptly delete this
> > message and
> > notify the sender by e-mail with a copy to [EMAIL PROTECTED]  Thank
you
> >
> > --
> > To unsubscribe, e-mail:
><mailto:[EMAIL PROTECTED]>
>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]
>
>
>
>--
>To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]
>
>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]
>

--
Ceki



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>









-------------------------------------------------------------------------------
This message and any included attachments are from Siemens Medical Solutions 
Health Services Corporation and are intended only for the addressee(s).  
The information contained herein may include trade secrets or privileged or 
otherwise confidential information.  Unauthorized review, forwarding, printing, 
copying, distributing, or using such information is strictly prohibited and may 
be unlawful.  If you received this message in error, or have reason to believe 
you are not authorized to receive it, please promptly delete this message and 
notify the sender by e-mail with a copy to [EMAIL PROTECTED]  Thank you

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to