logback-dev
Threads by month
- ----- 2025 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
December 2011
- 6 participants
- 82 discussions

[JIRA] Created: (LBCLASSIC-315) XMLLayout has several inconsistencies as compared to the log4j XMLLayout it emulates.
by David Johnson (JIRA) 30 Dec '11
by David Johnson (JIRA) 30 Dec '11
30 Dec '11
XMLLayout has several inconsistencies as compared to the log4j XMLLayout it emulates.
-------------------------------------------------------------------------------------
Key: LBCLASSIC-315
URL: http://jira.qos.ch/browse/LBCLASSIC-315
Project: logback-classic
Issue Type: Bug
Environment: All
Reporter: David Johnson
Assignee: Logback dev list
XMLLayout has the following issues, relative to the log4j XMLLayout implementation:
1. The stack trace does not include the exception class
2. The stack trace does not walk the "caused by" chain
The following quickie patch resolves these two issues, but may introduce others.
public class XMLLayout extends LayoutBase
{
... snip ...
public String doLayout(ILoggingEvent event)
{
... snip ...
buf.append(" <log4j:message><![CDATA[");
Transform.appendEscapingCDATA(buf, event.getFormattedMessage());
buf.append("]]></log4j:message>\r\n");
IThrowableProxy tp = event.getThrowableProxy();
StackTraceElementProxy arr$[]; // I'm hopelessly addicted to keeping declarations out of tight loops
StackTraceElementProxy step;
StackTraceElementProxy stepArray[];
int len$;
if (tp != null)
{
stepArray = tp.getStackTraceElementProxyArray();
buf.append(" <log4j:throwable><![CDATA[");
while (tp != null) { // loop to walk the caused-by chain
buf.append(tp.getClassName()); // put the exception's class name in the stacktrace, per log4j reference
buf.append(" : ");
buf.append(tp.getMessage());
buf.append(" :\r\n");
arr$ = stepArray;
len$ = arr$.length;
for (int i$ = 0; i$ < len$; i$++) {
step = arr$[i$];
buf.append('\t');
buf.append(step.toString());
buf.append("\r\n");
}
tp = tp.getCause(); // go to the next exception in the chain
if (tp != null) {
buf.append("Caused by: ");
}
}
buf.append("]]></log4j:throwable>\r\n");
}
if(locationInfo)
{
StackTraceElement callerDataArray[] = event.getCallerData();
if(callerDataArray != null && callerDataArray.length > 0)
{
... snip ...
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
0
The following code needs another look for full support of getSuppressed():
ch.qos.logback.classic.db.DBAppender.insertThrowable
ch.qos.logback.classic.html.DefaultThrowableRenderer.render
ch.qos.logback.classic.net.SyslogAppender.postProcess
ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter.subjoinRootCauseFirst
ch.qos.logback.classic.pattern.ThrowableProxyConverter.throwableProxyToString
I previously added support to ch.qos.logback.classic.spi.ThrowableProxyUtil.asString but, unfortunately, this method isn't used in any of the above code.
I'm not sure if printing of suppressed exceptions should be optional in the two ProxyConverter implementations and if so, how to implement that behavior .
Concerning DefaultThrowableRenderer and SyslogAppender, I'd guess that they should just call asString instead of reimplementing it.
Cheers,
Joern.
1
0
Hi Ceki,
another test is currently failing:
-------------------------------------------------------------------------------
Test set: ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBaseTest
-------------------------------------------------------------------------------
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2,065,097.171 sec <<< FAILURE!
singleDate(ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBaseTest) Time elapsed: 0 secmultiDate(ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBaseTest) Time elapsed: 0.002 sec <<< FAILURE!
java.lang.AssertionError: expected:<foo-2011-12/59.log> but was:<null>
at org.junit.Assert.fail(Assert.java:93)
at org.junit.Assert.failNotEquals(Assert.java:647)
at org.junit.Assert.assertEquals(Assert.java:128)
at org.junit.Assert.assertEquals(Assert.java:147)
at ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBaseTest.multiDate(TimeBasedFileNamingAndTriggeringPolicyBaseTest.java:65)
Joern
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch bootstrap-twitter created. v_1.0.0-60-g63ad47e
by git-noreply@pixie.qos.ch 21 Dec '11
by git-noreply@pixie.qos.ch 21 Dec '11
21 Dec '11
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, bootstrap-twitter has been created
at 63ad47eba7db8bf379f341243fb3b01143062f15 (commit)
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=63ad47eba7db8bf379f34124…
http://github.com/ceki/logback/commit/63ad47eba7db8bf379f341243fb3b01143062…
commit 63ad47eba7db8bf379f341243fb3b01143062f15
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Thu Dec 22 00:18:54 2011 +0100
initial bootstrap commit
diff --git a/logback-site/src/site/pages/css/bootstrap.css b/logback-site/src/site/pages/css/bootstrap.css
new file mode 100644
index 0000000..75780fc
--- /dev/null
+++ b/logback-site/src/site/pages/css/bootstrap.css
@@ -0,0 +1,2467 @@
+/*!
+ * Bootstrap v1.4.0
+ *
+ * Copyright 2011 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ * Date: Sat Nov 12 01:04:51 PST 2011
+ */
+/* Reset.less
+ * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
+ * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
+html, body {
+ margin: 0;
+ padding: 0;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+dd,
+dl,
+dt,
+li,
+ol,
+ul,
+fieldset,
+form,
+label,
+legend,
+button,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-weight: normal;
+ font-style: normal;
+ font-size: 100%;
+ line-height: 1;
+ font-family: inherit;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+ol, ul {
+ list-style: none;
+}
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+html {
+ overflow-y: scroll;
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+a:focus {
+ outline: thin dotted;
+}
+a:hover, a:active {
+ outline: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+ display: block;
+}
+audio, canvas, video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+audio:not([controls]) {
+ display: none;
+}
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+img {
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+button,
+input,
+select,
+textarea {
+ font-size: 100%;
+ margin: 0;
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+button, input {
+ line-height: normal;
+ *overflow: visible;
+}
+button::-moz-focus-inner, input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button;
+}
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+textarea {
+ overflow: auto;
+ vertical-align: top;
+}
+/* Variables.less
+ * Variables to customize the look and feel of Bootstrap
+ * ----------------------------------------------------- */
+/* Mixins.less
+ * Snippets of reusable CSS to develop faster and keep code readable
+ * ----------------------------------------------------------------- */
+/*
+ * Scaffolding
+ * Basic and global styles for generating a grid system, structural layout, and page templates
+ * ------------------------------------------------------------------------------------------- */
+body {
+ background-color: #ffffff;
+ margin: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 18px;
+ color: #404040;
+}
+.container {
+ width: 940px;
+ margin-left: auto;
+ margin-right: auto;
+ zoom: 1;
+}
+.container:before, .container:after {
+ display: table;
+ content: "";
+ zoom: 1;
+}
+.container:after {
+ clear: both;
+}
+.container-fluid {
+ position: relative;
+ min-width: 940px;
+ padding-left: 20px;
+ padding-right: 20px;
+ zoom: 1;
+}
+.container-fluid:before, .container-fluid:after {
+ display: table;
+ content: "";
+ zoom: 1;
+}
+.container-fluid:after {
+ clear: both;
+}
+.container-fluid > .sidebar {
+ position: absolute;
+ top: 0;
+ left: 20px;
+ width: 220px;
+}
+.container-fluid > .content {
+ margin-left: 240px;
+}
+a {
+ color: #0069d6;
+ text-decoration: none;
+ line-height: inherit;
+ font-weight: inherit;
+}
+a:hover {
+ color: #00438a;
+ text-decoration: underline;
+}
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+.hide {
+ display: none;
+}
+.show {
+ display: block;
+}
+.row {
+ zoom: 1;
+ margin-left: -20px;
+}
+.row:before, .row:after {
+ display: table;
+ content: "";
+ zoom: 1;
+}
+.row:after {
+ clear: both;
+}
+.row > [class*="span"] {
+ display: inline;
+ float: left;
+ margin-left: 20px;
+}
+.span1 {
+ width: 40px;
+}
+.span2 {
+ width: 100px;
+}
+.span3 {
+ width: 160px;
+}
+.span4 {
+ width: 220px;
+}
+.span5 {
+ width: 280px;
+}
+.span6 {
+ width: 340px;
+}
+.span7 {
+ width: 400px;
+}
+.span8 {
+ width: 460px;
+}
+.span9 {
+ width: 520px;
+}
+.span10 {
+ width: 580px;
+}
+.span11 {
+ width: 640px;
+}
+.span12 {
+ width: 700px;
+}
+.span13 {
+ width: 760px;
+}
+.span14 {
+ width: 820px;
+}
+.span15 {
+ width: 880px;
+}
+.span16 {
+ width: 940px;
+}
+.span17 {
+ width: 1000px;
+}
+.span18 {
+ width: 1060px;
+}
+.span19 {
+ width: 1120px;
+}
+.span20 {
+ width: 1180px;
+}
+.span21 {
+ width: 1240px;
+}
+.span22 {
+ width: 1300px;
+}
+.span23 {
+ width: 1360px;
+}
+.span24 {
+ width: 1420px;
+}
+.row > .offset1 {
+ margin-left: 80px;
+}
+.row > .offset2 {
+ margin-left: 140px;
+}
+.row > .offset3 {
+ margin-left: 200px;
+}
+.row > .offset4 {
+ margin-left: 260px;
+}
+.row > .offset5 {
+ margin-left: 320px;
+}
+.row > .offset6 {
+ margin-left: 380px;
+}
+.row > .offset7 {
+ margin-left: 440px;
+}
+.row > .offset8 {
+ margin-left: 500px;
+}
+.row > .offset9 {
+ margin-left: 560px;
+}
+.row > .offset10 {
+ margin-left: 620px;
+}
+.row > .offset11 {
+ margin-left: 680px;
+}
+.row > .offset12 {
+ margin-left: 740px;
+}
+.span-one-third {
+ width: 300px;
+}
+.span-two-thirds {
+ width: 620px;
+}
+.row > .offset-one-third {
+ margin-left: 340px;
+}
+.row > .offset-two-thirds {
+ margin-left: 660px;
+}
+/* Typography.less
+ * Headings, body text, lists, code, and more for a versatile and durable typography system
+ * ---------------------------------------------------------------------------------------- */
+p {
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 18px;
+ margin-bottom: 9px;
+}
+p small {
+ font-size: 11px;
+ color: #bfbfbf;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-weight: bold;
+ color: #404040;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+ color: #bfbfbf;
+}
+h1 {
+ margin-bottom: 18px;
+ font-size: 30px;
+ line-height: 36px;
+}
+h1 small {
+ font-size: 18px;
+}
+h2 {
+ font-size: 24px;
+ line-height: 36px;
+}
+h2 small {
+ font-size: 14px;
+}
+h3,
+h4,
+h5,
+h6 {
+ line-height: 36px;
+}
+h3 {
+ font-size: 18px;
+}
+h3 small {
+ font-size: 14px;
+}
+h4 {
+ font-size: 16px;
+}
+h4 small {
+ font-size: 12px;
+}
+h5 {
+ font-size: 14px;
+}
+h6 {
+ font-size: 13px;
+ color: #bfbfbf;
+ text-transform: uppercase;
+}
+ul, ol {
+ margin: 0 0 18px 25px;
+}
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin-bottom: 0;
+}
+ul {
+ list-style: disc;
+}
+ol {
+ list-style: decimal;
+}
+li {
+ line-height: 18px;
+ color: #808080;
+}
+ul.unstyled {
+ list-style: none;
+ margin-left: 0;
+}
+dl {
+ margin-bottom: 18px;
+}
+dl dt, dl dd {
+ line-height: 18px;
+}
+dl dt {
+ font-weight: bold;
+}
+dl dd {
+ margin-left: 9px;
+}
+hr {
+ margin: 20px 0 19px;
+ border: 0;
+ border-bottom: 1px solid #eee;
+}
+strong {
+ font-style: inherit;
+ font-weight: bold;
+}
+em {
+ font-style: italic;
+ font-weight: inherit;
+ line-height: inherit;
+}
+.muted {
+ color: #bfbfbf;
+}
+blockquote {
+ margin-bottom: 18px;
+ border-left: 5px solid #eee;
+ padding-left: 15px;
+}
+blockquote p {
+ font-size: 14px;
+ font-weight: 300;
+ line-height: 18px;
+ margin-bottom: 0;
+}
+blockquote small {
+ display: block;
+ font-size: 12px;
+ font-weight: 300;
+ line-height: 18px;
+ color: #bfbfbf;
+}
+blockquote small:before {
+ content: '\2014 \00A0';
+}
+address {
+ display: block;
+ line-height: 18px;
+ margin-bottom: 18px;
+}
+code, pre {
+ padding: 0 3px 2px;
+ font-family: Monaco, Andale Mono, Courier New, monospace;
+ font-size: 12px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+code {
+ background-color: #fee9cc;
+ color: rgba(0, 0, 0, 0.75);
+ padding: 1px 3px;
+}
+pre {
+ background-color: #f5f5f5;
+ display: block;
+ padding: 8.5px;
+ margin: 0 0 18px;
+ line-height: 18px;
+ font-size: 12px;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+/* Forms.less
+ * Base styles for various input types, form layouts, and states
+ * ------------------------------------------------------------- */
+form {
+ margin-bottom: 18px;
+}
+fieldset {
+ margin-bottom: 18px;
+ padding-top: 18px;
+}
+fieldset legend {
+ display: block;
+ padding-left: 150px;
+ font-size: 19.5px;
+ line-height: 1;
+ color: #404040;
+ *padding: 0 0 5px 145px;
+ /* IE6-7 */
+
+ *line-height: 1.5;
+ /* IE6-7 */
+
+}
+form .clearfix {
+ margin-bottom: 18px;
+ zoom: 1;
+}
+form .clearfix:before, form .clearfix:after {
+ display: table;
+ content: "";
+ zoom: 1;
+}
+form .clearfix:after {
+ clear: both;
+}
+label,
+input,
+select,
+textarea {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+ line-height: normal;
+}
+label {
+ padding-top: 6px;
+ font-size: 13px;
+ line-height: 18px;
+ float: left;
+ width: 130px;
+ text-align: right;
+ color: #404040;
+}
+form .input {
+ margin-left: 150px;
+}
+input[type=checkbox], input[type=radio] {
+ cursor: pointer;
+}
+input,
+textarea,
+select,
+.uneditable-input {
+ display: inline-block;
+ width: 210px;
+ height: 18px;
+ padding: 4px;
+ font-size: 13px;
+ line-height: 18px;
+ color: #808080;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+select {
+ padding: initial;
+}
+input[type=checkbox], input[type=radio] {
+ width: auto;
+ height: auto;
+ padding: 0;
+ margin: 3px 0;
+ *margin-top: 0;
+ /* IE6-7 */
+
+ line-height: normal;
+ border: none;
+}
+input[type=file] {
+ background-color: #ffffff;
+ padding: initial;
+ border: initial;
+ line-height: initial;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+input[type=button], input[type=reset], input[type=submit] {
+ width: auto;
+ height: auto;
+}
+select, input[type=file] {
+ height: 27px;
+ *height: auto;
+ line-height: 27px;
+ *margin-top: 4px;
+ /* For IE7, add top margin to align select with labels */
+
+}
+select[multiple] {
+ height: inherit;
+ background-color: #ffffff;
+}
+textarea {
+ height: auto;
+}
+.uneditable-input {
+ background-color: #ffffff;
+ display: block;
+ border-color: #eee;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ cursor: not-allowed;
+}
+:-moz-placeholder {
+ color: #bfbfbf;
+}
+::-webkit-input-placeholder {
+ color: #bfbfbf;
+}
+input, textarea {
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+ transition: border linear 0.2s, box-shadow linear 0.2s;
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+input:focus, textarea:focus {
+ outline: 0;
+ border-color: rgba(82, 168, 236, 0.8);
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
+ -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
+}
+input[type=file]:focus, input[type=checkbox]:focus, select:focus {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ outline: 1px dotted #666;
+}
+form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline {
+ color: #b94a48;
+}
+form .clearfix.error input, form .clearfix.error textarea {
+ color: #b94a48;
+ border-color: #ee5f5b;
+}
+form .clearfix.error input:focus, form .clearfix.error textarea:focus {
+ border-color: #e9322d;
+ -webkit-box-shadow: 0 0 6px #f8b9b7;
+ -moz-box-shadow: 0 0 6px #f8b9b7;
+ box-shadow: 0 0 6px #f8b9b7;
+}
+form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on {
+ color: #b94a48;
+ background-color: #fce6e6;
+ border-color: #b94a48;
+}
+form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline {
+ color: #c09853;
+}
+form .clearfix.warning input, form .clearfix.warning textarea {
+ color: #c09853;
+ border-color: #ccae64;
+}
+form .clearfix.warning input:focus, form .clearfix.warning textarea:focus {
+ border-color: #be9a3f;
+ -webkit-box-shadow: 0 0 6px #e5d6b1;
+ -moz-box-shadow: 0 0 6px #e5d6b1;
+ box-shadow: 0 0 6px #e5d6b1;
+}
+form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on {
+ color: #c09853;
+ background-color: #d2b877;
+ border-color: #c09853;
+}
+form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline {
+ color: #468847;
+}
+form .clearfix.success input, form .clearfix.success textarea {
+ color: #468847;
+ border-color: #57a957;
+}
+form .clearfix.success input:focus, form .clearfix.success textarea:focus {
+ border-color: #458845;
+ -webkit-box-shadow: 0 0 6px #9acc9a;
+ -moz-box-shadow: 0 0 6px #9acc9a;
+ box-shadow: 0 0 6px #9acc9a;
+}
+form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on {
+ color: #468847;
+ background-color: #bcddbc;
+ border-color: #468847;
+}
+.input-mini,
+input.mini,
+textarea.mini,
+select.mini {
+ width: 60px;
+}
+.input-small,
+input.small,
+textarea.small,
+select.small {
+ width: 90px;
+}
+.input-medium,
+input.medium,
+textarea.medium,
+select.medium {
+ width: 150px;
+}
+.input-large,
+input.large,
+textarea.large,
+select.large {
+ width: 210px;
+}
+.input-xlarge,
+input.xlarge,
+textarea.xlarge,
+select.xlarge {
+ width: 270px;
+}
+.input-xxlarge,
+input.xxlarge,
+textarea.xxlarge,
+select.xxlarge {
+ width: 530px;
+}
+textarea.xxlarge {
+ overflow-y: auto;
+}
+input.span1, textarea.span1 {
+ display: inline-block;
+ float: none;
+ width: 30px;
+ margin-left: 0;
+}
+input.span2, textarea.span2 {
+ display: inline-block;
+ float: none;
+ width: 90px;
+ margin-left: 0;
+}
+input.span3, textarea.span3 {
+ display: inline-block;
+ float: none;
+ width: 150px;
+ margin-left: 0;
+}
+input.span4, textarea.span4 {
+ display: inline-block;
+ float: none;
+ width: 210px;
+ margin-left: 0;
+}
+input.span5, textarea.span5 {
+ display: inline-block;
+ float: none;
+ width: 270px;
+ margin-left: 0;
+}
+input.span6, textarea.span6 {
+ display: inline-block;
+ float: none;
+ width: 330px;
+ margin-left: 0;
+}
+input.span7, textarea.span7 {
+ display: inline-block;
+ float: none;
+ width: 390px;
+ margin-left: 0;
+}
+input.span8, textarea.span8 {
+ display: inline-block;
+ float: none;
+ width: 450px;
+ margin-left: 0;
+}
+input.span9, textarea.span9 {
+ display: inline-block;
+ float: none;
+ width: 510px;
+ margin-left: 0;
+}
+input.span10, textarea.span10 {
+ display: inline-block;
+ float: none;
+ width: 570px;
+ margin-left: 0;
+}
+input.span11, textarea.span11 {
+ display: inline-block;
+ float: none;
+ width: 630px;
+ margin-left: 0;
+}
+input.span12, textarea.span12 {
+ display: inline-block;
+ float: none;
+ width: 690px;
+ margin-left: 0;
+}
+input.span13, textarea.span13 {
+ display: inline-block;
+ float: none;
+ width: 750px;
+ margin-left: 0;
+}
+input.span14, textarea.span14 {
+ display: inline-block;
+ float: none;
+ width: 810px;
+ margin-left: 0;
+}
+input.span15, textarea.span15 {
+ display: inline-block;
+ float: none;
+ width: 870px;
+ margin-left: 0;
+}
+input.span16, textarea.span16 {
+ display: inline-block;
+ float: none;
+ width: 930px;
+ margin-left: 0;
+}
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+ background-color: #f5f5f5;
+ border-color: #ddd;
+ cursor: not-allowed;
+}
+.actions {
+ background: #f5f5f5;
+ margin-top: 18px;
+ margin-bottom: 18px;
+ padding: 17px 20px 18px 150px;
+ border-top: 1px solid #ddd;
+ -webkit-border-radius: 0 0 3px 3px;
+ -moz-border-radius: 0 0 3px 3px;
+ border-radius: 0 0 3px 3px;
+}
+.actions .secondary-action {
+ float: right;
+}
+.actions .secondary-action a {
+ line-height: 30px;
+}
+.actions .secondary-action a:hover {
+ text-decoration: underline;
+}
+.help-inline, .help-block {
+ font-size: 13px;
+ line-height: 18px;
+ color: #bfbfbf;
+}
+.help-inline {
+ padding-left: 5px;
+ *position: relative;
+ /* IE6-7 */
+
+ *top: -5px;
+ /* IE6-7 */
+
+}
+.help-block {
+ display: block;
+ max-width: 600px;
+}
+.inline-inputs {
+ color: #808080;
+}
+.inline-inputs span {
+ padding: 0 2px 0 1px;
+}
+.input-prepend input, .input-append input {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+.input-prepend .add-on, .input-append .add-on {
+ position: relative;
+ background: #f5f5f5;
+ border: 1px solid #ccc;
+ z-index: 2;
+ float: left;
+ display: block;
+ width: auto;
+ min-width: 16px;
+ height: 18px;
+ padding: 4px 4px 4px 5px;
+ margin-right: -1px;
+ font-weight: normal;
+ line-height: 18px;
+ color: #bfbfbf;
+ text-align: center;
+ text-shadow: 0 1px 0 #ffffff;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+.input-prepend .active, .input-append .active {
+ background: #a9dba9;
+ border-color: #46a546;
+}
+.input-prepend .add-on {
+ *margin-top: 1px;
+ /* IE6-7 */
+
+}
+.input-append input {
+ float: left;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+.input-append .add-on {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+ margin-right: 0;
+ margin-left: -1px;
+}
+.inputs-list {
+ margin: 0 0 5px;
+ width: 100%;
+}
+.inputs-list li {
+ display: block;
+ padding: 0;
+ width: 100%;
+}
+.inputs-list label {
+ display: block;
+ float: none;
+ width: auto;
+ padding: 0;
+ margin-left: 20px;
+ line-height: 18px;
+ text-align: left;
+ white-space: normal;
+}
+.inputs-list label strong {
+ color: #808080;
+}
+.inputs-list label small {
+ font-size: 11px;
+ font-weight: normal;
+}
+.inputs-list .inputs-list {
+ margin-left: 25px;
+ margin-bottom: 10px;
+ padding-top: 0;
+}
+.inputs-list:first-child {
+ padding-top: 6px;
+}
+.inputs-list li + li {
+ padding-top: 2px;
+}
+.inputs-list input[type=radio], .inputs-list input[type=checkbox] {
+ margin-bottom: 0;
+ margin-left: -20px;
+ float: left;
+}
+.form-stacked {
+ padding-left: 20px;
+}
+.form-stacked fieldset {
+ padding-top: 9px;
+}
+.form-stacked legend {
+ padding-left: 0;
+}
+.form-stacked label {
+ display: block;
+ float: none;
+ width: auto;
+ font-weight: bold;
+ text-align: left;
+ line-height: 20px;
+ padding-top: 0;
+}
+.form-stacked .clearfix {
+ margin-bottom: 9px;
+}
+.form-stacked .clearfix div.input {
+ margin-left: 0;
+}
+.form-stacked .inputs-list {
+ margin-bottom: 0;
+}
+.form-stacked .inputs-list li {
+ padding-top: 0;
+}
+.form-stacked .inputs-list li label {
+ font-weight: normal;
+ padding-top: 0;
+}
+.form-stacked div.clearfix.error {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ padding-left: 10px;
+ margin-top: 0;
+ margin-left: -10px;
+}
+.form-stacked .actions {
+ margin-left: -20px;
+ padding-left: 20px;
+}
+/*
+ * Tables.less
+ * Tables for, you guessed it, tabular data
+ * ---------------------------------------- */
+table {
+ width: 100%;
+ margin-bottom: 18px;
+ padding: 0;
+ font-size: 13px;
+ border-collapse: collapse;
+}
+table th, table td {
+ padding: 10px 10px 9px;
+ line-height: 18px;
+ text-align: left;
+}
+table th {
+ padding-top: 9px;
+ font-weight: bold;
+ vertical-align: middle;
+}
+table td {
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+table tbody th {
+ border-top: 1px solid #ddd;
+ vertical-align: top;
+}
+.condensed-table th, .condensed-table td {
+ padding: 5px 5px 4px;
+}
+.bordered-table {
+ border: 1px solid #ddd;
+ border-collapse: separate;
+ *border-collapse: collapse;
+ /* IE7, collapse table to remove spacing */
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.bordered-table th + th, .bordered-table td + td, .bordered-table th + td {
+ border-left: 1px solid #ddd;
+}
+.bordered-table thead tr:first-child th:first-child, .bordered-table tbody tr:first-child td:first-child {
+ -webkit-border-radius: 4px 0 0 0;
+ -moz-border-radius: 4px 0 0 0;
+ border-radius: 4px 0 0 0;
+}
+.bordered-table thead tr:first-child th:last-child, .bordered-table tbody tr:first-child td:last-child {
+ -webkit-border-radius: 0 4px 0 0;
+ -moz-border-radius: 0 4px 0 0;
+ border-radius: 0 4px 0 0;
+}
+.bordered-table tbody tr:last-child td:first-child {
+ -webkit-border-radius: 0 0 0 4px;
+ -moz-border-radius: 0 0 0 4px;
+ border-radius: 0 0 0 4px;
+}
+.bordered-table tbody tr:last-child td:last-child {
+ -webkit-border-radius: 0 0 4px 0;
+ -moz-border-radius: 0 0 4px 0;
+ border-radius: 0 0 4px 0;
+}
+table .span1 {
+ width: 20px;
+}
+table .span2 {
+ width: 60px;
+}
+table .span3 {
+ width: 100px;
+}
+table .span4 {
+ width: 140px;
+}
+table .span5 {
+ width: 180px;
+}
+table .span6 {
+ width: 220px;
+}
+table .span7 {
+ width: 260px;
+}
+table .span8 {
+ width: 300px;
+}
+table .span9 {
+ width: 340px;
+}
+table .span10 {
+ width: 380px;
+}
+table .span11 {
+ width: 420px;
+}
+table .span12 {
+ width: 460px;
+}
+table .span13 {
+ width: 500px;
+}
+table .span14 {
+ width: 540px;
+}
+table .span15 {
+ width: 580px;
+}
+table .span16 {
+ width: 620px;
+}
+.zebra-striped tbody tr:nth-child(odd) td, .zebra-striped tbody tr:nth-child(odd) th {
+ background-color: #f9f9f9;
+}
+.zebra-striped tbody tr:hover td, .zebra-striped tbody tr:hover th {
+ background-color: #f5f5f5;
+}
+table .header {
+ cursor: pointer;
+}
+table .header:after {
+ content: "";
+ float: right;
+ margin-top: 7px;
+ border-width: 0 4px 4px;
+ border-style: solid;
+ border-color: #000 transparent;
+ visibility: hidden;
+}
+table .headerSortUp, table .headerSortDown {
+ background-color: rgba(141, 192, 219, 0.25);
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+}
+table .header:hover:after {
+ visibility: visible;
+}
+table .headerSortDown:after, table .headerSortDown:hover:after {
+ visibility: visible;
+ filter: alpha(opacity=60);
+ -khtml-opacity: 0.6;
+ -moz-opacity: 0.6;
+ opacity: 0.6;
+}
+table .headerSortUp:after {
+ border-bottom: none;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #000;
+ visibility: visible;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ filter: alpha(opacity=60);
+ -khtml-opacity: 0.6;
+ -moz-opacity: 0.6;
+ opacity: 0.6;
+}
+table .blue {
+ color: #049cdb;
+ border-bottom-color: #049cdb;
+}
+table .headerSortUp.blue, table .headerSortDown.blue {
+ background-color: #ade6fe;
+}
+table .green {
+ color: #46a546;
+ border-bottom-color: #46a546;
+}
+table .headerSortUp.green, table .headerSortDown.green {
+ background-color: #cdeacd;
+}
+table .red {
+ color: #9d261d;
+ border-bottom-color: #9d261d;
+}
+table .headerSortUp.red, table .headerSortDown.red {
+ background-color: #f4c8c5;
+}
+table .yellow {
+ color: #ffc40d;
+ border-bottom-color: #ffc40d;
+}
+table .headerSortUp.yellow, table .headerSortDown.yellow {
+ background-color: #fff6d9;
+}
+table .orange {
+ color: #f89406;
+ border-bottom-color: #f89406;
+}
+table .headerSortUp.orange, table .headerSortDown.orange {
+ background-color: #fee9cc;
+}
+table .purple {
+ color: #7a43b6;
+ border-bottom-color: #7a43b6;
+}
+table .headerSortUp.purple, table .headerSortDown.purple {
+ background-color: #e2d5f0;
+}
+/* Patterns.less
+ * Repeatable UI elements outside the base styles provided from the scaffolding
+ * ---------------------------------------------------------------------------- */
+.topbar {
+ height: 40px;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 10000;
+ overflow: visible;
+}
+.topbar a {
+ color: #bfbfbf;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active > a {
+ background-color: #333;
+ background-color: rgba(255, 255, 255, 0.05);
+ color: #ffffff;
+ text-decoration: none;
+}
+.topbar h3 {
+ position: relative;
+}
+.topbar h3 a, .topbar .brand {
+ float: left;
+ display: block;
+ padding: 8px 20px 12px;
+ margin-left: -20px;
+ color: #ffffff;
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 1;
+}
+.topbar p {
+ margin: 0;
+ line-height: 40px;
+}
+.topbar p a:hover {
+ background-color: transparent;
+ color: #ffffff;
+}
+.topbar form {
+ float: left;
+ margin: 5px 0 0 0;
+ position: relative;
+ filter: alpha(opacity=100);
+ -khtml-opacity: 1;
+ -moz-opacity: 1;
+ opacity: 1;
+}
+.topbar form.pull-right {
+ float: right;
+}
+.topbar input {
+ background-color: #444;
+ background-color: rgba(255, 255, 255, 0.3);
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: normal;
+ font-weight: 13px;
+ line-height: 1;
+ padding: 4px 9px;
+ color: #ffffff;
+ color: rgba(255, 255, 255, 0.75);
+ border: 1px solid #111;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
+ -webkit-transition: none;
+ -moz-transition: none;
+ -ms-transition: none;
+ -o-transition: none;
+ transition: none;
+}
+.topbar input:-moz-placeholder {
+ color: #e6e6e6;
+}
+.topbar input::-webkit-input-placeholder {
+ color: #e6e6e6;
+}
+.topbar input:hover {
+ background-color: #bfbfbf;
+ background-color: rgba(255, 255, 255, 0.5);
+ color: #ffffff;
+}
+.topbar input:focus, .topbar input.focused {
+ outline: 0;
+ background-color: #ffffff;
+ color: #404040;
+ text-shadow: 0 1px 0 #ffffff;
+ border: 0;
+ padding: 5px 10px;
+ -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+}
+.topbar-inner, .topbar .fill {
+ background-color: #222;
+ background-color: #222222;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));
+ background-image: -moz-linear-gradient(top, #333333, #222222);
+ background-image: -ms-linear-gradient(top, #333333, #222222);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));
+ background-image: -webkit-linear-gradient(top, #333333, #222222);
+ background-image: -o-linear-gradient(top, #333333, #222222);
+ background-image: linear-gradient(top, #333333, #222222);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+}
+.topbar div > ul, .nav {
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+ position: relative;
+ left: 0;
+}
+.topbar div > ul > li, .nav > li {
+ display: block;
+ float: left;
+}
+.topbar div > ul a, .nav a {
+ display: block;
+ float: none;
+ padding: 10px 10px 11px;
+ line-height: 19px;
+ text-decoration: none;
+}
+.topbar div > ul a:hover, .nav a:hover {
+ color: #ffffff;
+ text-decoration: none;
+}
+.topbar div > ul .active > a, .nav .active > a {
+ background-color: #222;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+.topbar div > ul.secondary-nav, .nav.secondary-nav {
+ float: right;
+ margin-left: 10px;
+ margin-right: 0;
+}
+.topbar div > ul.secondary-nav .menu-dropdown,
+.nav.secondary-nav .menu-dropdown,
+.topbar div > ul.secondary-nav .dropdown-menu,
+.nav.secondary-nav .dropdown-menu {
+ right: 0;
+ border: 0;
+}
+.topbar div > ul a.menu:hover,
+.nav a.menu:hover,
+.topbar div > ul li.open .menu,
+.nav li.open .menu,
+.topbar div > ul .dropdown-toggle:hover,
+.nav .dropdown-toggle:hover,
+.topbar div > ul .dropdown.open .dropdown-toggle,
+.nav .dropdown.open .dropdown-toggle {
+ background: #444;
+ background: rgba(255, 255, 255, 0.05);
+}
+.topbar div > ul .menu-dropdown,
+.nav .menu-dropdown,
+.topbar div > ul .dropdown-menu,
+.nav .dropdown-menu {
+ background-color: #333;
+}
+.topbar div > ul .menu-dropdown a.menu,
+.nav .menu-dropdown a.menu,
+.topbar div > ul .dropdown-menu a.menu,
+.nav .dropdown-menu a.menu,
+.topbar div > ul .menu-dropdown .dropdown-toggle,
+.nav .menu-dropdown .dropdown-toggle,
+.topbar div > ul .dropdown-menu .dropdown-toggle,
+.nav .dropdown-menu .dropdown-toggle {
+ color: #ffffff;
+}
+.topbar div > ul .menu-dropdown a.menu.open,
+.nav .menu-dropdown a.menu.open,
+.topbar div > ul .dropdown-menu a.menu.open,
+.nav .dropdown-menu a.menu.open,
+.topbar div > ul .menu-dropdown .dropdown-toggle.open,
+.nav .menu-dropdown .dropdown-toggle.open,
+.topbar div > ul .dropdown-menu .dropdown-toggle.open,
+.nav .dropdown-menu .dropdown-toggle.open {
+ background: #444;
+ background: rgba(255, 255, 255, 0.05);
+}
+.topbar div > ul .menu-dropdown li a,
+.nav .menu-dropdown li a,
+.topbar div > ul .dropdown-menu li a,
+.nav .dropdown-menu li a {
+ color: #999;
+ text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
+}
+.topbar div > ul .menu-dropdown li a:hover,
+.nav .menu-dropdown li a:hover,
+.topbar div > ul .dropdown-menu li a:hover,
+.nav .dropdown-menu li a:hover {
+ background-color: #191919;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));
+ background-image: -moz-linear-gradient(top, #292929, #191919);
+ background-image: -ms-linear-gradient(top, #292929, #191919);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));
+ background-image: -webkit-linear-gradient(top, #292929, #191919);
+ background-image: -o-linear-gradient(top, #292929, #191919);
+ background-image: linear-gradient(top, #292929, #191919);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);
+ color: #ffffff;
+}
+.topbar div > ul .menu-dropdown .active a,
+.nav .menu-dropdown .active a,
+.topbar div > ul .dropdown-menu .active a,
+.nav .dropdown-menu .active a {
+ color: #ffffff;
+}
+.topbar div > ul .menu-dropdown .divider,
+.nav .menu-dropdown .divider,
+.topbar div > ul .dropdown-menu .divider,
+.nav .dropdown-menu .divider {
+ background-color: #222;
+ border-color: #444;
+}
+.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a {
+ padding: 4px 15px;
+}
+li.menu, .dropdown {
+ position: relative;
+}
+a.menu:after, .dropdown-toggle:after {
+ width: 0;
+ height: 0;
+ display: inline-block;
+ content: "↓";
+ text-indent: -99999px;
+ vertical-align: top;
+ margin-top: 8px;
+ margin-left: 4px;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #ffffff;
+ filter: alpha(opacity=50);
+ -khtml-opacity: 0.5;
+ -moz-opacity: 0.5;
+ opacity: 0.5;
+}
+.menu-dropdown, .dropdown-menu {
+ background-color: #ffffff;
+ float: left;
+ display: none;
+ position: absolute;
+ top: 40px;
+ z-index: 900;
+ min-width: 160px;
+ max-width: 220px;
+ _width: 160px;
+ margin-left: 0;
+ margin-right: 0;
+ padding: 6px 0;
+ zoom: 1;
+ border-color: #999;
+ border-color: rgba(0, 0, 0, 0.2);
+ border-style: solid;
+ border-width: 0 1px 1px;
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+ -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+}
+.menu-dropdown li, .dropdown-menu li {
+ float: none;
+ display: block;
+ background-color: none;
+}
+.menu-dropdown .divider, .dropdown-menu .divider {
+ height: 1px;
+ margin: 5px 0;
+ overflow: hidden;
+ background-color: #eee;
+ border-bottom: 1px solid #ffffff;
+}
+.topbar .dropdown-menu a, .dropdown-menu a {
+ display: block;
+ padding: 4px 15px;
+ clear: both;
+ font-weight: normal;
+ line-height: 18px;
+ color: #808080;
+ text-shadow: 0 1px 0 #ffffff;
+}
+.topbar .dropdown-menu a:hover,
+.dropdown-menu a:hover,
+.topbar .dropdown-menu a.hover,
+.dropdown-menu a.hover {
+ background-color: #dddddd;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));
+ background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -ms-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));
+ background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
+ background-image: linear-gradient(top, #eeeeee, #dddddd);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0);
+ color: #404040;
+ text-decoration: none;
+ -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
+ -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
+}
+.open .menu,
+.dropdown.open .menu,
+.open .dropdown-toggle,
+.dropdown.open .dropdown-toggle {
+ color: #ffffff;
+ background: #ccc;
+ background: rgba(0, 0, 0, 0.3);
+}
+.open .menu-dropdown,
+.dropdown.open .menu-dropdown,
+.open .dropdown-menu,
+.dropdown.open .dropdown-menu {
+ display: block;
+}
+.tabs, .pills {
+ margin: 0 0 18px;
+ padding: 0;
+ list-style: none;
+ zoom: 1;
+}
+.tabs:before,
+.pills:before,
+.tabs:after,
+.pills:after {
+ display: table;
+ content: "";
+ zoom: 1;
+}
+.tabs:after, .pills:after {
+ clear: both;
+}
+.tabs > li, .pills > li {
+ float: left;
+}
+.tabs > li > a, .pills > li > a {
+ display: block;
+}
+.tabs {
+ border-color: #ddd;
+ border-style: solid;
+ border-width: 0 0 1px;
+}
+.tabs > li {
+ position: relative;
+ margin-bottom: -1px;
+}
+.tabs > li > a {
+ padding: 0 15px;
+ margin-right: 2px;
+ line-height: 34px;
+ border: 1px solid transparent;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+.tabs > li > a:hover {
+ text-decoration: none;
+ background-color: #eee;
+ border-color: #eee #eee #ddd;
+}
+.tabs .active > a, .tabs .active > a:hover {
+ color: #808080;
+ background-color: #ffffff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default;
+}
+.tabs .menu-dropdown, .tabs .dropdown-menu {
+ top: 35px;
+ border-width: 1px;
+ -webkit-border-radius: 0 6px 6px 6px;
+ -moz-border-radius: 0 6px 6px 6px;
+ border-radius: 0 6px 6px 6px;
+}
+.tabs a.menu:after, .tabs .dropdown-toggle:after {
+ border-top-color: #999;
+ margin-top: 15px;
+ margin-left: 5px;
+}
+.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle {
+ border-color: #999;
+}
+.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after {
+ border-top-color: #555;
+}
+.pills a {
+ margin: 5px 3px 5px 0;
+ padding: 0 15px;
+ line-height: 30px;
+ text-shadow: 0 1px 1px #ffffff;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+.pills a:hover {
+ color: #ffffff;
+ text-decoration: none;
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
+ background-color: #00438a;
+}
+.pills .active a {
+ color: #ffffff;
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
+ background-color: #0069d6;
+}
+.pills-vertical > li {
+ float: none;
+}
+.tab-content > .tab-pane,
+.pill-content > .pill-pane,
+.tab-content > div,
+.pill-content > div {
+ display: none;
+}
+.tab-content > .active, .pill-content > .active {
+ display: block;
+}
+.breadcrumb {
+ padding: 7px 14px;
+ margin: 0 0 18px;
+ background-color: #f5f5f5;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));
+ background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));
+ background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: linear-gradient(top, #ffffff, #f5f5f5);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
+ border: 1px solid #ddd;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 1px 0 #ffffff;
+ -moz-box-shadow: inset 0 1px 0 #ffffff;
+ box-shadow: inset 0 1px 0 #ffffff;
+}
+.breadcrumb li {
+ display: inline;
+ text-shadow: 0 1px 0 #ffffff;
+}
+.breadcrumb .divider {
+ padding: 0 5px;
+ color: #bfbfbf;
+}
+.breadcrumb .active a {
+ color: #404040;
+}
+.hero-unit {
+ background-color: #f5f5f5;
+ margin-bottom: 30px;
+ padding: 60px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+.hero-unit h1 {
+ margin-bottom: 0;
+ font-size: 60px;
+ line-height: 1;
+ letter-spacing: -1px;
+}
+.hero-unit p {
+ font-size: 18px;
+ font-weight: 200;
+ line-height: 27px;
+}
+footer {
+ margin-top: 17px;
+ padding-top: 17px;
+ border-top: 1px solid #eee;
+}
+.page-header {
+ margin-bottom: 17px;
+ border-bottom: 1px solid #ddd;
+ -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+.page-header h1 {
+ margin-bottom: 8px;
+}
+.btn.danger,
+.alert-message.danger,
+.btn.danger:hover,
+.alert-message.danger:hover,
+.btn.error,
+.alert-message.error,
+.btn.error:hover,
+.alert-message.error:hover,
+.btn.success,
+.alert-message.success,
+.btn.success:hover,
+.alert-message.success:hover,
+.btn.info,
+.alert-message.info,
+.btn.info:hover,
+.alert-message.info:hover {
+ color: #ffffff;
+}
+.btn .close, .alert-message .close {
+ font-family: Arial, sans-serif;
+ line-height: 18px;
+}
+.btn.danger,
+.alert-message.danger,
+.btn.error,
+.alert-message.error {
+ background-color: #c43c35;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
+ background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: linear-gradient(top, #ee5f5b, #c43c35);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ border-color: #c43c35 #c43c35 #882a25;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+.btn.success, .alert-message.success {
+ background-color: #57a957;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
+ background-image: -moz-linear-gradient(top, #62c462, #57a957);
+ background-image: -ms-linear-gradient(top, #62c462, #57a957);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
+ background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+ background-image: -o-linear-gradient(top, #62c462, #57a957);
+ background-image: linear-gradient(top, #62c462, #57a957);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ border-color: #57a957 #57a957 #3d773d;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+.btn.info, .alert-message.info {
+ background-color: #339bb9;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
+ background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: linear-gradient(top, #5bc0de, #339bb9);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ border-color: #339bb9 #339bb9 #22697d;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+.btn {
+ cursor: pointer;
+ display: inline-block;
+ background-color: #e6e6e6;
+ background-repeat: no-repeat;
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
+ background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
+ background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
+ padding: 5px 14px 6px;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+ color: #333;
+ font-size: 13px;
+ line-height: normal;
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -webkit-transition: 0.1s linear all;
+ -moz-transition: 0.1s linear all;
+ -ms-transition: 0.1s linear all;
+ -o-transition: 0.1s linear all;
+ transition: 0.1s linear all;
+}
+.btn:hover {
+ background-position: 0 -15px;
+ color: #333;
+ text-decoration: none;
+}
+.btn:focus {
+ outline: 1px dotted #666;
+}
+.btn.primary {
+ color: #ffffff;
+ background-color: #0064cd;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
+ background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
+ background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
+ background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
+ background-image: -o-linear-gradient(top, #049cdb, #0064cd);
+ background-image: linear-gradient(top, #049cdb, #0064cd);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ border-color: #0064cd #0064cd #003f81;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+.btn.active, .btn:active {
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.btn.disabled {
+ cursor: default;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ filter: alpha(opacity=65);
+ -khtml-opacity: 0.65;
+ -moz-opacity: 0.65;
+ opacity: 0.65;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+.btn[disabled] {
+ cursor: default;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ filter: alpha(opacity=65);
+ -khtml-opacity: 0.65;
+ -moz-opacity: 0.65;
+ opacity: 0.65;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+.btn.large {
+ font-size: 15px;
+ line-height: normal;
+ padding: 9px 14px 9px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+.btn.small {
+ padding: 7px 9px 7px;
+ font-size: 11px;
+}
+:root .alert-message, :root .btn {
+ border-radius: 0 \0;
+}
+button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+.close {
+ float: right;
+ color: #000000;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 13.5px;
+ text-shadow: 0 1px 0 #ffffff;
+ filter: alpha(opacity=25);
+ -khtml-opacity: 0.25;
+ -moz-opacity: 0.25;
+ opacity: 0.25;
+}
+.close:hover {
+ color: #000000;
+ text-decoration: none;
+ filter: alpha(opacity=40);
+ -khtml-opacity: 0.4;
+ -moz-opacity: 0.4;
+ opacity: 0.4;
+}
+.alert-message {
+ position: relative;
+ padding: 7px 15px;
+ margin-bottom: 18px;
+ color: #404040;
+ background-color: #eedc94;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
+ background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
+ background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
+ background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
+ background-image: -o-linear-gradient(top, #fceec1, #eedc94);
+ background-image: linear-gradient(top, #fceec1, #eedc94);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ border-color: #eedc94 #eedc94 #e4c652;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ border-width: 1px;
+ border-style: solid;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+}
+.alert-message .close {
+ margin-top: 1px;
+ *margin-top: 0;
+}
+.alert-message a {
+ font-weight: bold;
+ color: #404040;
+}
+.alert-message.danger p a,
+.alert-message.error p a,
+.alert-message.success p a,
+.alert-message.info p a {
+ color: #ffffff;
+}
+.alert-message h5 {
+ line-height: 18px;
+}
+.alert-message p {
+ margin-bottom: 0;
+}
+.alert-message div {
+ margin-top: 5px;
+ margin-bottom: 2px;
+ line-height: 28px;
+}
+.alert-message .btn {
+ -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
+ -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
+}
+.alert-message.block-message {
+ background-image: none;
+ background-color: #fdf5d9;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ padding: 14px;
+ border-color: #fceec1;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+.alert-message.block-message ul, .alert-message.block-message p {
+ margin-right: 30px;
+}
+.alert-message.block-message ul {
+ margin-bottom: 0;
+}
+.alert-message.block-message li {
+ color: #404040;
+}
+.alert-message.block-message .alert-actions {
+ margin-top: 5px;
+}
+.alert-message.block-message.error, .alert-message.block-message.success, .alert-message.block-message.info {
+ color: #404040;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+.alert-message.block-message.error {
+ background-color: #fddfde;
+ border-color: #fbc7c6;
+}
+.alert-message.block-message.success {
+ background-color: #d1eed1;
+ border-color: #bfe7bf;
+}
+.alert-message.block-message.info {
+ background-color: #ddf4fb;
+ border-color: #c6edf9;
+}
+.alert-message.block-message.danger p a,
+.alert-message.block-message.error p a,
+.alert-message.block-message.success p a,
+.alert-message.block-message.info p a {
+ color: #404040;
+}
+.pagination {
+ height: 36px;
+ margin: 18px 0;
+}
+.pagination ul {
+ float: left;
+ margin: 0;
+ border: 1px solid #ddd;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.pagination li {
+ display: inline;
+}
+.pagination a {
+ float: left;
+ padding: 0 14px;
+ line-height: 34px;
+ border-right: 1px solid;
+ border-right-color: #ddd;
+ border-right-color: rgba(0, 0, 0, 0.15);
+ *border-right-color: #ddd;
+ /* IE6-7 */
+
+ text-decoration: none;
+}
+.pagination a:hover, .pagination .active a {
+ background-color: #c7eefe;
+}
+.pagination .disabled a, .pagination .disabled a:hover {
+ background-color: transparent;
+ color: #bfbfbf;
+}
+.pagination .next a {
+ border: 0;
+}
+.well {
+ background-color: #f5f5f5;
+ margin-bottom: 20px;
+ padding: 19px;
+ min-height: 20px;
+ border: 1px solid #eee;
+ border: 1px solid rgba(0, 0, 0, 0.05);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, 0.15);
+}
+.modal-backdrop {
+ background-color: #000000;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 10000;
+}
+.modal-backdrop.fade {
+ opacity: 0;
+}
+.modal-backdrop, .modal-backdrop.fade.in {
+ filter: alpha(opacity=80);
+ -khtml-opacity: 0.8;
+ -moz-opacity: 0.8;
+ opacity: 0.8;
+}
+.modal {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ z-index: 11000;
+ width: 560px;
+ margin: -250px 0 0 -280px;
+ background-color: #ffffff;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ *border: 1px solid #999;
+ /* IE6-7 */
+
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+}
+.modal .close {
+ margin-top: 7px;
+}
+.modal.fade {
+ -webkit-transition: opacity .3s linear, top .3s ease-out;
+ -moz-transition: opacity .3s linear, top .3s ease-out;
+ -ms-transition: opacity .3s linear, top .3s ease-out;
+ -o-transition: opacity .3s linear, top .3s ease-out;
+ transition: opacity .3s linear, top .3s ease-out;
+ top: -25%;
+}
+.modal.fade.in {
+ top: 50%;
+}
+.modal-header {
+ border-bottom: 1px solid #eee;
+ padding: 5px 15px;
+}
+.modal-body {
+ padding: 15px;
+}
+.modal-body form {
+ margin-bottom: 0;
+}
+.modal-footer {
+ background-color: #f5f5f5;
+ padding: 14px 15px 15px;
+ border-top: 1px solid #ddd;
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+ -webkit-box-shadow: inset 0 1px 0 #ffffff;
+ -moz-box-shadow: inset 0 1px 0 #ffffff;
+ box-shadow: inset 0 1px 0 #ffffff;
+ zoom: 1;
+ margin-bottom: 0;
+}
+.modal-footer:before, .modal-footer:after {
+ display: table;
+ content: "";
+ zoom: 1;
+}
+.modal-footer:after {
+ clear: both;
+}
+.modal-footer .btn {
+ float: right;
+ margin-left: 5px;
+}
+.modal .popover, .modal .twipsy {
+ z-index: 12000;
+}
+.twipsy {
+ display: block;
+ position: absolute;
+ visibility: visible;
+ padding: 5px;
+ font-size: 11px;
+ z-index: 1000;
+ filter: alpha(opacity=80);
+ -khtml-opacity: 0.8;
+ -moz-opacity: 0.8;
+ opacity: 0.8;
+}
+.twipsy.fade.in {
+ filter: alpha(opacity=80);
+ -khtml-opacity: 0.8;
+ -moz-opacity: 0.8;
+ opacity: 0.8;
+}
+.twipsy.above .twipsy-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top: 5px solid #000000;
+}
+.twipsy.left .twipsy-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-left: 5px solid #000000;
+}
+.twipsy.below .twipsy-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-bottom: 5px solid #000000;
+}
+.twipsy.right .twipsy-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-right: 5px solid #000000;
+}
+.twipsy-inner {
+ padding: 3px 8px;
+ background-color: #000000;
+ color: white;
+ text-align: center;
+ max-width: 200px;
+ text-decoration: none;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.twipsy-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+}
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1000;
+ padding: 5px;
+ display: none;
+}
+.popover.above .arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top: 5px solid #000000;
+}
+.popover.right .arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-right: 5px solid #000000;
+}
+.popover.below .arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-bottom: 5px solid #000000;
+}
+.popover.left .arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-left: 5px solid #000000;
+}
+.popover .arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+}
+.popover .inner {
+ background: #000000;
+ background: rgba(0, 0, 0, 0.8);
+ padding: 3px;
+ overflow: hidden;
+ width: 280px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+}
+.popover .title {
+ background-color: #f5f5f5;
+ padding: 9px 15px;
+ line-height: 1;
+ -webkit-border-radius: 3px 3px 0 0;
+ -moz-border-radius: 3px 3px 0 0;
+ border-radius: 3px 3px 0 0;
+ border-bottom: 1px solid #eee;
+}
+.popover .content {
+ background-color: #ffffff;
+ padding: 14px;
+ -webkit-border-radius: 0 0 3px 3px;
+ -moz-border-radius: 0 0 3px 3px;
+ border-radius: 0 0 3px 3px;
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+}
+.popover .content p, .popover .content ul, .popover .content ol {
+ margin-bottom: 0;
+}
+.fade {
+ -webkit-transition: opacity 0.15s linear;
+ -moz-transition: opacity 0.15s linear;
+ -ms-transition: opacity 0.15s linear;
+ -o-transition: opacity 0.15s linear;
+ transition: opacity 0.15s linear;
+ opacity: 0;
+}
+.fade.in {
+ opacity: 1;
+}
+.label {
+ padding: 1px 3px 2px;
+ font-size: 9.75px;
+ font-weight: bold;
+ color: #ffffff;
+ text-transform: uppercase;
+ white-space: nowrap;
+ background-color: #bfbfbf;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.label.important {
+ background-color: #c43c35;
+}
+.label.warning {
+ background-color: #f89406;
+}
+.label.success {
+ background-color: #46a546;
+}
+.label.notice {
+ background-color: #62cffc;
+}
+.media-grid {
+ margin-left: -20px;
+ margin-bottom: 0;
+ zoom: 1;
+}
+.media-grid:before, .media-grid:after {
+ display: table;
+ content: "";
+ zoom: 1;
+}
+.media-grid:after {
+ clear: both;
+}
+.media-grid li {
+ display: inline;
+}
+.media-grid a {
+ float: left;
+ padding: 4px;
+ margin: 0 0 18px 20px;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.media-grid a img {
+ display: block;
+}
+.media-grid a:hover {
+ border-color: #0069d6;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
diff --git a/logback-site/src/site/pages/documentation.html b/logback-site/src/site/pages/documentation.html
index fac7f4e..b2e1250 100644
--- a/logback-site/src/site/pages/documentation.html
+++ b/logback-site/src/site/pages/documentation.html
@@ -8,11 +8,64 @@
<link rel="stylesheet" type="text/css" href="css/common.css" />
<link rel="stylesheet" type="text/css" href="css/screen.css" media="screen" />
<link rel="stylesheet" type="text/css" href="css/_print.css" media="print" />
+ <link rel="stylesheet" type="text/css" href="css/bootstrap.css" media="screen" />
+
</head>
<body>
<script type="text/javascript">prefix='';</script>
<script src="templates/header.js" type="text/javascript"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
+ <script src="js/bootstrap-dropdown.js" type="text/javascript"></script>
+ <script src="http://twitter.github.com/bootstrap/1.4.0/bootstrap-scrollspy.js" type="text/javascript"></script>
+
+ <div id="documentation.html" class="topbar" data-dropdown="dropdown" data-scrollspy="scrollspy">
+ <div class="fill">
+ <div class="container">
+ <a class="brand" href="#">Logback</a>
+ <ul class="nav">
+ <li><a href="index.html">Introduction</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="documentation.html">Documentaiton</a></li>
+ <li><a href="news.html">News</a></li>
+
+ <li class="menu">
+ <a href="#" class="menu">Support</a>
+ <ul class="menu-dropdown">
+ <li><a href="mailinglist.html">Mailing lists</a></li>
+ <li><a href="bugreport.html">Bug report</a></li>
+ <li><a href="repos.html">Source Repository</a></li>
+ <li><a href="http://www.qos.ch/shop/products/professionalSupport">Support offerings</a></li>
+ </ul>
+ </li>
+
+ <li class="menu">
+ <a href="#" class="menu">Sister projects</a>
+ <ul class="menu-dropdown">
+ <li><a href="http://audit.qos.ch/">Logback-audit</a></li>
+ </ul>
+ </li>
+
+ <li class="menu">
+ <a href="#" class="menu">Online tools</a>
+ <ul class="menu-dropdown">
+ <li><a href="http://logback.qos.ch/translator/">log4j.properties translator</a></li>
+ <li><a href="http://logback.qos.ch/translator/asGroovy.html">logback.xml to Groovy</a></li>
+ </ul>
+ </li>
+
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ this.$topbar
+ .find(this.selector + '[href="documentation.html"]')
+ .parent('li')
+ .addClass('active')
+ </script>
+
<div id="left">
<noscript>Please turn on Javascript to view this menu</noscript>
<script src="templates/left.js" type="text/javascript"></script>
diff --git a/logback-site/src/site/pages/index.html b/logback-site/src/site/pages/index.html
index 7ec14b0..0b57985 100644
--- a/logback-site/src/site/pages/index.html
+++ b/logback-site/src/site/pages/index.html
@@ -8,11 +8,63 @@
<link rel="stylesheet" type="text/css" href="css/common.css" />
<link rel="stylesheet" type="text/css" href="css/screen.css" media="screen" />
<link rel="stylesheet" type="text/css" href="css/_print.css" media="print" />
+ <link rel="stylesheet" type="text/css" href="css/bootstrap.css" media="screen" />
</head>
<body>
<script type="text/javascript">prefix='';</script>
<script src="templates/header.js" type="text/javascript"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript" ></script>
+ <script src="js/bootstrap-dropdown.js" type="text/javascript"></script>
+
+ <div id="topbar" class="topbar" data-dropdown="dropdown" data-scrollspy="scrollspy">
+ <div class="fill">
+ <div class="container">
+
+ <a class="brand" href="#">Logback</a>
+ <ul class="nav">
+ <li><a href="index.html">Introduction</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="documentation.html">Documentaiton</a></li>
+ <li><a href="news.html">News</a></li>
+
+ <li class="menu">
+ <a href="#" class="menu">Support</a>
+ <ul class="menu-dropdown">
+ <li><a href="mailinglist.html">Mailing lists</a></li>
+ <li><a href="bugreport.html">Bug report</a></li>
+ <li><a href="repos.html">Source Repository</a></li>
+ <li><a href="http://www.qos.ch/shop/products/professionalSupport">Support offerings</a></li>
+ </ul>
+ </li>
+
+ <li class="menu">
+ <a href="#" class="menu">Sister projects</a>
+ <ul class="menu-dropdown">
+ <li class="active"><a href="http://audit.qos.ch/">Logback-audit</a></li>
+ </ul>
+ </li>
+
+ <li class="menu">
+ <a href="#" class="menu">Online tools</a>
+ <ul class="menu-dropdown">
+ <li><a href="http://logback.qos.ch/translator/">log4j.properties translator</a></li>
+ <li><a href="http://logback.qos.ch/translator/asGroovy.html">logback.xml to Groovy</a></li>
+ </ul>
+ </li>
+
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ $('#topbar')
+ .find('[href="index.html"]')
+ .parent('li')
+ .addClass('active')
+ </script>
+
<div id="left">
<noscript>Please turn on Javascript to view this menu</noscript>
<script src="templates/left.js" type="text/javascript"></script>
@@ -26,6 +78,12 @@
leaves off</a>.
</p>
+
+ <div class="row">
+ <div class="span6">
+ <p>The default grid system provided as part of Bootstrap is a 940px wide 16-column grid. Its a flavor of the popular 960 grid system, but without the additional margin/padding on the left and right sides.</p>
+ </div>
+ </div>
<p>Logback's basic architecture is sufficiently generic so as to
apply under different circumstances. At present time, logback is
divided into three modules, logback-core, logback-classic and
diff --git a/logback-site/src/site/pages/js/bootstrap-dropdown.js b/logback-site/src/site/pages/js/bootstrap-dropdown.js
new file mode 100644
index 0000000..fda6da5
--- /dev/null
+++ b/logback-site/src/site/pages/js/bootstrap-dropdown.js
@@ -0,0 +1,55 @@
+/* ============================================================
+ * bootstrap-dropdown.js v1.4.0
+ * http://twitter.github.com/bootstrap/javascript.html#dropdown
+ * ============================================================
+ * Copyright 2011 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* DROPDOWN PLUGIN DEFINITION
+ * ========================== */
+
+ $.fn.dropdown = function ( selector ) {
+ return this.each(function () {
+ $(this).delegate(selector || d, 'click', function (e) {
+ var li = $(this).parent('li')
+ , isActive = li.hasClass('open')
+
+ clearMenus()
+ !isActive && li.toggleClass('open')
+ return false
+ })
+ })
+ }
+
+ /* APPLY TO STANDARD DROPDOWN ELEMENTS
+ * =================================== */
+
+ var d = 'a.menu, .dropdown-toggle'
+
+ function clearMenus() {
+ $(d).parent('li').removeClass('open')
+ }
+
+ $(function () {
+ $('html').bind("click", clearMenus)
+ $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' )
+ })
+
+}( window.jQuery || window.ender );
-----------------------------------------------------------------------
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch master updated. v_1.0.0-59-g214a785
by git-noreply@pixie.qos.ch 21 Dec '11
by git-noreply@pixie.qos.ch 21 Dec '11
21 Dec '11
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via 214a78548b48b2c1f39ee0ce0d2ab51a85511e64 (commit)
from dc9180b6daf4950b601e9137fff093d4ba093a70 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=214a78548b48b2c1f39ee0ce…
http://github.com/ceki/logback/commit/214a78548b48b2c1f39ee0ce0d2ab51a85511…
commit 214a78548b48b2c1f39ee0ce0d2ab51a85511e64
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Thu Dec 22 00:12:25 2011 +0100
add blurb about LBCORE-242
diff --git a/logback-site/src/site/pages/news.html b/logback-site/src/site/pages/news.html
index dd9ba9a..5a399c7 100644
--- a/logback-site/src/site/pages/news.html
+++ b/logback-site/src/site/pages/news.html
@@ -29,7 +29,7 @@
<hr width="80%" align="center" />
- <h3>xx of November, 2011 - Release of version 1.0.1</h3>
+ <h3>xx of December, 2011 - Release of version 1.0.1</h3>
<p>Added new property the <span
class="option">cleanHistoryOnStart</span> to <a
@@ -41,6 +41,11 @@
reported by Bruce E. Irving.
</p>
+ <p>It is now possible to specify multiple %d token in the file
+ name pattern of TimeBasedRollingPolicy. This feature was requested
+ in <a href="http://jira.qos.ch/browse/LBCORE-242">/LBCORE-242</a>
+ by Thomas Corte.</p>
+
<p>Logback now supports suppressed exceptions introduced in Java
7. This fixes <a
href="http://jira.qos.ch/browse/LBCLASSIC-276">LBCLASSIC-276</a>.
-----------------------------------------------------------------------
Summary of changes:
logback-site/src/site/pages/news.html | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch master updated. v_1.0.0-58-gdc9180b
by git-noreply@pixie.qos.ch 21 Dec '11
by git-noreply@pixie.qos.ch 21 Dec '11
21 Dec '11
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via dc9180b6daf4950b601e9137fff093d4ba093a70 (commit)
from 7900adbea8f61de47e933d892cbaee1d61e9f111 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=dc9180b6daf4950b601e9137…
http://github.com/ceki/logback/commit/dc9180b6daf4950b601e9137fff093d4ba093…
commit dc9180b6daf4950b601e9137fff093d4ba093a70
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Thu Dec 22 00:08:58 2011 +0100
add a .prop class as a synonym for .option
diff --git a/logback-site/src/site/pages/css/common.css b/logback-site/src/site/pages/css/common.css
index 1c4e954..fd1ffaf 100644
--- a/logback-site/src/site/pages/css/common.css
+++ b/logback-site/src/site/pages/css/common.css
@@ -238,7 +238,7 @@ table.bodyTable tr td p:first-child {
}
-.option {
+.option, .prop {
border-top: 1px dotted black;
border-bottom: 1px dotted black;
border-left: 1px dotted black;
diff --git a/logback-site/src/site/pages/manual/appenders.html b/logback-site/src/site/pages/manual/appenders.html
index 130aebc..23aa8e7 100644
--- a/logback-site/src/site/pages/manual/appenders.html
+++ b/logback-site/src/site/pages/manual/appenders.html
@@ -259,7 +259,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</tr>
<tr class="a">
- <td><b><span class="option">encoder</span></b></td>
+ <td><b><span class="prop">encoder</span></b></td>
<td><a
href="../xref/ch/qos/logback/core/encoder/Encoder.html"><code>Encoder</code></a></td>
@@ -275,9 +275,9 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
we have conducted, it appears that turning off immediate flushing or
buffering of character to byte conversions have rather small impact
on performance. As such, as of logback version 0.9.19, the <span
- class="option">ImmediateFlush</span>, <span
- class="option">BufferedIO</span> and <span
- class="option">BufferSize</span> properties have been removed
+ class="prop">ImmediateFlush</span>, <span
+ class="prop">BufferedIO</span> and <span
+ class="prop">BufferSize</span> properties have been removed
without replacement.
</p>
@@ -315,14 +315,14 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<th>Description</th>
</tr>
<tr class="b">
- <td><b><span class="option">encoder</span></b></td>
+ <td><b><span class="prop">encoder</span></b></td>
<td>
<a href="../xref/ch/qos/logback/core/encoder/Encoder.html"><code>Encoder</code></a>
</td>
<td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="a">
- <td><b><span class="option">target</span></b></td>
+ <td><b><span class="prop">target</span></b></td>
<td><code>String</code></td>
<td>
One of the String values <em>System.out</em> or
@@ -375,9 +375,9 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
href="../xref/ch/qos/logback/core/FileAppender.html"><code>FileAppender</code></a>,
a subclass of <code>OutputStreamAppender</code>, appends log events into
a file. The target file is specified by the <span
- class="option">File</span> option. If the file already exists, it
+ class="prop">File</span> option. If the file already exists, it
is either appended to, or truncated depending on the value of the
- <span class="option">Append</span> option.
+ <span class="prop">Append</span> option.
</p>
<table class="bodyTable properties">
@@ -387,17 +387,17 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<th>Description</th>
</tr>
<tr class="alt">
- <td><b><span class="option">append</span></b></td>
+ <td><b><span class="prop">append</span></b></td>
<td><code>boolean</code></td>
<td>If true, events are appended at the end of an existing
- file. Otherwise, if <span class="option">Append</span> is
+ file. Otherwise, if <span class="prop">Append</span> is
false, any existing file is truncated. The <span
- class="option">Append</span> option is set to true by
+ class="prop">Append</span> option is set to true by
default.
</td>
</tr>
<tr >
- <td><b><span class="option">encoder</span></b></td>
+ <td><b><span class="prop">encoder</span></b></td>
<td>
<a href="../xref/ch/qos/logback/core/encoder/Encoder.html"><code>Encoder</code></a>
</td>
@@ -406,7 +406,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<tr class="alt">
- <td><b><span class="option">file</span></b></td>
+ <td><b><span class="prop">file</span></b></td>
<td><code>String</code></td>
<td>The name of the file to write to. If the file does not
exist, it is created. On the MS Windows platform users
@@ -416,7 +416,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
a single tab character <em>(\u0009)</em>. Correct values can
be specified as <em>c:/temp/test.log</em> or alternatively as
<em>c:\\temp\\test.log</em>. The <span
- class="option">File</span> option has no default value.
+ class="prop">File</span> option has no default value.
<p>If the parent directory of the file does not exist,
<code>FileAppender</code> will automatically create it,
@@ -438,7 +438,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
value for prudent mode is <code>false</code>.
<p>Prudent mode implies that <span
- class="option">Append</span> property is automatically set to
+ class="prop">Append</span> property is automatically set to
true.
</p>
@@ -461,7 +461,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
per second, the impact on performance should be
negligible. Applications generating 100 or more I/O
operations per second can see an impact on performance and
- should avoid using <span class="option">prudent</span> mode.
+ should avoid using <span class="prop">prudent</span> mode.
</p>
<p>Prudent mode can be used in conjunction with
@@ -629,24 +629,24 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<th>Description</th>
</tr>
<tr class="b">
- <td><b><span class="option">file</span></b></td>
+ <td><b><span class="prop">file</span></b></td>
<td><code>String</code></td>
<td>See <code>FileAppender</code> properties.</td>
</tr>
<tr class="a">
- <td><b><span class="option">append</span></b></td>
+ <td><b><span class="prop">append</span></b></td>
<td><code>boolean</code></td>
<td>See <code>FileAppender</code> properties.</td>
</tr>
<tr class="b">
- <td><b><span class="option">encoder</span></b></td>
+ <td><b><span class="prop">encoder</span></b></td>
<td>
<a href="../xref/ch/qos/logback/core/encoder/Encoder.html"><code>Encoder</code></a>
</td>
<td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="a">
- <td><b><span class="option">rollingPolicy</span></b></td>
+ <td><b><span class="prop">rollingPolicy</span></b></td>
<td><code>RollingPolicy</code></td>
<td>This option is the component that will dictate
<code>RollingFileAppender</code>'s behavior when rollover
@@ -654,7 +654,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</td>
</tr>
<tr class="b">
- <td><b><span class="option">triggeringPolicy</span></b></td>
+ <td><b><span class="prop">triggeringPolicy</span></b></td>
<td><code>TriggeringPolicy</code></td>
<td>
This option is the component that will tell
@@ -663,7 +663,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</td>
</tr>
<tr class="a">
- <td valign="top"><span class="option"><a name="prudentWithRolling"
+ <td valign="top"><span class="prop"><a name="prudentWithRolling"
href="#prudentWithRolling"><b>prudent</b></a></span></td>
<td valign="top"><code>boolean</code></td>
@@ -687,7 +687,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
allowed. (We can't have one JVM writing to a file while
another JVM is compressing it.) </li>
- <li>The <span class="option">file</span> property of
+ <li>The <span class="prop">file</span> property of
<code>FileAppender</code> cannot be set and must be left
blank. Indeed, most operating systems do not allow renaming
of a file while another process has it opened.
@@ -748,15 +748,14 @@ public interface RollingPolicy extends LifeCycle {
for example by day or by month.
<code>TimeBasedRollingPolicy</code> assumes the responsibility for
rollover as well as for the triggering of said rollover. Indeed,
- <code>TimeBasedTriggeringPolicy</code> implements both
+ <code>TimeBasedTriggeringPolicy</code> implements <em>both</em>
<code>RollingPolicy</code> and <code>TriggeringPolicy</code>
interfaces.
</p>
- <p><code>TimeBasedRollingPolicy</code>'s configuration has two
- properties, the mandatory <span
- class="option">fileNamePattern</span> property and the optional
- <span class="option">maxHistory</span> property.
+ <p><code>TimeBasedRollingPolicy</code>'s configuration takes one
+ mandatory <span class="prop">fileNamePattern</span> property and
+ several optional properties.
</p>
<table class="bodyTable">
@@ -766,10 +765,10 @@ public interface RollingPolicy extends LifeCycle {
<th>Description</th>
</tr>
<tr class="b">
- <td><b><span class="option">fileNamePattern</span></b></td>
+ <td><b><span class="prop">fileNamePattern</span></b></td>
<td><code>String</code></td>
<td>
- The mandatory <span class="option">fileNamePattern</span>
+ The mandatory <span class="prop">fileNamePattern</span>
property defines the name of the rolled-over (archived) log
files. Its value should consist of the name of the file, plus
a suitably placed <em>%d</em> conversion specifier. The
@@ -777,23 +776,26 @@ public interface RollingPolicy extends LifeCycle {
pattern as specified by the
<code>java.text.SimpleDateFormat</code> class. If the
date-and-time pattern is omitted, then the default pattern
- <em>yyyy-MM-dd</em> is assumed. The <span
- class="option">File</span> property in
+ <em>yyyy-MM-dd</em> is assumed. <b>The rollover period is
+ inferred from the value of <span
+ class="prop">fileNamePattern</span>.</b>
+
+
+ <p>Note that the <span class="prop">file</span> property in
<code>RollingFileAppender</code> (the parent of
<code>TimeBasedRollingPolicy</code>) can be either set or
- omitted.
-
- <p>By setting the <span class="option">file</span> property
- of the containing <code>FileAppender</code>, you can decouple
- the location of the active log file and the location of the
- archived log files. The current logs will be always targeted
- at the file specified by the <span class="option">file</span>
- property. It follows that the name of the currently active
- log file will not change over time. However, if you choose to
- omit the <span class="option">file</span> property, then the
- active file will be computed anew for each period based on
- the value of <span class="option">fileNamePattern</span>.
- The examples below should clarify the point.
+ omitted. By setting the <span class="prop">file</span>
+ property of the containing <code>FileAppender</code>, you can
+ decouple the location of the active log file and the location
+ of the archived log files. The current logs will be always
+ targeted at the file specified by the <span
+ class="prop">file</span> property. It follows that the name
+ of the currently active log file will not change over
+ time. However, if you choose to omit the <span
+ class="prop">file</span> property, then the active file
+ will be computed anew for each period based on the value of
+ <span class="prop">fileNamePattern</span>. The examples
+ below should clarify this point.
</p>
<p>The date-and-time pattern, as found within the accolades
@@ -803,12 +805,17 @@ public interface RollingPolicy extends LifeCycle {
date-and-time pattern will be interpreted as directory
separators.
</p>
+
+ <p>It is possible to specify multiple %d tokens but only one
+ of which can be primary, i.e. used to infer the rollover
+ period. All other tokens <em>must</em> be marked as auxiliary
+ by passing the AUX paramater (see examples below).</p>
</td>
</tr>
<tr class="a">
- <td><span class="option"><b>maxHistory</b></span></td>
+ <td><span class="prop"><b>maxHistory</b></span></td>
<td>int</td>
- <td>The optional <span class="option">maxHistory</span>
+ <td>The optional <span class="prop">maxHistory</span>
property controls the maximum number of archive files to keep,
deleting older files. For example, if you specify monthly
rollover, and set maxHistory to 6, then 6 months worth of
@@ -820,7 +827,7 @@ public interface RollingPolicy extends LifeCycle {
</tr>
<tr class="b">
- <td><span class="option"><b>cleanHistoryOnStart</b></span></td>
+ <td><span class="prop"><b>cleanHistoryOnStart</b></span></td>
<td>boolean</td>
<td>
<p>If set to true, archive removal will be executed on
@@ -832,7 +839,7 @@ public interface RollingPolicy extends LifeCycle {
roll over to be triggered. It follows that for such
short-lived applications archive removal may never get a
chance to execute. By setting <span
- class="option">cleanHistoryOnStart</span> to true, archive
+ class="prop">cleanHistoryOnStart</span> to true, archive
removal is performed at appender start up.</p>
</td>
</tr>
@@ -847,7 +854,7 @@ public interface RollingPolicy extends LifeCycle {
<table class="bodyTable">
<tr class="a">
<th>
- <span class="option">fileNamePattern</span>
+ <span class="prop">fileNamePattern</span>
</th>
<th>Rollover schedule</th>
<th>Example</th>
@@ -863,14 +870,14 @@ public interface RollingPolicy extends LifeCycle {
</td>
<td>
- <p><span class="option">file</span> property not set: During November
+ <p><span class="prop">file</span> property not set: During November
23rd, 2006, logging output will go to the file
<em>/wombat/foo.2006-11-23</em>. At midnight and for the
rest of the 24th, logging output will be directed to
<em>/wombat/foo.2006-11-24</em>.
</p>
- <p><span class="option">file</span> property set to
+ <p><span class="prop">file</span> property set to
<em>/wombat/foo.txt</em>: During November 23rd, 2006, logging
output will go to the file <em>/wombat/foo.txt</em>. At
midnight, <em>foo.txt</em> will be renamed as
@@ -890,14 +897,14 @@ public interface RollingPolicy extends LifeCycle {
</td>
<td>Rollover at the beginning of each month.</td>
<td>
- <p><span class="option">file</span> property not set: During
+ <p><span class="prop">file</span> property not set: During
the month of October 2006, logging output will go to
<em>/wombat/2006/10/foo.txt</em>. After midnight of October
31st and for the rest of November, logging output will be
directed to <em>/wombat/2006/11/foo.txt</em>.
</p>
- <p><span class="option">file</span> property set to
+ <p><span class="prop">file</span> property set to
<em>/wombat/foo.txt</em>: The active log file will always be
<em>/wombat/foo.txt</em>. During the month of October 2006,
logging output will go to <em>/wombat/foo.txt</em>. At
@@ -924,7 +931,7 @@ public interface RollingPolicy extends LifeCycle {
</tr>
<tr class="a">
<td class="small">
- <em>/wombat/foo. /<br/>%d{yyyy-MM-dd_HH}.log</em>
+ <em>/wombat/foo%d{yyyy-MM-dd_HH}.log</em>
</td>
<td>Rollover at the top of each hour.</td>
<td>Similar to previous cases, except that rollover will occur
@@ -933,13 +940,32 @@ public interface RollingPolicy extends LifeCycle {
</tr>
<tr class="b">
<td class="small">
- <em>/wombat/foo. /<br/>%d{yyyy-MM-dd_HH-mm}.log</em>
+ <em>/wombat/foo%d{yyyy-MM-dd_HH-mm}.log</em>
</td>
<td>Rollover at the beginning of every minute.</td>
<td>Similar to previous cases, except that rollover will occur
at the beginning of every minute.
</td>
</tr>
+
+
+ <tr class="a">
+ <td class="small">
+ <em>/foo/%d{yyyy-MM,<b>aux</b>}/%d.log</em>
+ </td>
+ <td>Rollover daily. Archives located under a folder contaning
+ year and month.
+ </td>
+ <td>In this example, the first %d token is marked as
+ <b>aux</b>iliary. The second %d token, with time and date
+ pattern omitted, is then assumed to be primary. Thus, rollover
+ will occur daily (default for %d) and the folder name will
+ depend on the year and month. For example, during the month of
+ November 2006, archived files will all placed under the
+ /foo/2006-11/ folder, e.g <em>/foo/2006-11/2006-11-14.log</em>.
+ </td>
+
+ </tr>
</table>
<p>Any forward or backward slash characters are interpreted as
@@ -952,13 +978,13 @@ public interface RollingPolicy extends LifeCycle {
<p>Just like <code>FixedWindowRollingPolicy</code>,
<code>TimeBasedRollingPolicy</code> supports automatic file
compression. This feature is enabled if the value of the <span
- class="option">fileNamePattern</span> option ends with <em>.gz</em>
+ class="prop">fileNamePattern</span> option ends with <em>.gz</em>
or <em>.zip</em>.
</p>
<table class="bodyTable">
<tr class="a">
- <th><span class="option">fileNamePattern</span></th>
+ <th><span class="prop">fileNamePattern</span></th>
<th>Rollover schedule</th>
<th>Example</th>
</tr>
@@ -967,7 +993,7 @@ public interface RollingPolicy extends LifeCycle {
<td>Daily rollover (at midnight) with automatic GZIP compression of the
archived files.</td>
<td>
- <p><span class="option">file</span> property not set: During
+ <p><span class="prop">file</span> property not set: During
November 23rd, 2009, logging output will go to the file
<em>/wombat/foo.2009-11-23</em>. However, at midnight that
file will be compressed to become
@@ -977,7 +1003,7 @@ public interface RollingPolicy extends LifeCycle {
at the beginning of the next day.
</p>
- <p><span class="option">file</span> property set to
+ <p><span class="prop">file</span> property set to
/wombat/foo.txt: During November 23rd, 2009, logging output
will go to the file <em>/wombat/foo.txt</em>. At midnight that
file will be compressed and renamed as
@@ -991,7 +1017,7 @@ public interface RollingPolicy extends LifeCycle {
</tr>
</table>
- <p>The <span class="option">fileNamePattern</span> serves a dual
+ <p>The <span class="prop">fileNamePattern</span> serves a dual
purpose. First, by studying the pattern, logback computes the
requested rollover periodicity. Second, it computes each archived
file's name. Note that it is possible for two different patterns to
@@ -1000,25 +1026,25 @@ public interface RollingPolicy extends LifeCycle {
resulting archive files will carry different names.
</p>
- <p>By setting the <span class="option">file</span> property you can
+ <p>By setting the <span class="prop">file</span> property you can
decouple the location of the active log file and the location of
the archived log files. The logging output will be targeted into
- the file specified by the <span class="option">file</span>
+ the file specified by the <span class="prop">file</span>
property. It follows that the name of the active log file will not
change over time. However, if you choose to omit the <span
- class="option">file</span> property, then the active file will be
+ class="prop">file</span> property, then the active file will be
computed anew for each period based on the value of <span
- class="option">fileNamePattern</span>. By leaving the <span
- class="option">file</span> option unset you can avoid file <a
+ class="prop">fileNamePattern</span>. By leaving the <span
+ class="prop">file</span> option unset you can avoid file <a
href="../codes.html#renamingError">renaming errors</a> which occur
while there exist external file handles referencing log files during
roll over.
</p>
- <p>The <span class="option">maxHistory</span> property controls the
+ <p>The <span class="prop">maxHistory</span> property controls the
maximum number of archive files to keep, deleting older files. For
example, if you specify monthly rollover, and set <span
- class="option">maxHistory</span> to 6, then 6 months worth of
+ class="prop">maxHistory</span> to 6, then 6 months worth of
archives files will be kept with files older than 6 months
deleted. Note as old archived log files are removed, any folders
which were created for the purpose of log file archiving will be
@@ -1028,7 +1054,7 @@ public interface RollingPolicy extends LifeCycle {
<p>For various technical reasons, rollovers are not clock-driven
but depend on the arrival of logging events. For example, on 8th of
March 2002, assuming the <span
- class="option">fileNamePattern</span> is set to <em>yyyy-MM-dd</em>
+ class="prop">fileNamePattern</span> is set to <em>yyyy-MM-dd</em>
(daily rollover), the arrival of the first event after midnight
will trigger a rollover. If there are no logging events during, say
23 minutes and 47 seconds after midnight, then rollover will
@@ -1074,7 +1100,7 @@ public interface RollingPolicy extends LifeCycle {
<p>The next configuration sample illustrates the use of
<code>RollingFileAppender</code> associated with
- <code>TimeBasedRollingPolicy</code> in <span class="option">prudent</span>
+ <code>TimeBasedRollingPolicy</code> in <span class="prop">prudent</span>
mode.
</p>
@@ -1115,7 +1141,7 @@ public interface RollingPolicy extends LifeCycle {
to a fixed window algorithm as described below.
</p>
- <p>The <span class="option">fileNamePattern</span> option
+ <p>The <span class="prop">fileNamePattern</span> option
represents the file name pattern for the archived (rolled over) log
files. This option is required and must include an integer token
<em>%i</em> somewhere within the pattern.
@@ -1132,7 +1158,7 @@ public interface RollingPolicy extends LifeCycle {
<th>Description</th>
</tr>
<tr class="b">
- <td><b><span class="option">minIndex</span></b></td>
+ <td><b><span class="prop">minIndex</span></b></td>
<td><code>int</code></td>
<td>
<p>This option represents the lower bound for the window's
@@ -1141,7 +1167,7 @@ public interface RollingPolicy extends LifeCycle {
</td>
</tr>
<tr class="a">
- <td><b><span class="option">maxIndex</span></b></td>
+ <td><b><span class="prop">maxIndex</span></b></td>
<td><code>int</code></td>
<td>
<p>This option represents the upper bound for the window's
@@ -1150,7 +1176,7 @@ public interface RollingPolicy extends LifeCycle {
</td>
</tr>
<tr class="b">
- <td><b><span class="option">fileNamePattern</span></b></td>
+ <td><b><span class="prop">fileNamePattern</span></b></td>
<td><code>String</code></td>
<td>
<p>This option represents the pattern that will be followed
@@ -1166,7 +1192,7 @@ public interface RollingPolicy extends LifeCycle {
</p>
<p>Note that file compression is also specified via this
property. For example, <span
- class="option">fileNamePattern</span> set to
+ class="prop">fileNamePattern</span> set to
<em>MyLogFile%i.log.zip</em> means that archived files must be
compressed using the <em>zip</em> format; <em>gz</em> format
is also supported.
@@ -1183,11 +1209,11 @@ public interface RollingPolicy extends LifeCycle {
</p>
<p>Let us go over a more concrete example of the fixed window
- rollover policy. Suppose that <span class="option">minIndex</span>
- is set to <em>1</em>, <span class="option">maxIndex</span> set to
- <em>3</em>, <span class="option">fileNamePattern</span> property
+ rollover policy. Suppose that <span class="prop">minIndex</span>
+ is set to <em>1</em>, <span class="prop">maxIndex</span> set to
+ <em>3</em>, <span class="prop">fileNamePattern</span> property
set to <em>foo%i.log</em>, and that <span
- class="option">fileNamePattern</span> property is set to
+ class="prop">fileNamePattern</span> property is set to
<em>foo.log</em>.
</p>
@@ -1252,9 +1278,9 @@ public interface RollingPolicy extends LifeCycle {
<p>The configuration file below gives an example of configuring
<code>RollingFileAppender</code> and
<code>FixedWindowRollingPolicy</code>. Note that the <span
- class="option">File</span> option is mandatory even if it contains
+ class="prop">File</span> option is mandatory even if it contains
some of the same information as conveyed with the <span
- class="option">fileNamePattern</span> option.
+ class="prop">fileNamePattern</span> option.
</p>
<p class="example">Example: Sample configuration of a <code>RollingFileAppender</code> using a
@@ -1332,13 +1358,13 @@ public interface RollingPolicy extends LifeCycle {
<p>Note the "%i" conversion token in addition to "%d". Each time
the current log file reaches <span
- class="option">maxFileSize</span> before the current time period
+ class="prop">maxFileSize</span> before the current time period
ends, it will be archived with an increasing index, starting at
0.</p>
<p>Size and time based archiving supports deletion of old archive
files. You need to specify the number of periods to preserve with
- the <span class="option">maxHistory</span> property. When your
+ the <span class="prop">maxHistory</span> property. When your
application is stopped and restarted, logging will continue at the
correct location, i.e. at the largest index number for the current
period.
@@ -1391,11 +1417,11 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</p>
<p><code>SizeBasedTriggeringPolicy</code> accepts only one
- parameter, namely <span class="option">maxFileSize</span>, with a
+ parameter, namely <span class="prop">maxFileSize</span>, with a
default value of 10 MB.
</p>
- <p>The <span class="option">maxFileSize</span> option can be
+ <p>The <span class="prop">maxFileSize</span> option can be
specified in bytes, kilobytes, megabytes or gigabytes by suffixing
a numeric value with <em>KB</em>, <em>MB</em> and respectively
<em>GB</em>. For example, <em>5000000</em>, <em>5000KB</em>,
@@ -1517,8 +1543,8 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</p>
<p>The remote server is identified by the <span
- class="option">remoteHost</span> and <span
- class="option">port</span> properties.
+ class="prop">remoteHost</span> and <span
+ class="prop">port</span> properties.
<code>SocketAppender</code> properties are listed in the following
table.
</p>
@@ -1530,18 +1556,18 @@ public interface TriggeringPolicy<E> extends LifeCycle {
<th>Description</th>
</tr>
<tr class="b">
- <td><b><span class="option">includeCallerData</span></b></td>
+ <td><b><span class="prop">includeCallerData</span></b></td>
<td><code>boolean</code></td>
<td>
<p>
- The <span class="option">includeCallerData</span> option takes a boolean value.
+ The <span class="prop">includeCallerData</span> option takes a boolean value.
If true, the caller data will be available to the remote host.
By default no caller data is sent to the server.
</p>
</td>
</tr>
<tr class="a">
- <td><b><span class="option">port</span></b></td>
+ <td><b><span class="prop">port</span></b></td>
<td><code>int</code></td>
<td>
<p>
@@ -1550,10 +1576,10 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</td>
</tr>
<tr class="b">
- <td><b><span class="option">reconnectionDelay</span></b></td>
+ <td><b><span class="prop">reconnectionDelay</span></b></td>
<td><code>int</code></td>
<td>
- The <span class="option">reconnectionDelay</span> option takes a
+ The <span class="prop">reconnectionDelay</span> option takes a
positive integer representing the number of milliseconds to wait between
each failed connection attempt to the server.
The default value of this option is 30'000 which corresponds to 30 seconds.
@@ -1563,7 +1589,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</td>
</tr>
<tr class="a">
- <td><b><span class="option">remoteHost</span></b></td>
+ <td><b><span class="prop">remoteHost</span></b></td>
<td><code>String</code></td>
<td>
The host name of the server.
@@ -1653,8 +1679,8 @@ public interface TriggeringPolicy<E> extends LifeCycle {
<p>
Note that in the above configuration scripts the values for the
- <span class="option">remoteHost</span>, <span class="option">port</span> and
- <span class="option">includeCallerData</span> properties
+ <span class="prop">remoteHost</span>, <span class="prop">port</span> and
+ <span class="prop">includeCallerData</span> properties
are not given directly but as substituted variable keys. The values for the variables
can be specified as system properties:
</p>
@@ -1693,7 +1719,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
<p>The outcome can be easily changed by instructing the
<code>SocketAppender</code> to include caller data by setting the
- <span class="option">includeCallerData</span> option to
+ <span class="prop">includeCallerData</span> option to
true. Using the following command will do the trick:
</p>
@@ -1732,20 +1758,20 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</tr>
<tr>
- <td><b><span class="option">smtpHost</span></b></td>
+ <td><b><span class="prop">smtpHost</span></b></td>
<td><code>String</code></td>
<td>The host name of the SMTP server. This parameter is mandatory.</td>
</tr>
<tr class="alt">
- <td><b><span class="option">smtpPort</span></b></td>
+ <td><b><span class="prop">smtpPort</span></b></td>
<td><code>int</code></td>
<td>The port where the SMTP server is listening. Defaults to
25.</td>
</tr>
<tr>
- <td><a name="smtpTo" href="#smtpTo"><b><span class="option">to</span></b></a></td>
+ <td><a name="smtpTo" href="#smtpTo"><b><span class="prop">to</span></b></a></td>
<td><code>String</code></td>
<td>The email address of the recipient as a
<em>pattern</em>. The pattern is evaluated anew with the
@@ -1758,7 +1784,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</tr>
<tr class="alt">
- <td><b><span class="option">from</span></b></td>
+ <td><b><span class="prop">from</span></b></td>
<td><code>String</code></td>
<td>The originator of the email messages sent by
<code>SMTPAppender</code> in the <a
@@ -1771,7 +1797,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</td>
</tr>
<tr>
- <td><b><span class="option">subject</span></b></td>
+ <td><b><span class="prop">subject</span></b></td>
<td><code>String</code></td>
<td>
<p>The subject of the email. It can be any value accepted as
@@ -1785,7 +1811,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
that triggered the email message.
</p>
- <p>Assuming the <span class="option">subject</span> option
+ <p>Assuming the <span class="prop">subject</span> option
is set to "Log: %logger - %msg" and the triggering event's
logger is named "com.foo.Bar", and contains the message
"Hello world", then the outgoing email will have the subject
@@ -1797,11 +1823,11 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</tr>
<tr class="alt">
- <td><b><span class="option">discriminator</span></b></td>
+ <td><b><span class="prop">discriminator</span></b></td>
<td><code><a href="../xref/ch/qos/logback/core/sift/Discriminator.html">Discriminator</a></code></td>
<td>
<p>With the help of a <span
- class="option">Discriminator</span>,
+ class="prop">Discriminator</span>,
<code>SMTPAppender</code> can scatter incoming events into
different buffers according to the value returned by the
discriminator. The default discriminator always returns the
@@ -1816,7 +1842,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</td>
</tr>
<tr >
- <td><b><span class="option"><a name="smtpAppender_Evaluator"
+ <td><b><span class="prop"><a name="smtpAppender_Evaluator"
href="#smtpAppender_Evaluator">evaluator</a></span></b></td>
<td><code><a
href="../xref/ch/qos/logback/classic/boolex/IEvaluator.html">IEvaluator</a></code></td>
@@ -1859,7 +1885,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</tr>
<tr class="alt">
- <td valign="top"><b><span class="option">cyclicBufferTracker</span></b>
+ <td valign="top"><b><span class="prop">cyclicBufferTracker</span></b>
</td>
<td><a href="../xref/ch/qos/logback/core/spi/CyclicBufferTracker.html"><code>CyclicBufferTracker</code></a>
</td>
@@ -1867,33 +1893,33 @@ public interface TriggeringPolicy<E> extends LifeCycle {
<p>As the name indicates, an instance of the
<code>CyclicBufferTracker</code> class tracks cyclic
buffers. It does so based on the keys returned by the <span
- class="option">discriminator</span> (see above).
+ class="prop">discriminator</span> (see above).
</p>
<p>If you don't specify a <span
- class="option">cyclicBufferTracker</span>, an instance of <a
+ class="prop">cyclicBufferTracker</span>, an instance of <a
href="../xref/ch/qos/logback/core/spi/CyclicBufferTrackerImpl.html">CyclicBufferTrackerImpl</a>
will be automatically created. By default, this instance
will keep events in a cyclic buffer of size 256. You may
change the size with the help of the <span
- class="option">bufferSize</span> option (see below).</p>
+ class="prop">bufferSize</span> option (see below).</p>
</td>
</tr>
<tr>
- <td><b><span class="option">username</span></b></td>
+ <td><b><span class="prop">username</span></b></td>
<td><code>String</code></td> <td>The username value to use
during plain user/password authentication. By default, this
parameter is null. </td>
</tr>
<tr class="alt">
- <td><b><span class="option">password</span></b></td>
+ <td><b><span class="prop">password</span></b></td>
<td><code>String</code></td>
<td>The password value to use for plain user/password
authentication. By default, this parameter is null.
</td>
</tr>
<tr>
- <td><b><span class="option">STARTTLS</span></b> </td>
+ <td><b><span class="prop">STARTTLS</span></b> </td>
<td><code>boolean</code></td>
<td>If this parameter is set to true, then this appender
will issue the STARTTLS command (if the server supports it)
@@ -1903,14 +1929,14 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</td>
</tr>
<tr class="alt">
- <td><b><span class="option">SSL</span></b></td>
+ <td><b><span class="prop">SSL</span></b></td>
<td><code>boolean</code></td> <td>If this parameter is set to
true, then this appender will open an SSL connection to the
server. By default, this parameter is set to false. </td>
</tr>
<tr>
- <td><b><span class="option">charsetEncoding</span></b></td>
+ <td><b><span class="prop">charsetEncoding</span></b></td>
<td><code>String</code></td>
<td>The outgoing email message will be encoded in the
designated <a
@@ -1928,7 +1954,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
configured, e.g. if the client hostname is not fully
qualified, certain SMTP servers may reject the HELO/EHLO
commands sent by the client. To overcome this issue, you may
- set the value of the <span class="option">localhost</span>
+ set the value of the <span class="prop">localhost</span>
property to the fully qualified name of the client host. See
also the "mail.smtp.localhost" property in the documentation
for the <a
@@ -1994,8 +2020,8 @@ public interface TriggeringPolicy<E> extends LifeCycle {
<p>Before trying out <code>chapters.appenders.mail.Email</code> application
with the above configuration file, you must set the <span
- class="option">smtpHost</span>, <span class="option">to</span> and
- <span class="option">from</span> properties to values appropriate for
+ class="prop">smtpHost</span>, <span class="prop">to</span> and
+ <span class="prop">from</span> properties to values appropriate for
your environment. Once you have set the correct values in the
configuration file, execute the following command:
</p>
@@ -2011,8 +2037,8 @@ public interface TriggeringPolicy<E> extends LifeCycle {
<p><img src="images/chapters/appenders/smtpAppender1.jpg" alt="resulting email"/></p>
<p>In the next example configuration file <em>mail2.xml</em>, the
- values for the <span class="option">smtpHost</span>, <span
- class="option">to</span> and <span class="option">from</span>
+ values for the <span class="prop">smtpHost</span>, <span
+ class="prop">to</span> and <span class="prop">from</span>
properties are determined by variable substitution. Here is the
relevant part of <em>mail2.xml</em>.
</p>
@@ -2161,7 +2187,7 @@ public class CounterBasedEvaluator extends ContextAwareBase implements EventEval
common functionality.
</p>
- <p>Setting the <span class="option">Evaluator</span> option of
+ <p>Setting the <span class="prop">Evaluator</span> option of
<code>SMTPAppender</code> instructs it to use a custom evaluator.
The next configuration file attaches a <code>SMTPAppender</code>
to the root logger. This appender uses a
@@ -2445,16 +2471,16 @@ logger.error(<b>notifyAdmin</b>,
<p>Internally, each distinct value returned by the discriminator
will cause the creation of a new cyclic buffer. However, at most
- <span class="option">maxNumberOfBuffers</span> (by default 64)
+ <span class="prop">maxNumberOfBuffers</span> (by default 64)
will be maintained. Whenever the number of buffers rises above
- <span class="option">maxNumberOfBuffers</span>, the least recently
+ <span class="prop">maxNumberOfBuffers</span>, the least recently
updated buffer is automatically discarded. As a second safety
measure, any buffer which has not been updated in the last 30
minutes will be automatically discarded as well.</p>
<p>On systems serving a large number of transactions per minute,
allowing only a small number for <span
- class="option">maxNumberOfBuffers</span> (by default 64) will
+ class="prop">maxNumberOfBuffers</span> (by default 64) will
often cause the number of events in the outgoing email to be
unnecessarily small. Indeed, in the presence of a large number of
transactions, there will be more than one buffer associated with
@@ -2462,7 +2488,7 @@ logger.error(<b>notifyAdmin</b>,
succession for the same discriminator value (or transaction). Note
that in even such very busy systems, the maximum number of cyclic
buffers is capped by <span
- class="option">maxNumberOfBuffers</span>.
+ class="prop">maxNumberOfBuffers</span>.
</p>
<p>To avoid such yo-yo effects, <code>SMTPAppender</code> will
@@ -2470,7 +2496,7 @@ logger.error(<b>notifyAdmin</b>,
soon as it sees an event marked as "FINALIZE_SESSION". This will
cause the appropriate buffer to be discarded at the end of each
transaction. You can then safely increase the value of <span
- class="option">maxNumberOfBuffers</span> to a larger value such as
+ class="prop">maxNumberOfBuffers</span> to a larger value such as
512 or 1024 without risking running out of memory.
</p>
@@ -2795,7 +2821,7 @@ logger.error(<b>notifyAdmin</b>,
<p>
The correct driver must be declared. Here, the <code>com.mysql.jdbc.Driver</code>
- class is used. The <span class="option">url</span> must begin with <em>jdbc:myslq://</em>.
+ class is used. The <span class="prop">url</span> must begin with <em>jdbc:myslq://</em>.
</p>
<p>
@@ -3060,7 +3086,7 @@ logger.error(<b>notifyAdmin</b>,
<tr class="b">
<td>
<b>
- <span class="option">syslogHost</span>
+ <span class="prop">syslogHost</span>
</b>
</td>
<td>
@@ -3073,7 +3099,7 @@ logger.error(<b>notifyAdmin</b>,
<tr class="a">
<td>
<b>
- <span class="option">port</span>
+ <span class="prop">port</span>
</b>
</td>
<td>
@@ -3087,7 +3113,7 @@ logger.error(<b>notifyAdmin</b>,
<tr class="b">
<td>
<b>
- <span class="option">facility</span>
+ <span class="prop">facility</span>
</b>
</td>
<td>
@@ -3095,11 +3121,11 @@ logger.error(<b>notifyAdmin</b>,
</td>
<td>
<p>
- The <span class="option">facility</span> is meant to identify
+ The <span class="prop">facility</span> is meant to identify
the source of a message.
</p>
<p>
- The <span class="option">facility</span> option must be set to one
+ The <span class="prop">facility</span> option must be set to one
of the strings <em>KERN, USER, MAIL, DAEMON, AUTH, SYSLOG, LPR, NEWS, UUCP,
CRON, AUTHPRIV, FTP, NTP, AUDIT, ALERT, CLOCK, LOCAL0, LOCAL1, LOCAL2,
LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7</em>. Case is not important.
@@ -3109,19 +3135,19 @@ logger.error(<b>notifyAdmin</b>,
<tr class="a">
<td>
<b>
- <span class="option">suffixPattern</span>
+ <span class="prop">suffixPattern</span>
</b>
</td>
<td>
<code>String</code>
</td>
<td>
- <p>The <span class="option">suffixPattern</span> option
+ <p>The <span class="prop">suffixPattern</span> option
specifies the format of the non-standardized part of the
message sent to the syslog server. By default, its value is
<em>[%thread] %logger %msg</em>. Any value that a
<code>PatternLayout</code> could use is a correct <span
- class="option">suffixPattern</span> value.
+ class="prop">suffixPattern</span> value.
</p>
</td>
</tr>
@@ -3137,7 +3163,7 @@ logger.error(<b>notifyAdmin</b>,
<p>
Since the format of a syslog request follows rather strict rules, there is no layout
to be used with <code>SyslogAppender</code>. However, using the
- <span class="option">suffixPattern</span> option lets the user display whatever
+ <span class="prop">suffixPattern</span> option lets the user display whatever
information she wishes.
</p>
@@ -3238,9 +3264,9 @@ logger.debug("Alice says hello"); </p>
discriminator type is <a
href="../xref/ch/qos/logback/classic/sift/MDCBasedDiscriminator.html">MDCBasedDiscriminator</a>. It
will use the MDC value associated with the <span
- class="option">Key</span> property as a discriminator. If that
+ class="prop">Key</span> property as a discriminator. If that
value is null, then the value associated with the <span
- class="option">defaultValue</span> property will be used.
+ class="prop">defaultValue</span> property will be used.
</p>
<p>The <code>SiftingAppender</code> is unique in its capacity to
@@ -3403,7 +3429,7 @@ public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
<p>
Access' <a href="../xref/ch/qos/logback/access/net/SMTPAppender.html">
<code>SMTPAppender</code></a> works in the same way as its Classic counterpart.
- However, the <span class="option">evaluator</span> option is rather different.
+ However, the <span class="prop">evaluator</span> option is rather different.
By default, a <code>URLEvaluator</code> object
is used by <code>SMTPAppender</code>. This evaluator contains a list of URLs that are
checked against the current request's URL. When one of the pages given to the
@@ -3566,7 +3592,7 @@ public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
<tr class="b">
<td>
<b>
- <span class="option">insertHeaders</span>
+ <span class="prop">insertHeaders</span>
</b>
</td>
<td>
@@ -3610,13 +3636,13 @@ public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
uses a designated field in AccessEvent as the basis for selecting a
nested appender. If the value of the designated field is null,
then the value specified in the <span
- class="option">defaultValue</span> property is used.
+ class="prop">defaultValue</span> property is used.
</p>
<p>The designated AccessEvent field can be one of COOKIE,
REQUEST_ATTRIBUTE, SESSION_ATTRIBUTE, REMOTE_ADDRESS, LOCAL_PORT,
REQUEST_URI. Note that the first three fields require that the
- <span class="option">AdditionalKey</span> property also be
+ <span class="prop">AdditionalKey</span> property also be
specified.</p>
<p>Below is an example configuration file.</p>
-----------------------------------------------------------------------
Summary of changes:
logback-site/src/site/pages/css/common.css | 2 +-
logback-site/src/site/pages/manual/appenders.html | 308 +++++++++++----------
2 files changed, 168 insertions(+), 142 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
Hi Ceki,
About myself:
- I am working with Java near 1,5 years
- Have one year commercial experience (working with
http://www.securus-software.com/ project - create e-safety product)
- My main task is creating test framework for our project for testing
webgui of our server. I am working with next technologies and frameworks:
selenium, testng, aspectj, reflection, xpath, log4j, maven build tool,
using design patterns.
- I have a good knowledge of core Java
Now I want to have more experience with OSS, learning new frameworks,
technologies ect.
*I am responsible, active, ambitious.*
*Have good English knowledge.*
--
Best Regards,
*Dmytro Zelinskyi !*
************************************
mob: +(380) 637278353
e-mail: dmytro.zelinskyi(a)gmail.com
************************************
*You never know what you can do till you try :)*
2
1
Hello,
I am looking for an expert in CSS and web-design to *incrementally*
embellish the logback web-site. Any volunteers?
Cheers,
--
Ceki
http://twitter.com/#!/ceki
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch master updated. v_1.0.0-57-g7900adb
by git-noreply@pixie.qos.ch 21 Dec '11
by git-noreply@pixie.qos.ch 21 Dec '11
21 Dec '11
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via 7900adbea8f61de47e933d892cbaee1d61e9f111 (commit)
from a796df509de5feb8cdc6e9ff1c3c14093730121a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=7900adbea8f61de47e933d89…
http://github.com/ceki/logback/commit/7900adbea8f61de47e933d892cbaee1d61e9f…
commit 7900adbea8f61de47e933d892cbaee1d61e9f111
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Wed Dec 21 11:47:57 2011 +0100
rename parameter to AUX instead of SECONDARY
diff --git a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java
index 5225d56..f779888 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java
@@ -31,14 +31,14 @@ public class DateTokenConverter<E> extends DynamicConverter<E> implements MonoTy
* The conversion word/character with which this converter is registered.
*/
public final static String CONVERTER_KEY = "d";
- public final static String SECONDARY_TOKEN = "SECONDARY";
+ public final static String AUXILIARY_TOKEN = "AUX";
public static final String DEFAULT_DATE_PATTERN = CoreConstants.DAILY_DATE_PATTERN;
private String datePattern;
private CachingDateFormatter cdf;
- // is this token converter primary or secondary? Only the primary converter
+ // is this token converter primary or auxiliary? Only the primary converter
// determines the rolling period
- private boolean secondary = false;
+ private boolean primary = true;
public void start() {
this.datePattern = getFirstOption();
if (this.datePattern == null) {
@@ -48,8 +48,8 @@ public class DateTokenConverter<E> extends DynamicConverter<E> implements MonoTy
final List<String> optionList = getOptionList();
if(optionList != null && optionList.size()> 1) {
String secondOption = optionList.get(1);
- if(SECONDARY_TOKEN.equalsIgnoreCase(secondOption)) {
- secondary = true;
+ if(AUXILIARY_TOKEN.equalsIgnoreCase(secondOption)) {
+ primary = false;
}
}
cdf = new CachingDateFormatter(datePattern);
@@ -86,6 +86,6 @@ public class DateTokenConverter<E> extends DynamicConverter<E> implements MonoTy
}
public boolean isPrimary() {
- return !secondary;
+ return primary;
}
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java b/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java
index 1336f63..115bd6c 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java
@@ -145,8 +145,7 @@ public class FileNamePatternTest {
public void convertMultipleDates() {
Calendar cal = Calendar.getInstance();
cal.set(2003, 4, 20, 17, 55);
- FileNamePattern fnp = new FileNamePattern("foo-%d{yyyy.MM, SECONDARY}/%d{yyyy.MM.dd}.txt", context);
+ FileNamePattern fnp = new FileNamePattern("foo-%d{yyyy.MM, aux}/%d{yyyy.MM.dd}.txt", context);
assertEquals("foo-2003.05/2003.05.20.txt", fnp.convert(cal.getTime()));
-
}
}
-----------------------------------------------------------------------
Summary of changes:
.../core/rolling/helper/DateTokenConverter.java | 12 ++++++------
.../core/rolling/helper/FileNamePatternTest.java | 3 +--
2 files changed, 7 insertions(+), 8 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch master updated. v_1.0.0-56-ga796df5
by git-noreply@pixie.qos.ch 21 Dec '11
by git-noreply@pixie.qos.ch 21 Dec '11
21 Dec '11
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via a796df509de5feb8cdc6e9ff1c3c14093730121a (commit)
from 0fe93ab52a11545a7f88fd367d4777d14c733606 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=a796df509de5feb8cdc6e9ff…
http://github.com/ceki/logback/commit/a796df509de5feb8cdc6e9ff1c3c140937301…
commit a796df509de5feb8cdc6e9ff1c3c14093730121a
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Wed Dec 21 10:42:40 2011 +0100
Make test pass
diff --git a/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java b/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java
index 8a35f15..1336f63 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java
@@ -146,7 +146,7 @@ public class FileNamePatternTest {
Calendar cal = Calendar.getInstance();
cal.set(2003, 4, 20, 17, 55);
FileNamePattern fnp = new FileNamePattern("foo-%d{yyyy.MM, SECONDARY}/%d{yyyy.MM.dd}.txt", context);
- assertEquals("foo2003.05/2003.05.20.txt", fnp.convert(cal.getTime()));
+ assertEquals("foo-2003.05/2003.05.20.txt", fnp.convert(cal.getTime()));
}
}
-----------------------------------------------------------------------
Summary of changes:
.../core/rolling/helper/FileNamePatternTest.java | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0