*[Just responding to Matt. I don't have an answer for Gary.]*

`JsonTemplateLayout` has `maxStringLength`, and related with it,
`truncatedStringSuffix`.

On Thu, Jan 25, 2024 at 9:45 PM Matt Sicker <m...@musigma.org> wrote:

> You can use the %maxLength{…}{N} pattern converter with PatternLayout at
> least. Unfortunately, I don’t think any other layouts support a similar
> option.
>
> > On Jan 25, 2024, at 10:55, Gary D. Gregory <ggreg...@apache.org> wrote:
> >
> > Hi All,
> >
> > I'd like to ask how to if we can devise advice around an issue I ran
> into this week.
> >
> > One of our test suites processes about 40K files of test fixtures. These
> inputs are parsed, processed, and asserted. This randomly fails on a call
> to Logger#debug(), randomly in that it happens usually once per build,
> somewhere in a logging call. But it usually fails with a call that looks
> like this:
> >
> > logger.debug("This is fun" + myFunObject);
> >
> > To simplify things, let's say that it turns out that after an underlying
> third party jar file version upgrade the call to myFunObject#toString() no
> longer returns Object#toString() but rather (again to simplify) the
> contents of the file that was parsed to create myFunObject. This toString()
> can be megabytes. The solution is obvious:
> >
> > logger.debug("This is fun", myFunObject::toString)
> >
> > And our CI builds no longer randomly fail since our default logging does
> not log at the debug level.
> >
> > A better solution could be:
> >
> > logger.debug("This is fun", () -> myFunObject.toString().substring(0,
> 100))
> >
> > where I still want _some_ information better than making my own
> toString() with System#identityHashCode(Object) or somesuch. Sure,
> .toString() is still called but it does not make it down into logging. In
> my case the OOME happened in myFunObject::toString so the substring()
> example would not have worked.
> >
> > My question is: Should we document some general advice on this pattern
> and what should the advice be? Would it make sense to have some features
> where we truncate/reject Strings above a threshold. And yes, calling
> myFunObject.toString() can still still get me in trouble.
> >
> > Gary
> >
>
>

Reply via email to