On Thu, Jan 21, 2016 at 1:46 PM, Blake Day <[email protected]> wrote: > Gary, > > Yes I was able to apply the patch to 2.5. I can confirm it has fixed the > issue we encountered with multi-byte characters. Again, thanks for your > assistance! >
YW, Gary > > > > On 1/21/16, 12:55 PM, "Gary Gregory" <[email protected]> wrote: > > >Blake: > > > >Did you try to apply the patch and run with it? Our unit tests pass when I > >have the patch but it's not guarantee in comparison to a real live > use-case. > > > >Gary > > > >On Thu, Jan 21, 2016 at 9:51 AM, Blake Day <[email protected]> wrote: > > > >> Looks good to me! Thanks! > >> > >> > >> > >> > >> On 1/20/16, 9:30 PM, "Gary Gregory" <[email protected]> wrote: > >> > >> >How about something like this: > >> > > >> >diff --git > >> > >> > >a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java > >> > >> > >b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java > >> >index a48876f..d6e77ef 100644 > >> >--- > >> > >> > >a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java > >> >+++ > >> > >> > >b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java > >> >@@ -16,7 +16,7 @@ > >> > */ > >> > package org.apache.logging.log4j.core.appender; > >> > > >> >-import java.nio.charset.Charset; > >> >+import java.nio.charset.StandardCharsets; > >> > > >> > import org.apache.logging.log4j.util.Chars; > >> > > >> >@@ -26,46 +26,56 @@ > >> > * @see <a href="https://tools.ietf.org/html/rfc5425">RFC 5425</a> > >> > */ > >> > public class TlsSyslogFrame { > >> >- private String message; > >> >- private int messageLengthInBytes; > >> >+ private final String message; > >> > > >> > public TlsSyslogFrame(final String message) { > >> >- setMessage(message); > >> >+ this.message = message; > >> > } > >> > > >> > public String getMessage() { > >> > return this.message; > >> > } > >> > > >> >- public void setMessage(final String message) { > >> >- this.message = message; > >> >- setLengthInBytes(); > >> >- } > >> >- > >> >- private void setLengthInBytes() { > >> >- messageLengthInBytes = message.length(); > >> >- } > >> >- > >> > public byte[] getBytes() { > >> >- final String frame = toString(); > >> >- return frame.getBytes(Charset.defaultCharset()); > >> >+ final String frame = toString(); > >> >+ return frame.getBytes(StandardCharsets.UTF_8); > >> > } > >> > > >> > @Override > >> > public String toString() { > >> >- final String length = Integer.toString(messageLengthInBytes); > >> >+ final byte[] messageBytes = > >> >message.getBytes(StandardCharsets.UTF_8); > >> >+ final String length = Integer.toString(messageBytes.length); > >> > return length + Chars.SPACE + message; > >> > } > >> > > >> >- public boolean equals(final TlsSyslogFrame frame) { > >> >- return isLengthEquals(frame) && isMessageEquals(frame); > >> >+ @Override > >> >+ public int hashCode() { > >> >+ final int prime = 31; > >> >+ int result = 1; > >> >+ result = prime * result + ((message == null) ? 0 : > >> >message.hashCode()); > >> >+ return result; > >> > } > >> > > >> >- private boolean isLengthEquals(final TlsSyslogFrame frame) { > >> >- return this.messageLengthInBytes == > frame.messageLengthInBytes; > >> >+ @Override > >> >+ public boolean equals(final Object obj) { > >> >+ if (this == obj) { > >> >+ return true; > >> >+ } > >> >+ if (obj == null) { > >> >+ return false; > >> >+ } > >> >+ if (!(obj instanceof TlsSyslogFrame)) { > >> >+ return false; > >> >+ } > >> >+ final TlsSyslogFrame other = (TlsSyslogFrame) obj; > >> >+ if (message == null) { > >> >+ if (other.message != null) { > >> >+ return false; > >> >+ } > >> >+ } else if (!message.equals(other.message)) { > >> >+ return false; > >> >+ } > >> >+ return true; > >> > } > >> > > >> >- private boolean isMessageEquals(final TlsSyslogFrame frame) { > >> >- return this.message.equals(frame.message); > >> >- } > >> > } > >> > > >> > > >> >Gary > >> > > >> >On Wed, Jan 20, 2016 at 6:27 PM, Gary Gregory <[email protected]> > >> >wrote: > >> > > >> >> And another issue: TlsSyslogFrame implements equals() but not > >> hashCode(). > >> >> > >> >> Gary > >> >> > >> >> On Wed, Jan 20, 2016 at 4:58 PM, Blake Day <[email protected]> wrote: > >> >> > >> >>> TlsSyslogFrame appears to be miscalculating the message length. > >> >>> According to RFC5425, the message length must be the octet count of > the > >> >>> SYSLOG-MSG in the frame. Though the variable below is aptly named > >> >>> messageLengthInBytes, it is assigned the value from message.length() > >> (where > >> >>> message is a String) rather than the bytes. > >> >>> > >> >>> See below for relevant portions of code: > >> >>> > >> >>> private String message; > >> >>> private int messageLengthInBytes; > >> >>> > >> >>> private void setLengthInBytes() { > >> >>> messageLengthInBytes = message.length(); > >> >>> } > >> >>> > >> >>> @Override > >> >>> public String toString() { > >> >>> final String length = Integer.toString(messageLengthInBytes); > >> >>> return length + Chars.SPACE + message; > >> >>> } > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > --------------------------------------------------------------------- > >> >>> To unsubscribe, e-mail: [email protected] > >> >>> For additional commands, e-mail: [email protected] > >> >>> > >> >>> > >> >> > >> >> > >> >> -- > >> >> E-Mail: [email protected] | [email protected] > >> >> Java Persistence with Hibernate, Second Edition > >> >> <http://www.manning.com/bauer3/> > >> >> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > >> >> Spring Batch in Action <http://www.manning.com/templier/> > >> >> Blog: http://garygregory.wordpress.com > >> >> Home: http://garygregory.com/ > >> >> Tweet! http://twitter.com/GaryGregory > >> >> > >> > > >> > > >> > > >> >-- > >> >E-Mail: [email protected] | [email protected] > >> >Java Persistence with Hibernate, Second Edition > >> ><http://www.manning.com/bauer3/> > >> >JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > >> >Spring Batch in Action <http://www.manning.com/templier/> > >> >Blog: http://garygregory.wordpress.com > >> >Home: http://garygregory.com/ > >> >Tweet! http://twitter.com/GaryGregory > >> > > > > > > > >-- > >E-Mail: [email protected] | [email protected] > >Java Persistence with Hibernate, Second Edition > ><http://www.manning.com/bauer3/> > >JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > >Spring Batch in Action <http://www.manning.com/templier/> > >Blog: http://garygregory.wordpress.com > >Home: http://garygregory.com/ > >Tweet! http://twitter.com/GaryGregory > -- E-Mail: [email protected] | [email protected] Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory
