2014-05-21 42 views
0

我使用MongoDB的TTL + log4mongo

<field> 
    <name value="timestamp" /> 
    <layout type="log4net.Layout.PatternLayout" value="%date" /> 
    </field> 

存储日志与log4mongo,但我无法使用时间戳字段的TTL操作。

db.logs.ensureIndex({ "timestamp": 1 }, { expireAfterSeconds: 3600 }) 

应该不是这可能吗?如果不是,我该怎么办?

P.S.时间戳不是一个索引字段(在此之前,ensureIndex调用)

+0

你是从收到错误消息回ensureindex()调用?如果有,请将它添加到您的问题。另外,你可以添加一个来自日志集合的示例文档(也许运行db.logs.findOne())? –

+1

是否有可能您的时间戳不是MongoDB集合中的本机Date类型。可能你的布局实际上是产生一个字符串。请参阅[测试用例]中的配置(https://github.com/log4mongo/log4mongo-net/blob/master/src/Log4Mongo.Tests/MongoDBAppenderTest.cs#L39-L42) –

+0

我已经提交了一个请求(https://github.com/log4mongo/log4mongo-net/pull/29)启用TTL索引。 – seanfitzg

回答

0

布局确实是生产线,用于ensureIndex()时间戳正确的方法是

<field> 
    <name value='timestamp' /> 
    <layout type='log4net.Layout.RawTimeStampLayout' /> 
</field>