Java API 设计中的面向对象事件记录
Object Oriented Event Logging in Java API Design
我想解决这个问题:
大多数应用程序都有一些日志记录服务,用于将应用程序中的事件报告给商业智能分析数据库。此外,像 android 这样的移动应用程序会报告相同的内容,例如用户行为等。有很多图书馆可以做到这一点。
问题:当开发人员想要在他们的代码中添加日志记录时,通常是通过散布代码行来报告他们方法中的某些内容,例如:
void doStuff() {
try {
doTheThing():
logger.info("the thing was done", someClientInfoDTO, timestamp, eventid);
} catch(Throwable woops) {
logger.error(woops);
}
}
我到处都能看到这种模式以一种或另一种形式出现。我想采用面向对象的方法来记录日志,因此 类 可以用它们的日志记录行为进行注释。消除了开发人员仅在他们认为重要的事情足以记录正在发生的地方粘贴日志代码行的需要。
我的想法是像这样重写上面的代码:
@Logger("class level logger")
class StuffDoer {
@Logger("what to log", whatToDoOnError, etc)
void doStuff() {
doTheThing():
}
}
问题:是否有解决该问题的库或现有项目。有没有人有成功做到这一点的例子?我不想重新发明轮子,但我一直在挖掘,结果一无所获。根据对这个问题的回答,我可能会启动一个 github 项目来做到这一点。
Jake Wharton 让我们与 timber 分道扬镳:https://github.com/JakeWharton/timber 这是注入日志框架的好方法,但仍然会导致开发人员在代码中调用它。
我想解决这个问题:
大多数应用程序都有一些日志记录服务,用于将应用程序中的事件报告给商业智能分析数据库。此外,像 android 这样的移动应用程序会报告相同的内容,例如用户行为等。有很多图书馆可以做到这一点。
问题:当开发人员想要在他们的代码中添加日志记录时,通常是通过散布代码行来报告他们方法中的某些内容,例如:
void doStuff() {
try {
doTheThing():
logger.info("the thing was done", someClientInfoDTO, timestamp, eventid);
} catch(Throwable woops) {
logger.error(woops);
}
}
我到处都能看到这种模式以一种或另一种形式出现。我想采用面向对象的方法来记录日志,因此 类 可以用它们的日志记录行为进行注释。消除了开发人员仅在他们认为重要的事情足以记录正在发生的地方粘贴日志代码行的需要。
我的想法是像这样重写上面的代码:
@Logger("class level logger")
class StuffDoer {
@Logger("what to log", whatToDoOnError, etc)
void doStuff() {
doTheThing():
}
}
问题:是否有解决该问题的库或现有项目。有没有人有成功做到这一点的例子?我不想重新发明轮子,但我一直在挖掘,结果一无所获。根据对这个问题的回答,我可能会启动一个 github 项目来做到这一点。
Jake Wharton 让我们与 timber 分道扬镳:https://github.com/JakeWharton/timber 这是注入日志框架的好方法,但仍然会导致开发人员在代码中调用它。