让lager的日志文件按日期滚动起来
2015-02-08 19:37
447 查看
lager是一个很强大得日志系统,但是在实际使用的时候发现lager貌似不能在运行后随意的更改错误日志的文件名称。
这是因为lager在为它自己添加event_handler的时候,是直接将日志输出文件名作为handler的名称的一部分输入进去得。
lager:status/0 代码如下
我们看到handler的两个匹配
再来看看另一段代码
[b]lager:clear_all_traces/0 代码如下[/b]
98d3
我们看到这个地方,清除handler的时候是整个删掉了event_handler。所以我的做法是,更改文件名称的时候就直接删除掉之前定义个该级别的Handler.
以下是我事先该功能的一小部分代码段,仅供大家参考,望高人指正.
好拉,就是这么简单.我只提供一个小思路,有不成熟的地方望大家多指点,具体代码就不贴了。
这是因为lager在为它自己添加event_handler的时候,是直接将日志输出文件名作为handler的名称的一部分输入进去得。
lager:status/0 代码如下
status() -> Handlers = gen_event:which_handlers(lager_event), TraceCount = case length(element(2, lager_config:get(loglevel))) of 0 -> 1; N -> N end, Status = ["Lager status:\n", [begin Level = get_loglevel(Handler), case Handler of {lager_file_backend, File} -> io_lib:format("File ~s at level ~p\n", [File, Level]); lager_console_backend -> io_lib:format("Console at level ~p\n", [Level]); _ -> [] end end || Handler <- Handlers], "Active Traces:\n", [begin LevelName = case Level of {mask, Mask} -> case lager_util:mask_to_levels(Mask) of [] -> none; Levels -> hd(Levels) end; Num -> lager_util:num_to_level(Num) end, io_lib:format("Tracing messages matching ~p at level ~p to ~p\n", [Filter, LevelName, Destination]) end || {Filter, Level, Destination} <- element(2, lager_config:get(loglevel))], [ "Tracing Reductions:\n", case ?DEFAULT_TRACER:info('query') of {null, false} -> ""; Query -> io_lib:format("~p~n", [Query]) end ], [ "Tracing Statistics:\n ", [ begin [" ", atom_to_list(Table), ": ", integer_to_list(?DEFAULT_TRACER:info(Table) div TraceCount), "\n"] end || Table <- [input, output, filter] ] ]], io:put_chars(Status).
我们看到handler的两个匹配
{lager_file_backend, File}, lager_console_backend
再来看看另一段代码
[b]lager:clear_all_traces/0 代码如下[/b]
98d3
clear_all_traces() -> {Level, _Traces} = lager_config:get(loglevel), _ = lager_util:trace_filter(none), lager_config:set(loglevel, {Level, []}), lists:foreach(fun(Handler) -> case get_loglevel(Handler) of none -> gen_event:delete_handler(lager_event, Handler, []); _ -> ok end end, gen_event:which_handlers(lager_event)).
我们看到这个地方,清除handler的时候是整个删掉了event_handler。所以我的做法是,更改文件名称的时候就直接删除掉之前定义个该级别的Handler.
以下是我事先该功能的一小部分代码段,仅供大家参考,望高人指正.
% 获取所有得Handler Handlers = gen_event:which_handlers(lager_event), % 获取当前级别的日志Handler {ok, TargetLevelHandlers} = getLevelHandler(Handlers, LogLevel), % 增加新得Handler gen_event:add_handler(lager_event, {lager_file_backend, LogFile}, [{file, LogFileName}, {level, LogLevel}]), % 删除旧的Handler [begin % 删除旧的handler gen_event:delete_handler(lager_event, Handler, []), [] end||Handler<-TargetLevelHandlers], % 设定日志级别 lager:set_loglevel({lager_file_backend, LogFile}, LogLevel)
好拉,就是这么简单.我只提供一个小思路,有不成熟的地方望大家多指点,具体代码就不贴了。
相关文章推荐
- log4 配置日期为滚动类型(每天产生一个日志文件)
- log4net支持按日期产生日志文件
- 续:“改进log4net支持按日期产生日志文件”
- 请问:如何实现文件日志功能?要求每天换一个文件。文件名以日期区分
- shell提取日期日志文件
- log4j 根据日期来生成日志文件
- 改进log4net支持按日期产生日志文件
- C++写日志源代码分析,可实现根据日期自动创建文件夹、日志分类、文件大小控制等
- 为什么SQL Server数据文件和日志文件最后更新日期不准?
- 不再担心日志文件过大:通用日志滚动脚本 推荐
- log4j的日志文件保存到项目发布目录,log4j文件每天分割按日期命名
- log4j 写多个日志文件,按照日期每天都记
- 如何将tomcat控制台输出的内容直播用日志文件保存起来
- 日志滚动解决apache日志文件过大问题
- 为什么SQL Server数据文件和日志文件最后更新日期不准? 推荐
- Weblogic日志按日期,每日生成一个新文件
- log4net支持按日期产生日志文件
- 如何将tomcat控制台输出的内容直播用日志文件保存起来
- C++按日期写日志文件,每天单独一个日志文件
- [Java][log4j]支持同时按日期和文件大小分割日志