问题标签 [log4perl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - mysqldump 输出到 log4perl
我有一个 Perl 脚本,它使用 log4perl 将所有内容记录到文件中。log4perl 的配置存储在一个外部文件中。
此脚本使用 qx 运行 mysqldump 命令。mysqldump 命令的输出打印到屏幕(我假设 STDERR),但不打印到日志文件。
我想将 mysqldump(以及任何其他打印到屏幕的 stmt)的输出定向到 log4perl 日志文件。
我不确定这是否涉及使用 qx 以外的东西,或者更改 log4perl 配置。
注意:我在网上看到过一些这样的例子,但它们都使用 log4perl easy-config。
这是 log4perl 配置文件 -
这是 perl 脚本 -
这是脚本输出 -
澄清 - 当我说输出时,我指的是 mysqldump 命令的 stderr 输出。我希望将写入屏幕上的 mysqldump 命令的所有文本输出发送到 log4perl 日志文件。
linux - 我通过 cpan 安装了一个 perl 模块。但我该如何使用它?
在遇到很多问题后,我设法开始cpan
工作cygwin
。
我做到了: cpan[2]> i Log::Log4perl
它似乎奏效了。即它下载了一些东西:
所以现在我有以下简单的脚本:
当我尝试运行它时,我得到:
Can't locate Log/Log4perl.pm in @INC
我在下面搜索~/.cpan
但Log4perl.pm
找不到。为什么?没cpan
安装?我需要做其他事情吗?
perl - 无法在 Perl 中创建基本记录器
我正在Log4Perl
从perl.com
阅读有关内容,
我正在尝试按照教程进行操作,但在该部分中“迷路了” Logger Categories
。
我尝试按照教程进行操作并执行了以下脚本:
我创建了一个目录Groceries
,并在其中创建了一个pm
文件,如下所示:
Food.pm:
这是上面提到的 perl.com 的复制/粘贴。
然后在目录所在的同一目录Groceries
中(即不在Food.pm
驻留的同一目录中)我创建了另一个脚本,如下所示:
test_script.pl:
但是当我运行测试脚本时它不起作用。我得到:
Log4perl: Seems like no initialization happened. Forgot to call init()?
另外,如果我添加:
test_log("something");
我得到:
我在这里做错了什么?
更新
我按照教程修改了它在listing 2: eat.pl
我仍然得到Log4perl: Seems like no initialization happened. Forgot to call init()?
perl - 如何在 Log4perl 中使用 easy_init 打印日志级别?
我非常想念关于 Log4perl 中每一行的日志级别的信息easy_init
。我正在运行一个大型迁移脚本,该脚本在某些特殊记录处失败,因此我需要 grep 查找WARN
ings 和ERROR
s,但需要INFO
rmation 上下文来修复这些问题。
使用此代码:
现在,我得到这个输出:
我不想在日志消息中添加此信息,因为它已经包含在我调用的日志函数中。
如何添加日志级别easy_init
?我不想在一个相当小的脚本中使用配置文件(即使包括内联)初始化“常规”Log4perl,我喜欢easy_init
它清晰而简短的用法。
perl - Why do differ %M and %F in Log4perl PatternLayout in special cases?
The original question has been reformulated, to be clear for later use
I find the following issue to be weird. In some cases %M and %F refers to different files. For example int the following case:
Foo.pm contains
test.pl contains
Result is:
So file is "Foo.pm", but the function is "main::".
I found that the weird behavior is in connection with errors/warnings happening in compile time of "require".
Why do %M and %F differ?
Thanks, FERcsI
perl - 如何通过 Log4Perl 记录 OutputDebugString
是否可以使用 Log4Perl 将所有消息/级别直接记录到 OutputDebugString(Windows 系统)中?
我有一些已经使用 log4perl 的模块,但现在我想在所有日志消息都是 OutputDebugStrings 的环境中使用这些模块 - 在这种环境中,消息是用 DbgView 读取的,我也想用 DbgView 读取我的模块的输出。我不想将 Log4Perl 日志文件与 DbgView 输出合并。
我使用以下 perl 代码直接从 Perl 编写 OutputDebugStrings:
我找到了 log4net.Appender.OutputDebugStringAppender - 我怎样才能为 Perl 实现相同的目标
提前致谢。
perl - $@ gets set differently on eval and Log::Dispatch::Email
I use Log4perl in one of my applications and created my own appender which inherits from Log::Dispatch::Email
because I need some special handling of sendmail. This appender worked for some years now, but today I recognized some weird behavior in which $@
doesn't get set as before if I configure Log4perl to use my appender or simply Log::Dispatch::Email
itself. I used to catch errors in the following way:
If I remove the mail appender from my Log4perl configuration and my application dies in main, $error
gets the message and it gets logged within the alternative. The problem now is that when I configure my own descendant of Log::Dispatch::Email
or this abstract base class directly, $@
in the above statement is the empty string, resulting in the same error as before isn't recognized anymore. If I write something like eval {} or ...
$@
is properly available and can be saved. The following works:
$error2
is always the empty string if I configure Log::Dispatch::Email
in any way. Of course I don't want to change all my code which uses the first example and used to work before to the second one.
Is there anything wrong with my first example? From my point of view it looks like documented for eval in perldoc and it works without email appenders.
Can you think of any reason why using mail appenders changes the behavior on how or when or whatever Perl sets $@
in my second example? Any workarounds? I already had a look at the sources of Log::Dispatch
but couldn't find anything obviously interfering with my code.
Thanks for any hints!
perl - 是否可以使用 Log4perl 创建每个用户的日志文件?
我有一个使用 Log4perl 进行日志记录的 mojolicious 网络应用程序。这是一个多用户应用程序,当多个用户访问应用程序时,有时很难跟踪日志文件中的各种线程。我想做的是将每个用户(人口少于 25 个用户)的活动记录到一个单独的文件中。例如 ./log/userX.log ./log/userY.log 等。
我考虑在配置文件中使用类似的东西: log4perl.appender.MAIN.filename=sub { return get_user_filename(); 但是记录器是在 Mojolicious 启动子例程中定义的,用户直到请求时间才知道。
另一个似乎更有希望的想法是编写一个桥接路由,为用户创建一个附加程序,然后将其分配给记录器。然后我可以缓存附加程序以供以后重用(或销毁并重新创建)。
我将使用第二种选择,但如果有人以前尝试过这样做并想分享他们的智慧,我将不胜感激。
-- 更新 -- 所以在我的桥梁路线中,我正在执行以下操作:
但是,我收到以下错误:
正在创建 /tmp/user.log(长度为零)Log::Log4perl 的最新 CPAN 安装。有任何想法吗?
perl - 如何让 Log4perl 中的 %x 不显示“[undef]”?
当我没有向 Log::Log4perl::NDC 堆栈推送任何内容时,%x
返回[undef]
. 我希望它在堆栈为空时返回一个空字符串。
例如,使用以下代码:
这打印:
但我希望它打印:
我怎样才能做到这一点?
perl - Ubuntu 服务器上的 Log4perl 问题
多年来,我一直在运行一个大型站点,具有典型的 nginx / apache 设置,并且所有“页面”都是 mod_perl。直到最近,我还在 FreeBSD 上运行。更换硬件后,由于其他原因,我被迫迁移到 Ubuntu (12.04.2 LTS),我在许多其他服务器上使用它,所以没什么大不了的。但是,我现在的日志有问题。由于某种原因,越来越多的“动作”不再通过 Log4Perl 记录下来。这在我以前的设置中从来都不是问题,但现在我似乎“丢失”了 2% 到 15% 的日志条目。这是通过同时将数据记录到数据库来检查和验证的。
有谁知道为什么会发生这种情况?关于大型日志文件和 ubuntu 有什么我应该知道的吗?(不是那么大的 tbh,390 MB atm)?我在任何地方的错误日志中什么都没有,并且由于数据库日志记录发生在 $log->info("ENTRY HERE") 之后,脚本显然不会崩溃。但是我错过了很多这些 ENTRY HERE :) 有问题的日志平均每秒“命中”一次,但我不应该认为这会是一个大问题?是否有“太多进程”试图并行写入日志,导致锁定问题,阻止将数据形式附加到文件中?任何典型的 Ubuntu 设置可能会针对此类进行调整?
任何帮助将不胜感激。
- 微调器