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