Thanks,  I'm trying to log the user name.  I am not using Tomcat for
authentication and I need that info in my access logs.  Perhaps I will
create a new attribute to hold that value rather than accessing the
object I have in session and calling toString.

On that note if I know the username, is it possible to somehow inject
it so that Tomcat logs it using the %u pattern. Previously we used
Tomcats built in authentication but we recently switched to Spring
Security.  If I could still use %u, then I could use the 'common'
pattern and in turn use FastCommonAccessLogValve.  If not I will use
the HTTP Session.

Thanks,

Rich

On Thu, Sep 29, 2011 at 1:34 PM, Christopher Schultz
<ch...@christopherschultz.net> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Rich,
>
> On 9/29/2011 9:18 AM, Richard Sayre wrote:
>> I am logging all local host access using the following config:
>>
>> <Valve className="org.apache.catalina.valves.AccessLogValve"
>> directory="logs" prefix="localhost_access_log." suffix=".txt"
>> pattern='%h %l %u %{userObject}s %t "%r" %s %b'
>> resolveHosts="false"/>
>>
>>
>> The userObject HttpSession attribute is a Java Object and right now
>> it is logging it by calling its toString method.
>
> Right.
>
>> I wanted to log a specific property of that object (userId) so I
>> tried %{userObject.userId}s but that did not print anything.
>
> Right. It's looking for an object in the session with the key
> "userObject.userId", rather than doing what you expect, which is to
> get "userObject" and then call "getUserId" on it with no arguments.
> AccessLogValve doesn't do that kind of thing: it's not very smart.
> (It's nice and fast, though).
>
>> Is it possible to log properties of an object that is in session?
>
> Not with the current code: you'd have to modify the AccessLogValve.
>
>> I can add the information to the toString method but I want avoid
>> that for now (I would have to re check the whole application 1500+
>> pages to make sure that it is not called anywhere else).
>
> Honestly, no code should be depending on the return value of toString
> on any complex object. I'm not saying it doesn't happen... I'm just
> saying that it /shouldn't/ happen.
>
> Adding such a feature to AccessLogValve is certainly possible, but I'm
> sure that it won't be added to the "%{...}s" syntax because of the
> overhead of parsing the {...} to determine how to dereference and
> navigate the object tree, etc. Such code exists: it's available
> through any number of libraries and the syntax all looks the same or
> similar (Java EL, etc.): it just needs to be configured to do that.
>
> I'd be in support of a *new* escape sequence that would support this
> kind of thing because I think it would be useful but it needs to be
> distinct from the existing one so that it doesn't kill performance for
> everyone who is already using it. To be sure, AccessLogValve is
> intended to be run for every request, so speed is of the essence :)
>
> Patches are always welcome.
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iEYEARECAAYFAk6ElvQACgkQ9CaO5/Lv0PBiuQCfUErS2/N6sbJ/CgfYPmc3CSZY
> ZhAAoLayLJI66d35xwsla/Y8lUboTcco
> =K166
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to