我在slf4j-api 1.7.7上使用logback 1.1.3。
我正在阅读以下文档here。
我试图限制日志记录日志并以下列方式抛出异常的代码(我无法修改)。
try {.. }
catch( Exception e ) {
log.error( "Houston we have a problem", e );
throw new TestException( "Houston we have a problem", e );
}
我使用的日志格式如下。
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
我想让一些记录器将他们的堆栈跟踪显示限制为只有2行,所以我想我可以简单地将其修改为文档中规定的以下格式。
<appender name="STDOUT_COMPACT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%ex{2} %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
我期待得到以下内容。
mainPackage.foo.bar.TestException: Houston we have a problem
at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
但相反,我得到了以下内容。
mainPackage.foo.bar.TestException: Houston we have a problem
at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
mainPackage.foo.bar.TestException: Houston we have a problem
at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
at mainPackage.foo.bar.TestThrower.fire1(TestThrower.java:12)
at mainPackage.foo.bar.TestThrower.fire2(TestThrower.java:44)
at mainPackage.foo.bar.TestThrower.fire3(TestThrower.java:122)
at mainPackage.foo.bar.TestThrower.fire4(TestThrower.java:322)
at mainPackage.foo.bar.TestThrower.fire5(TestThrower.java:72)
..
简单地重复日志而不是截断为仅仅2行。我究竟做错了什么?我究竟如何恰当地使用ex{n}
格式?我不喜欢为此编写自定义记录器。
答案 0 :(得分:0)
您必须在模式中包括%nopex。否则,即使您已经打印了堆栈跟踪,Logback也会添加到堆栈跟踪上。您的模式应如下所示:
var x = 0
//Request loop start requesting items of each order and pushing in array
function reqOrders(body) {
let responseJSON = JSON.parse(body);
if (x>=responseJSON.results.length) {
reqEnd();
} else {
rp(URI)
.then(data =>{
const order = JSON.parse(data)
itemID.push(order.order_items.item.id)
reqProducts(body) //call second fuction in loop
})
.catch(e=>{
console.log("Erro ref99: "+e)
})
}
}
//loop sequence requesting items data
function reqProducts(body) {
rp(URI,{
data: x++
})
.then(data =>{
const item = JSON.parse(data)
itemPic.push(item.thumbnail)
//Push item and emit to front-end
if(productName.push(item.title)){
req.app.io.emit(itemPic[0]);
}
i++;
reqOrders(body) //call first func again
})
.catch(e=>{
console.log("Erro ref88: "+e)
})
}
//First request to get all orders
rp(URI)
.then(body => {
reqOrders(body)
})
.catch(e => {
console.log("error"+e)
})
//Jquery on front-end
$(function () {
var socket = io();
socket.on('receive item', function(msg){
var x = JSON.stringify(msg);
$(".div").append(msg);
});
});
更常见的是,像这样在末尾包含异常:
%ex{2} %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%nopex%n