1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd"> 2<html xmlns="http://www.w3.org/1999/xhtml"> 3<head> 4 5<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 6<title>Compatibility report</title> 7<link rel="stylesheet" type="text/css" media="screen" href="css/site.css" /> 8</head> 9<body> 10 <script> 11prefix=''; 12</script> 13 14<script src="templates/header.js"></script> 15<div id="left"> 16 <script src="templates/left.js"></script> 17</div> 18<div id="right"> 19 <script src="templates/right.js"></script> 20</div> 21<div id="content"> 22 23 24 <h1>Compatibility report</h1> 25 26 <p>Given the very large user base of SLF4J, we take backward 27 compatibility very seriously. As such, changes that may cause 28 incompatibility problems are listed in this page. Moreover, since 29 slf4j-api.jar is the main entry point into SLF4J, that is the module 30 that will be covered in most detail. 31 </p> 32 33 <p>Please note that in many cases incompatibility problems are 34 caused by mixing different versions of slf4j artifacts. For example, 35 if you are using slf4j-api-1.5.4.jar you should also use 36 slf4j-simple-1.5.4.jar, using slf4j-simple-1.4.2.jar will not 37 work. The same goes for all other SLF4J artifacts. 38 </p> 39 40 <p>The list is computed using <a 41 href="http://clirr.sourceforge.net/">clirr</a>. If you have reasons 42 to suspect incompatible changes not mentioned here, please kindly 43 contact the slf4j developers list.</p> 44 45 <h2><a href="#1_5_7" name="1_5_6">Version 1.5.7 compared to 1.5.6</a></h2> 46 47 <p>No breaking changes to report.</p> 48 49 <h2><a href="#1_5_6" name="1_5_5">Version 1.5.6 compared to 1.5.5</a></h2> 50 51 52 <table class="bodyTable"> 53 <tr> 54 <th>Severity</th> 55 <th>Description</th> 56 <th>Class</th> 57 <th>Method / Field</th> 58 </tr> 59 <tr> 60 <td>Error</td> 61 <td>The number of parameters of SubstituteLoggerFactory 62 constructor has changed</td> 63 <td>org.slf4j.helpers.SubstituteLoggerFactory</td> 64 <td>public SubstituteLoggerFactory(java.util.List)</td> 65 </tr> 66 </table> 67 68 <p> </p> 69 70 <p>The <code>SubstituteLoggerFactory</code> class is used internally 71 by the LoggerFactory class. Changes to the constructor of 72 SubstituteLoggerFactory should have strictly no effect on users. 73 </p> 74 75 <h2><a href="#1_5_5" name="1_5_4">Version 1.5.5 compared to 1.5.4</a></h2> 76 77 <p>No breaking changes to report.</p> 78 79 <h2><a href="#1_5_4" name="1_5_4">Version 1.5.4 compared to 1.5.3</a></h2> 80 81 <h3>slf4j-api module, list of breaking changes:</h3> 82 83 84 <table class="bodyTable"> 85 <tr> 86 <th>Severity</th> 87 <th>Description</th> 88 <th>Class</th> 89 <th>Method / Field</th> 90 </tr> 91 <tr> 92 <td>Error</td> 93 <td>Method 'hasReferences()' has been added to an interface</td> 94 <td>org.slf4j.Marker</td> 95 <td>public boolean hasReferences()</td> 96 </tr> 97 <tr class="alt"> 98 <td>Info</td> 99 <td>Method 'hasChildren()' was deprecated</td> 100 <td>org.slf4j.Marker</td> 101 <td>public boolean hasChildren()</td> 102 </tr> 103 104 </table> 105 106 <p> </p> 107 108 <p>The <code>hasChildren()</code> and other documentation in the 109 Marker interface was misleading users to think in terms of parent 110 child relationship for markers. However, as <a 111 href="http://bugzilla.slf4j.org/show_bug.cgi?id=100">bug 100</a> 112 illustrates, associating markers as parents and children is not very 113 helpful. It is much better to think of markers in terms of abstract 114 graphs. As such, we now say that a marker contains (zero or more) 115 <code>references</code> to other markers. 116 </p> 117 118 <p>This breaking change is justified because it corrects a 119 conceptual error in the design. Previously, it was all too easy for 120 developers to get confused and incorrectly link markers 121 together.</p> 122 123 <h2><a href="#1_5_3" name="1_5_3">Version 1.5.3 compared to 1.5.2</a></h2> 124 125 <h3>slf4j-api module, list of breaking changes:</h3> 126 127 128 <table class="bodyTable"> 129 <tr> 130 <th>Severity</th> 131 <th>Description</th> 132 <th>Class</th> 133 <th>Method / Field</th> 134 </tr> 135 <tr > 136 <td>Error</td> 137 <td>Added final modifier to class</td> 138 <td>org.slf4j.helpers.MessageFormatter</td> 139 <td></td> 140 </tr> 141 </table> 142 143 <p>Declaring <code>MessageFormatter</code> class as final should not 144 affect users, unless they extend this class. However, since this 145 class is intended to be used internally, very few users should be 146 affected. 147 </p> 148 149 <h2><a href="#1_5_2" name="1_5_2">Version 1.5.2 compared to 1.5.1</a></h2> 150 151 <p>No breaking changes to report.</p> 152 153 <h2><a href="#1_5_1" name="1_5_1">Version 1.5.1 compared to 1.5.0</a></h2> 154 155 156 <h3>slf4j-api module, list of breaking changes:</h3> 157 158 159 <table class="bodyTable"> 160 <tr> 161 <th>Severity</th> 162 <th>Description</th> 163 <th>Class</th> 164 <th>Method / Field</th> 165 </tr> 166 <tr > 167 <td>Error</td> 168 <td>Method 'getCopyOfContextMap()' has been added to an 169 interface 170 </td> 171 <td>org.slf4j.spi.MDCAdapter</td> 172 <td>public java.util.Map getCopyOfContextMap()</td> 173 </tr> 174 <tr class="alt"> 175 <td>Error</td> 176 <td>Method 'setContextMap(Map)' has been added to an 177 interface 178 </td> 179 <td>org.slf4j.spi.MDCAdapter</td> 180 <td>public void setContextMap(java.util.Map)</td> 181 </tr> 182 183 <tr> 184 <td>Error</td> 185 <td>Method 'getDetachedMarker(String)' has been added to an 186 interface 187 </td> 188 <td>org.slf4j.IMarkerFactory</td> 189 <td>public org.slf4j.Marker getDetachedMarker(java.lang.String)</td> 190 </tr> 191 192 <tr class="alt"> 193 <td>Info</td> 194 <td>Method 'equals(Object)' has been added to an 195 interface 196 </td> 197 <td>org.slf4j.Marker</td> 198 <td>public boolean equals(java.lang.Object)</td> 199 </tr> 200 201 <tr> 202 <td>info</td> 203 <td>Method 'hashCode()' has been added to an 204 interface 205 </td> 206 <td>org.slf4j.Marker</td> 207 <td>public int hashCode()</td> 208 </tr> 209 210 </table> 211 212 <p>The addition of the <code>getCopyOfContextMap()</code> method in 213 the <code>MDCAdapter</code> class should only impact users who have 214 their own implementation of the said interface. Except for bindings 215 that ship with SLF4J and for logback-classic, which will be 216 naturally upgraded, there are no known other implementations of 217 <code>MDCAdapter</code>. In a rare but still possible scenario, if 218 the user mixes different versions for slf4j-api.jar, say version 219 1.5.1. and an SLF4J binding, say slf4j-log4j12.jar version 1.5.0, 220 then a <code>java.lang.AbstractMethodError</code> will be thrown, 221 but only if the client code calls the newly added method. <span 222 style="color:green"> In short, although generally speaking the 223 addition of a method to an interface is a breaking change, we are 224 confident that no users will be impacted in this particular 225 case.</span> 226 </p> 227 228 <p>Similar reasoning applies to the <code>setContextMap(Map)</code> 229 method.</p> 230 231 <p>The addition of <code>getDetachedMarker(String)</code> method in 232 the <code>org.slf4j.IMarkerFactory</code> should not impact users as 233 the only (known) implementation of this interface ships with SLF4J 234 itself. 235 </p> 236 237 <p>The <code>equals()</code> and <code>hashCode()</code> methods 238 were added to the <code>org.slf4j.Marker</code> interface for 239 documentation purposes. Given that all objects implicitly implement 240 these methods, their addition should theoretically not break 241 existing code. </p> 242 243 244 <h3>Other modules</h3> 245 246 <p>No breaking changes to report.</p> 247 248 249 <!-- ========================================= --> 250 <h2><a href="#1_5_0" name="1_5_0">Version 1.5.0 compared to 251 1.4.3</a></h2> 252 253 <p>No breaking changes to report.</p> 254 255 <!-- ========================================= --> 256 <h2><a href="#1_4_3" name="1_4_3">Version 1.4.3 compared to 257 1.4.2</a></h2> 258 <p>No breaking changes to report.</p> 259 260 <!-- ========================================= --> 261 <h2><a href="#1_4_2" name="1_4_2">Version 1.4.2 compared to 1.4.1</a></h2> 262 <p>No breaking changes to report.</p> 263 264 <!-- ========================================= --> 265 <h2><a href="#1_4_1" name="1_4_1">Version 1.4.1 compared to 266 1.4.0</a></h2> 267 <p>No breaking changes to report.</p> 268 269</div> </body> </html>