Update pem certs
This commit is contained in:
parent
85d81a84d0
commit
614b836983
|
@ -1,18 +1,18 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
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
|
||||||
Bnq6OBQ=
|
gLxgEkY=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhNeVRl
|
MIIC5zCCAc+gAwIBAgIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhNeVRl
|
||||||
c3RDQTAeFw0xNzExMDIxMzQyNDhaFw0xOTExMDIxMzQyNDhaMC0xGjAYBgNVBAMT
|
c3RDQTAeFw0xOTExMTUwNzI2NThaFw0yMTExMTQwNzI2NThaMCoxFzAVBgNVBAMM
|
||||||
EU1hY0Jvb2stQWlyLmxvY2FsMQ8wDQYDVQQKEwZzZXJ2ZXIwggEiMA0GCSqGSIb3
|
DjAwMDQubm92YWxvY2FsMQ8wDQYDVQQKDAZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEB
|
||||||
DQEBAQUAA4IBDwAwggEKAoIBAQDUO/kL3ar3WsopPF12qAf+cwDHklGJIxJsjdoZ
|
AQUAA4IBDwAwggEKAoIBAQDC5JE48PJ/BFTLEseEbrGIdYB6w29hme4KFKmAqlLQ
|
||||||
XgI1lPEe1W1QXwb/G/tyf6Fj2J8CD5bfsRjDxAemFIBVrFwlunCk+Gs6xR7vzz4O
|
kpwwZJAsm/9iuXy6svJf7Tzzc173Jkgzw7DzhzSf1VgRDrOCQS+IU6s8UXfUMJt/
|
||||||
Fonoj4pmleruLQrNY/bHa2WN97OdISyXzhOgDwSaqobnF0n/f0Mx+9sdHO3p8LNB
|
AmP1SkU2mUJ/+pnEGRKtVkF9LCScinI95Iwt3xngdjMYXwk+S9Le3/8782ClBwZG
|
||||||
3JXUyBpwDNr/TTfAb4pbQEu3LF4p7uyd1eLhKzUxSiWzKtjB1EYObA87fZu0tBJZ
|
vffXQ7hd5HnShgyqFVePgrKmr879NTylfvAWPwux2kdXNnbOHIrhcZm0NeMNf7hs
|
||||||
iGujuFiI7tf4qWKeuAoRa/cXkgVZhk0utYauDoa7qBZ5O6ZdEko9ov0+i5+1JGU/
|
UNURFlqo4rA0FV9dIHMryPkM7ygoaMog2XmcCnq/jf/MfPTQPYjQ9iLPOGrYi0pY
|
||||||
w5wrSPNAnM2lYVUn0kJmcV2gwa4RZFjdqp+/Fx+HnKbnhZEnAgMBAAGjLzAtMAkG
|
X12uFb55duRGsvs7MIkNc8fn2VERoC69QX+GK+zAUGZ/AgMBAAGjLzAtMAkGA1Ud
|
||||||
A1UdEwQCMAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG
|
EwQCMAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3
|
||||||
SIb3DQEBCwUAA4IBAQByWhNxX/L5QYBiMY4JM1RRciV4uI3F2vsc0yMFDSrZza+5
|
DQEBCwUAA4IBAQBpW7Ge5duo6/u3xIl0XhG/2dlSwlUUpO3Ecc13gmh44nJR66VH
|
||||||
tNJQS86hjQsCRZh9VshezvT7k1yVsAC4pnu2pzob8H3KG4vYBafMdl2Ghgv3RMix
|
BEiimsol6gIgcSTk4pVY1DLb/09Nwv0TILl3Dc4QtXhM4gIlNRR79mLVsnPTef5e
|
||||||
J3NrBhcoYYhXEoZHost+htxEi7P3QBo/qDkk48/d30+aDPbms6kQd8Fj8+C5tD3b
|
xkmesQaLihSCroHq8bONnO/Xgj5hCg8uI4j3vHtOikjABxQPOrCfc2uSrenU7aol
|
||||||
aznO5Qlni72uTaM7fNA8exoc/YZc83lsqv7v+UzNQR595jnYSIAZcgil1qqygOan
|
1HBijCY6R+pg6WxBOZ2Teiaoxjn78IxSKLXW0pLRJIPpet1hefR0sKkmPfVGyg8H
|
||||||
Zx/RsMGUz6EYI9lPpoyyVtw13SoQshfgwvUlvBMiekSuI/pp6N7QPK6C8DLO0tVv
|
g7hqo+Houw8PQf2HLZnU656vyTlgIh6ES1x7Plb0cIw/LGr4rMkXs+DFg9SLbetT
|
||||||
gXJjDgioqHc3hcgG4cskLbfVnohiwdhQTFayrLEk
|
ncT4plfucsek7ImN9Dw2w2hM2FZwB8ycZfmu
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
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
|
||||||
ct1A8LN5wq2zmUAfFBrDCg==
|
AG76LAn9sodtb4GtV8E9ITG0pMNlJyUovstS
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
MIIEowIBAAKCAQEAxxRoYquZ8DIN9dWodPP0lEYw7VGkTpLxsEcjBpGW2zN4SvSw
|
MIIEowIBAAKCAQEA3MKOUmqEac5KsvmPTgAzi+1POIdVRX42+VLua2npznpZh0mg
|
||||||
X400QlV3xPcTSJJzYWY2MTiyIVEtS/TRw6fhOgkuoB0Y3kUBauEOieYYi/2oV408
|
maVT9hLA1Glmr7Wmx3fX2uTqupTsmTw2TOsbbX4u/BFeEUXxCeF3bxOeFjGUgwBs
|
||||||
eR8OMIOcfngBRGUgnlWLyocI1OK0xjSg0ov7dtlWIayVOpSFnfnkUC4Mf0ErXBFG
|
+EcMXxjkFgUhcqdTa8099nqng0sgaxN44VsfVFFDMLYYOWGIwnQcCvg8H4bH0tWH
|
||||||
5xHQaHdp9EnFoRajeUUG9ZdeOkQ7UjeOOWLTa4MtVpZLvuIO5RB8cd2cyqQdV2tx
|
gH1zzTvwRkk3tHT4Yy87V3tQZBTuVQMJEl2j7NpQSXXToKU0y10N/oSDy6M5Imkz
|
||||||
dfsmu6cVlm3R5pg7UXSYtyjte5fIWlEWoinfAYhGC9vOY3n+hl1cX1+2asAYYZye
|
jDryDF7ArKXYSW0nPowABmU+V/U8e4bWGz1yMMgyYHmBpi7a/V8TyfFxka6cZAd8
|
||||||
J7lxdISBdZCROVak2CLO1R4WFWdsO27TTC+vvQIDAQABAoIBAGQGPOxWi+HDRIBf
|
wEkXMEM7MU3MJBuBN9k+d7SrJY05DbdeayKKNwIDAQABAoIBAC6ww3Mw7iKGrAvg
|
||||||
+WPJrvlQywRyILvZ2NVY6KBERieclLQUfQmFSNyLVMIB4g50hsRJNrFEazuSLdAc
|
dmuz5TMSFPBKx0E0aaIf5Sc4tmeiPu87Jkl4yyI/YyNJy5scG1MSyMeWJQMjXksm
|
||||||
EcjccK1YL7UC6ZvD0BKDQWrH0U2FBS/4Joo0sExv1BE2+mwC44CqOrJnZmiP/4QW
|
jgGEtD9bMcrETZXvqgRB+IW4q3XcNKHkZCe6tyYh2JPDsAhU1XL2bMWFuYouSIP9
|
||||||
rTccXhw41q3UqKXmObxF8hDXEjBdCx1eewqU0i3Ukdyjm/Lrf9wEwCZgneTkSevc
|
EVLwd9bYfRJ/YO4577fY4Nl9GRI9hdOB0Y4dDvxHCprxXC/wH6NpvI5dktTPr2xl
|
||||||
89RC/NYmIEV/XSqgnq0mfhNfeID+RFjXVexqrOspseEfarnSZednEHYLRJHSnk17
|
pNqABKdG8XEzP0duIpQf5zXbfDAWRUEpB9MDBXqmKmdjdPnpNS7JtkmCtWogdA9F
|
||||||
ZjBVzvQ2WcOUfBcUXJgUblSxRHLNw3wad5TT5t2yfW5QhNE69H7JvdOcRAgbsk4q
|
LcyFI3e86qB9HHaqq1hBsQEG/DYj0RxCcAQFqTfvpxmZOXDlfWdB7M8xnqkD5xT0
|
||||||
FkV+HYECgYEA57hvn3YnuMsHvuB9vgjXocmahjFoEbwMJs7fM4BtCQv5vHl5eIZt
|
s6K1TXECgYEA79Lx5FFxfkN/uZKQzV1slJ/GSyfJqKhRh38/8G1ncmSG5dh0QMht
|
||||||
OzfFXpe+M4BI+wPHQn4VryyF7ztgSmfxICLoXfnsDQ7AjZMWxBZKH5iS2H8wK9/k
|
Tt7FbFhYwGZQY9iMq1g/ujlHAzdKbFHGRX0z30xP7kf0R/L0W2yHMq59Ys4nUhGY
|
||||||
2iq9ePmksr+NaCEQnT3AFbHtsy72+I4NHJLolWrS004RE7Q2v7QzVZ8CgYEA2/Bu
|
o1v2sGxgDDP9XPNm/MV8DCZcoLMxvvFrfWLMYcvWTJb8TBGQgqpcEF8CgYEA66Zu
|
||||||
dpvUuM6kqXNpkX7P5wH6ZJEthisbmnuUUGNzC5u4SXcdDZt9dkaBQ7cQJJ9DdT3I
|
d+l2W5LSTgwYeIAQuiIhhNLY9Ct94TWrum5QZMdeR+IUYn+dT817Qbmf4KiiihfJ
|
||||||
JH19Rx/+1yhqO+ql3UhSE7PRMczwuqcu+WPZyEnRvjP9/DxNVsO7s874RNGePTyV
|
V8t3tYgBBamNpqMKpm7An+HnFgRoV3o8W0pjlKdaQ0EiwhTQsLJcmZ1JV/k9Dd4V
|
||||||
Djq9b0b+lkr4PBt9u5GeQyNvpgKM34q65zBVJSMCgYAxEZdhly22LhhHzVYTReAT
|
Rl26M0DZRKTHIUWLt7nNYexydQpfWlfRX1/n9SkCgYAKphUzjCI79wdO2CEx3Tob
|
||||||
vJNiU1gMWVvhY/FUAKAWSFjsFnUolp7O6XJ8I3n9ge7yaMxrQjPpUm5SSKqNVxFy
|
B1UotSWRJZgpKg9Ov6zeOXR79DaFQeEIpX+ipfGa6XAcXtswKIT74dszW1skoCTr
|
||||||
krHOJLxdz3/q+vjZMTclFbQS8GwM/m6B3Ice9Q5xY6rYIBhak9b3QSRqy0k1PS99
|
pPmOqrbJ38wK/dC31oPSTkkm//xi+oEKj+TORKGnKQ/Q9sXV53bwmyt1vz8wOUwK
|
||||||
m4ZxDZvzbxaiq4jkc45jVQKBgQC7mejPOPqIrJKdizlIBpAVroVDFOZs5AZGjhSj
|
jz6AASsMz494WTdPdf0MhQKBgQDGoBos6JPiy/aH4podt5Rhz7MBCdfkt2P7GAoP
|
||||||
QUDXbPsThwt8GN46bcdC2Dpn0oV60rkODxA2A9+e7PU4qFzUVCTWc3ID9Zh8za/u
|
sjwBNiq53E3iWD54rXJfC98+teWLEFGdttrIIEL8StYixvqLHn8uRHNLk5t/YIDP
|
||||||
v7H6+qRyheymI1WgpZJMvETehqJf/3Xwzj/ZVAhCcC4vLw/fV0VUZTyNsO0ynCXy
|
UfxtqEHkvlpVzMW6qhxzPqg7htF3huHX1djEqrx3p4xQ9xW1Xt9G0s4G6R9GPw8z
|
||||||
nzJxWwKBgDSN2d62VQDIZ8zfv8/gMjsPGwTCVfSrof2AQm8PUaiTLY91Hbc3o+Bz
|
nNsfQQKBgF1nvj5xhD7fiVzS7NrjtBslDxKGQCfs9f1Xl2eadGp6pgwG/hvw5oO7
|
||||||
zOMGWE0HY4dzK09e5nh2l1NCuISABcokkuyCmgQnt6Gbne84X/60NhBnVN/0p/cU
|
gtoYJuPq+Zu92a+UDQVErXMHiXn3iza/3EOf2BP9zbq9mBGZtKmLExP0QGEmDygb
|
||||||
G89NAC5oeHS+yZPF8Lw1cwNs/LQiMJrdRz2cVkgKNlgELILjOurx
|
Yo18YdfwWwqxvEf+jt2URv0w+KNWL/3j5rDmngNa1iNubX3p1AK6
|
||||||
-----END RSA PRIVATE KEY-----
|
-----END RSA PRIVATE KEY-----
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
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
|
||||||
-----END RSA PRIVATE KEY-----
|
-----END RSA PRIVATE KEY-----
|
||||||
|
|
|
@ -1,653 +0,0 @@
|
||||||
%%
|
|
||||||
%% %CopyrightBegin%
|
|
||||||
%%
|
|
||||||
%% Copyright Ericsson AB 2018. All Rights Reserved.
|
|
||||||
%%
|
|
||||||
%% Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
%% you may not use this file except in compliance with the License.
|
|
||||||
%% You may obtain a copy of the License at
|
|
||||||
%%
|
|
||||||
%% http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
%%
|
|
||||||
%% Unless required by applicable law or agreed to in writing, software
|
|
||||||
%% distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
%% See the License for the specific language governing permissions and
|
|
||||||
%% limitations under the License.
|
|
||||||
%%
|
|
||||||
%% %CopyrightEnd%
|
|
||||||
%%
|
|
||||||
-module(emqx_logger_formatter_SUITE).
|
|
||||||
|
|
||||||
-compile(export_all).
|
|
||||||
|
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
|
||||||
-include_lib("common_test/include/ct.hrl").
|
|
||||||
-include_lib("kernel/include/logger.hrl").
|
|
||||||
|
|
||||||
-define(TRY(X), my_try(fun() -> X end)).
|
|
||||||
|
|
||||||
suite() ->
|
|
||||||
[{timetrap,{seconds,30}}].
|
|
||||||
|
|
||||||
init_per_suite(Config) ->
|
|
||||||
Config.
|
|
||||||
|
|
||||||
end_per_suite(_Config) ->
|
|
||||||
ok.
|
|
||||||
|
|
||||||
init_per_group(_Group, Config) ->
|
|
||||||
Config.
|
|
||||||
|
|
||||||
end_per_group(_Group, _Config) ->
|
|
||||||
ok.
|
|
||||||
|
|
||||||
init_per_testcase(_TestCase, Config) ->
|
|
||||||
Config.
|
|
||||||
|
|
||||||
end_per_testcase(Case, Config) ->
|
|
||||||
try apply(?MODULE,Case,[cleanup,Config])
|
|
||||||
catch error:undef -> ok
|
|
||||||
end,
|
|
||||||
ok.
|
|
||||||
|
|
||||||
groups() ->
|
|
||||||
[].
|
|
||||||
|
|
||||||
all() ->
|
|
||||||
[default,
|
|
||||||
single_line,
|
|
||||||
template,
|
|
||||||
format_msg,
|
|
||||||
report_cb,
|
|
||||||
max_size,
|
|
||||||
depth,
|
|
||||||
chars_limit,
|
|
||||||
format_mfa,
|
|
||||||
level_or_msg_in_meta,
|
|
||||||
faulty_log,
|
|
||||||
faulty_config,
|
|
||||||
faulty_msg,
|
|
||||||
check_config,
|
|
||||||
update_config].
|
|
||||||
|
|
||||||
default(_Config) ->
|
|
||||||
String1 = format(info,{"~p",[term]},#{},#{}),
|
|
||||||
ct:log(String1),
|
|
||||||
?assertMatch([_Date, _Time,"info:","term\n"], string:lexemes(String1," ")),
|
|
||||||
|
|
||||||
Time = timestamp(),
|
|
||||||
ExpectedTimestamp = default_time_format(Time),
|
|
||||||
String2 = format(info,{"~p",[term]},#{time=>Time},#{}),
|
|
||||||
ct:log("ExpectedTimestamp: ~p, got: ~p", [ExpectedTimestamp, String2]),
|
|
||||||
" info: term\n" = string:prefix(String2,ExpectedTimestamp),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
single_line(_Config) ->
|
|
||||||
Time = timestamp(),
|
|
||||||
ExpectedTimestamp = default_time_format(Time),
|
|
||||||
String1 = format(info,{"~p",[term]},#{time=>Time},#{}),
|
|
||||||
ct:log(String1),
|
|
||||||
?assertMatch(" info: term\n", string:prefix(String1,ExpectedTimestamp)),
|
|
||||||
|
|
||||||
String2 = format(info,{"a:~n~p",[term]},#{time=>Time},#{}),
|
|
||||||
ct:log(String2),
|
|
||||||
?assertMatch(" info: a:\nterm\n", string:prefix(String2,ExpectedTimestamp)),
|
|
||||||
|
|
||||||
|
|
||||||
Prefix =
|
|
||||||
"Some characters to fill the line ------------------------------------- ",
|
|
||||||
%% There would actually be newlines inside the
|
|
||||||
%% list and map.
|
|
||||||
String4 = format(info,{"~s~p~n~s~p~n",[Prefix,
|
|
||||||
lists:seq(1,10),
|
|
||||||
Prefix,
|
|
||||||
#{a=>map,with=>a,few=>accociations}]},
|
|
||||||
#{time=>Time},
|
|
||||||
#{}),
|
|
||||||
ct:log(String4),
|
|
||||||
match = re:run(String4,"\\[1,2,3,\n",[global,{capture,none}]),
|
|
||||||
{match,Match4} = re:run(String4,"=>\n",[global,{capture,all}]),
|
|
||||||
3 = length(Match4),
|
|
||||||
|
|
||||||
%% Test that big metadata fields do not get line breaks
|
|
||||||
String5 = format(info,"",
|
|
||||||
#{mymeta=>lists:seq(1,100)},
|
|
||||||
#{template=>[mymeta,"\n"]}),
|
|
||||||
ct:log(String5),
|
|
||||||
[_] = string:lexemes(String5,"\n"),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
template(_Config) ->
|
|
||||||
Time = timestamp(),
|
|
||||||
|
|
||||||
Template1 = [msg],
|
|
||||||
String1 = format(info,{"~p",[term]},#{time=>Time},#{template=>Template1}),
|
|
||||||
ct:log(String1),
|
|
||||||
"term" = String1,
|
|
||||||
|
|
||||||
Template2 = [msg,unknown],
|
|
||||||
String2 = format(info,{"~p",[term]},#{time=>Time},#{template=>Template2}),
|
|
||||||
ct:log(String2),
|
|
||||||
"term" = String2,
|
|
||||||
|
|
||||||
Template3 = ["string"],
|
|
||||||
String3 = format(info,{"~p",[term]},#{time=>Time},#{template=>Template3}),
|
|
||||||
ct:log(String3),
|
|
||||||
"string" = String3,
|
|
||||||
|
|
||||||
Template4 = ["string\nnewline"],
|
|
||||||
String4 = format(info,{"~p",[term]},#{time=>Time},#{template=>Template4}),
|
|
||||||
ct:log(String4),
|
|
||||||
"string\nnewline" = String4,
|
|
||||||
|
|
||||||
Template5 = [],
|
|
||||||
String5 = format(info,{"~p",[term]},#{time=>Time},#{template=>Template5}),
|
|
||||||
ct:log(String5),
|
|
||||||
"" = String5,
|
|
||||||
|
|
||||||
Ref6 = erlang:make_ref(),
|
|
||||||
Meta6 = #{atom=>some_atom,
|
|
||||||
integer=>632,
|
|
||||||
list=>[list,"string",4321,#{},{tuple}],
|
|
||||||
mfa=>{mod,func,0},
|
|
||||||
pid=>self(),
|
|
||||||
ref=>Ref6,
|
|
||||||
string=>"some string",
|
|
||||||
time=>Time,
|
|
||||||
tuple=>{1,atom,"list"},
|
|
||||||
nested=>#{subkey=>subvalue}},
|
|
||||||
Template6 = lists:join(";",lists:sort(maps:keys(maps:remove(nested,Meta6))) ++
|
|
||||||
[[nested,subkey]]),
|
|
||||||
String6 = format(info,{"~p",[term]},Meta6,#{template=>Template6}),
|
|
||||||
ct:log(String6),
|
|
||||||
SelfStr = pid_to_list(self()),
|
|
||||||
RefStr6 = ref_to_list(Ref6),
|
|
||||||
ListStr = "[list,\"string\",4321,#{},{tuple}]",
|
|
||||||
ExpectedTime6 = default_time_format(Time),
|
|
||||||
["some_atom",
|
|
||||||
"632",
|
|
||||||
ListStr,
|
|
||||||
"mod:func/0",
|
|
||||||
SelfStr,
|
|
||||||
RefStr6,
|
|
||||||
"some string",
|
|
||||||
ExpectedTime6,
|
|
||||||
"{1,atom,\"list\"}",
|
|
||||||
"subvalue"] = string:lexemes(String6,";"),
|
|
||||||
|
|
||||||
Meta7 = #{time=>Time,
|
|
||||||
nested=>#{key1=>#{subkey1=>value1},
|
|
||||||
key2=>value2}},
|
|
||||||
Template7 = lists:join(";",[nested,
|
|
||||||
[nested,key1],
|
|
||||||
[nested,key1,subkey1],
|
|
||||||
[nested,key2],
|
|
||||||
[nested,key2,subkey2],
|
|
||||||
[nested,key3],
|
|
||||||
[nested,key3,subkey3]]),
|
|
||||||
String7 = format(info,{"~p",[term]},Meta7,#{template=>Template7}),
|
|
||||||
ct:log(String7),
|
|
||||||
[MultipleKeysStr7,
|
|
||||||
"#{subkey1 => value1}",
|
|
||||||
"value1",
|
|
||||||
"value2",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
""] = string:split(String7,";",all),
|
|
||||||
%% Order of keys is not fixed
|
|
||||||
case MultipleKeysStr7 of
|
|
||||||
"#{key2 => value2,key1 => #{subkey1 => value1}}" -> ok;
|
|
||||||
"#{key1 => #{subkey1 => value1},key2 => value2}" -> ok;
|
|
||||||
_ -> ct:fail({full_nested_map_unexpected,MultipleKeysStr7})
|
|
||||||
end,
|
|
||||||
|
|
||||||
Meta8 = #{time=>Time,
|
|
||||||
nested=>#{key1=>#{subkey1=>value1},
|
|
||||||
key2=>value2}},
|
|
||||||
Template8 =
|
|
||||||
lists:join(
|
|
||||||
";",
|
|
||||||
[{nested,["exist:",nested],["noexist"]},
|
|
||||||
{[nested,key1],["exist:",[nested,key1]],["noexist"]},
|
|
||||||
{[nested,key1,subkey1],["exist:",[nested,key1,subkey1]],["noexist"]},
|
|
||||||
{[nested,key2],["exist:",[nested,key2]],["noexist"]},
|
|
||||||
{[nested,key2,subkey2],["exist:",[nested,key2,subkey2]],["noexist"]},
|
|
||||||
{[nested,key3],["exist:",[nested,key3]],["noexist"]},
|
|
||||||
{[nested,key3,subkey3],["exist:",[nested,key3,subkey3]],["noexist"]}]),
|
|
||||||
String8 = format(info,{"~p",[term]},Meta8,#{template=>Template8}),
|
|
||||||
ct:log(String8),
|
|
||||||
[MultipleKeysStr8,
|
|
||||||
"exist:#{subkey1 => value1}",
|
|
||||||
"exist:value1",
|
|
||||||
"exist:value2",
|
|
||||||
"noexist",
|
|
||||||
"noexist",
|
|
||||||
"noexist"] = string:split(String8,";",all),
|
|
||||||
%% Order of keys is not fixed
|
|
||||||
case MultipleKeysStr8 of
|
|
||||||
"exist:#{key2 => value2,key1 => #{subkey1 => value1}}" -> ok;
|
|
||||||
"exist:#{key1 => #{subkey1 => value1},key2 => value2}" -> ok;
|
|
||||||
_ -> ct:fail({full_nested_map_unexpected,MultipleKeysStr8})
|
|
||||||
end,
|
|
||||||
|
|
||||||
ok.
|
|
||||||
|
|
||||||
format_msg(_Config) ->
|
|
||||||
Template = [msg],
|
|
||||||
|
|
||||||
String1 = format(info,{"~p",[term]},#{},#{template=>Template}),
|
|
||||||
ct:log(String1),
|
|
||||||
"term" = String1,
|
|
||||||
|
|
||||||
String2 = format(info,{"list",[term]},#{},#{template=>Template}),
|
|
||||||
ct:log(String2),
|
|
||||||
"FORMAT ERROR: \"list\" - [term]" = String2,
|
|
||||||
|
|
||||||
String3 = format(info,{report,term},#{},#{template=>Template}),
|
|
||||||
ct:log(String3),
|
|
||||||
"term" = String3,
|
|
||||||
|
|
||||||
String4 = format(info,{report,term},
|
|
||||||
#{report_cb=>fun(_)-> {"formatted",[]} end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log(String4),
|
|
||||||
"formatted" = String4,
|
|
||||||
|
|
||||||
String5 = format(info,{report,term},
|
|
||||||
#{report_cb=>fun(_)-> faulty_return end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log(String5),
|
|
||||||
"REPORT_CB/1 ERROR: term; Returned: faulty_return" = String5,
|
|
||||||
|
|
||||||
String6 = format(info,{report,term},
|
|
||||||
#{report_cb=>fun(_)-> erlang:error(fun_crashed) end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log(String6),
|
|
||||||
"REPORT_CB/1 CRASH: term; Reason: {error,fun_crashed,"++_ = String6,
|
|
||||||
|
|
||||||
String7 = format(info,{report,term},
|
|
||||||
#{report_cb=>fun(_,_)-> ['not',a,string] end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log(String7),
|
|
||||||
"REPORT_CB/2 ERROR: term; Returned: ['not',a,string]" = String7,
|
|
||||||
|
|
||||||
String8 = format(info,{report,term},
|
|
||||||
#{report_cb=>fun(_,_)-> faulty_return end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log(String8),
|
|
||||||
"REPORT_CB/2 ERROR: term; Returned: faulty_return" = String8,
|
|
||||||
|
|
||||||
String9 = format(info,{report,term},
|
|
||||||
#{report_cb=>fun(_,_)-> erlang:error(fun_crashed) end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log(String9),
|
|
||||||
"REPORT_CB/2 CRASH: term; Reason: {error,fun_crashed,"++_ = String9,
|
|
||||||
|
|
||||||
%% strings are not formatted
|
|
||||||
String10 = format(info,{string,"string"},
|
|
||||||
#{report_cb=>fun(_)-> {"formatted",[]} end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log(String10),
|
|
||||||
"string" = String10,
|
|
||||||
|
|
||||||
String11 = format(info,{string,['not',printable,list]},
|
|
||||||
#{report_cb=>fun(_)-> {"formatted",[]} end},
|
|
||||||
#{template=>Template}),
|
|
||||||
ct:log("~ts",[String11]), % avoiding ct_log crash
|
|
||||||
"FORMAT ERROR: \"~ts\" - [['not',printable,list]]" = String11,
|
|
||||||
|
|
||||||
String12 = format(info,{string,"string"},#{},#{template=>Template}),
|
|
||||||
ct:log(String12),
|
|
||||||
"string" = String12,
|
|
||||||
|
|
||||||
ok.
|
|
||||||
|
|
||||||
report_cb(_Config) ->
|
|
||||||
Template = [msg],
|
|
||||||
MetaFun = fun(_) -> {"meta_rcb",[]} end,
|
|
||||||
ConfigFun = fun(_) -> {"config_rcb",[]} end,
|
|
||||||
"term" = format(info,{report,term},#{},#{template=>Template}),
|
|
||||||
"meta_rcb" =
|
|
||||||
format(info,{report,term},#{report_cb=>MetaFun},#{template=>Template}),
|
|
||||||
"config_rcb" =
|
|
||||||
format(info,{report,term},#{},#{template=>Template,
|
|
||||||
report_cb=>ConfigFun}),
|
|
||||||
"config_rcb" =
|
|
||||||
format(info,{report,term},#{report_cb=>MetaFun},#{template=>Template,
|
|
||||||
report_cb=>ConfigFun}),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
max_size(_Config) ->
|
|
||||||
Cfg = #{template=>[msg]},
|
|
||||||
"12345678901234567890" = format(info,{"12345678901234567890",[]},#{},Cfg),
|
|
||||||
%% application:set_env(kernel,logger_max_size,11),
|
|
||||||
%% "12345678901234567890" = % min value is 50, so this is not limited
|
|
||||||
%% format(info,{"12345678901234567890",[]},#{},Cfg),
|
|
||||||
%% "12345678901234567890123456789012345678901234567..." = % 50
|
|
||||||
%% format(info,
|
|
||||||
%% {"123456789012345678901234567890123456789012345678901234567890",
|
|
||||||
%% []},
|
|
||||||
%% #{},
|
|
||||||
%% Cfg),
|
|
||||||
%% application:set_env(kernel,logger_max_size,53),
|
|
||||||
%% "12345678901234567890123456789012345678901234567890..." = %53
|
|
||||||
%% format(info,
|
|
||||||
%% {"123456789012345678901234567890123456789012345678901234567890",
|
|
||||||
%% []},
|
|
||||||
%% #{},
|
|
||||||
%% Cfg),
|
|
||||||
"123456789012..." =
|
|
||||||
format(info,{"12345678901234567890",[]},#{},Cfg#{max_size=>15}),
|
|
||||||
"12345678901234567890" =
|
|
||||||
format(info,{"12345678901234567890",[]},#{},Cfg#{max_size=>unlimited}),
|
|
||||||
%% Check that one newline at the end of the line is kept (if it exists)
|
|
||||||
"12345678901...\n" =
|
|
||||||
format(info,{"12345678901234567890\n",[]},#{},Cfg#{max_size=>15}),
|
|
||||||
"12345678901...\n" =
|
|
||||||
format(info,{"12345678901234567890",[]},#{},Cfg#{template=>[msg,"\n"],
|
|
||||||
max_size=>15}),
|
|
||||||
ok.
|
|
||||||
max_size(cleanup,_Config) ->
|
|
||||||
application:unset_env(kernel,logger_max_size),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
depth(_Config) ->
|
|
||||||
Template = [msg],
|
|
||||||
"[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]" =
|
|
||||||
format(info,
|
|
||||||
{"~p",[[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]]},
|
|
||||||
#{},
|
|
||||||
#{template=>Template}),
|
|
||||||
application:set_env(kernel,error_logger_format_depth,11),
|
|
||||||
"[1,2,3,4,5,6,7,8,9,0|...]" =
|
|
||||||
format(info,
|
|
||||||
{"~p",[[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]]},
|
|
||||||
#{},
|
|
||||||
#{template=>Template}),
|
|
||||||
"[1,2,3,4,5,6,7,8,9,0,1,2|...]" =
|
|
||||||
format(info,
|
|
||||||
{"~p",[[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]]},
|
|
||||||
#{},
|
|
||||||
#{template=>Template,
|
|
||||||
depth=>13}),
|
|
||||||
"[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]" =
|
|
||||||
format(info,
|
|
||||||
{"~p",[[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]]},
|
|
||||||
#{},
|
|
||||||
#{template=>Template,
|
|
||||||
depth=>unlimited}),
|
|
||||||
ok.
|
|
||||||
depth(cleanup,_Config) ->
|
|
||||||
application:unset_env(kernel,error_logger_format_depth),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
chars_limit(_Config) ->
|
|
||||||
FA = {"LoL: ~p~nL: ~p~nMap: ~p~n",
|
|
||||||
[lists:duplicate(10,lists:seq(1,100)),
|
|
||||||
lists:seq(1,100),
|
|
||||||
maps:from_list(lists:zip(lists:seq(1,100),
|
|
||||||
lists:duplicate(100,value)))]},
|
|
||||||
Meta = #{time=>timestamp()},
|
|
||||||
Template = [time," - ", msg, "\n"],
|
|
||||||
FC = #{template=>Template,
|
|
||||||
depth=>unlimited,
|
|
||||||
max_size=>unlimited,
|
|
||||||
chars_limit=>unlimited},
|
|
||||||
CL1 = 80,
|
|
||||||
String1 = format(info,FA,Meta,FC#{chars_limit=>CL1}),
|
|
||||||
L1 = string:length(String1),
|
|
||||||
ct:log("String1: ~p~nLength1: ~p~n",[lists:flatten(String1),L1]),
|
|
||||||
true = L1 > CL1,
|
|
||||||
true = L1 < CL1 + 15,
|
|
||||||
|
|
||||||
String2 = format(info,FA,Meta,FC#{chars_limit=>CL1,depth=>10}),
|
|
||||||
L2 = string:length(String2),
|
|
||||||
ct:log("String2: ~p~nLength2: ~p~n",[lists:flatten(String2),L2]),
|
|
||||||
String2 = String1,
|
|
||||||
|
|
||||||
CL3 = 200,
|
|
||||||
String3 = format(info,FA,Meta,FC#{chars_limit=>CL3}),
|
|
||||||
L3 = string:length(String3),
|
|
||||||
ct:log("String3: ~p~nLength3: ~p~n",[lists:flatten(String3),L3]),
|
|
||||||
true = L3 > CL3,
|
|
||||||
true = L3 < CL3 + 15,
|
|
||||||
|
|
||||||
String4 = format(info,FA,Meta,FC#{chars_limit=>CL3,depth=>10}),
|
|
||||||
L4 = string:length(String4),
|
|
||||||
ct:log("String4: ~p~nLength4: ~p~n",[lists:flatten(String4),L4]),
|
|
||||||
true = L4 > CL3,
|
|
||||||
true = L4 < CL3 + 15,
|
|
||||||
|
|
||||||
%% Test that max_size truncates the string which is limited by
|
|
||||||
%% depth and chars_limit
|
|
||||||
MS5 = 150,
|
|
||||||
String5 = format(info,FA,Meta,FC#{chars_limit=>CL3,depth=>10,max_size=>MS5}),
|
|
||||||
L5 = string:length(String5),
|
|
||||||
ct:log("String5: ~p~nLength5: ~p~n",[String5,L5]),
|
|
||||||
L5 = MS5,
|
|
||||||
true = lists:prefix(lists:sublist(String5,L5-4),String4),
|
|
||||||
|
|
||||||
%% Test that chars_limit limits string also
|
|
||||||
Str = "123456789012345678901234567890123456789012345678901234567890123456789",
|
|
||||||
CL6 = 80,
|
|
||||||
String6 = format(info,{string,Str},Meta,FC#{chars_limit=>CL6}),
|
|
||||||
L6 = string:length(String6),
|
|
||||||
ct:log("String6: ~p~nLength6: ~p~n",[String6,L6]),
|
|
||||||
L6 = CL6,
|
|
||||||
|
|
||||||
ok.
|
|
||||||
|
|
||||||
format_mfa(_Config) ->
|
|
||||||
Template = [mfa],
|
|
||||||
|
|
||||||
Meta1 = #{mfa=>{mod,func,0}},
|
|
||||||
String1 = format(info,{"~p",[term]},Meta1,#{template=>Template}),
|
|
||||||
ct:log(String1),
|
|
||||||
"mod:func/0" = String1,
|
|
||||||
|
|
||||||
Meta2 = #{mfa=>{mod,func,[]}},
|
|
||||||
String2 = format(info,{"~p",[term]},Meta2,#{template=>Template}),
|
|
||||||
ct:log(String2),
|
|
||||||
"mod:func/0" = String2,
|
|
||||||
|
|
||||||
Meta3 = #{mfa=>"mod:func/0"},
|
|
||||||
String3 = format(info,{"~p",[term]},Meta3,#{template=>Template}),
|
|
||||||
ct:log(String3),
|
|
||||||
"mod:func/0" = String3,
|
|
||||||
|
|
||||||
Meta4 = #{mfa=>othermfa},
|
|
||||||
String4 = format(info,{"~p",[term]},Meta4,#{template=>Template}),
|
|
||||||
ct:log(String4),
|
|
||||||
"othermfa" = String4,
|
|
||||||
|
|
||||||
ok.
|
|
||||||
|
|
||||||
level_or_msg_in_meta(_Config) ->
|
|
||||||
%% The template contains atoms to pick out values from meta,
|
|
||||||
%% or level/msg to add these from the log event. What if you have
|
|
||||||
%% a key named 'level' or 'msg' in meta and want to display
|
|
||||||
%% its value?
|
|
||||||
%% For now we simply ignore Meta on this and display the
|
|
||||||
%% actual level and msg from the log event.
|
|
||||||
|
|
||||||
Meta = #{level=>mylevel,
|
|
||||||
msg=>"metamsg"},
|
|
||||||
Template = [level,";",msg],
|
|
||||||
String = format(info,{"~p",[term]},Meta,#{template=>Template}),
|
|
||||||
ct:log(String),
|
|
||||||
"info;term" = String, % so mylevel and "metamsg" are ignored
|
|
||||||
ok.
|
|
||||||
|
|
||||||
faulty_log(_Config) ->
|
|
||||||
%% Unexpected log (should be type logger:log_event()) - print error
|
|
||||||
{error,
|
|
||||||
function_clause,
|
|
||||||
{emqx_logger_formatter,format,[_,_],_}} =
|
|
||||||
?TRY(emqx_logger_formatter:format(unexp_log,#{})),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
faulty_config(_Config) ->
|
|
||||||
{error,
|
|
||||||
function_clause,
|
|
||||||
{emqx_logger_formatter,format,[_,_],_}} =
|
|
||||||
?TRY(emqx_logger_formatter:format(#{level=>info,
|
|
||||||
msg=>{"~p",[term]},
|
|
||||||
meta=>#{time=>timestamp()}},
|
|
||||||
unexp_config)),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
faulty_msg(_Config) ->
|
|
||||||
{error,
|
|
||||||
function_clause,
|
|
||||||
{emqx_logger_formatter,_,_,_}} =
|
|
||||||
?TRY(emqx_logger_formatter:format(#{level=>info,
|
|
||||||
msg=>term,
|
|
||||||
meta=>#{time=>timestamp()}},
|
|
||||||
#{})),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
-define(cfgerr(X), {error,{invalid_formatter_config,emqx_logger_formatter,X}}).
|
|
||||||
check_config(_Config) ->
|
|
||||||
ok = emqx_logger_formatter:check_config(#{}),
|
|
||||||
?cfgerr(bad) = emqx_logger_formatter:check_config(bad),
|
|
||||||
|
|
||||||
C1 = #{chars_limit => 1,
|
|
||||||
depth => 1,
|
|
||||||
max_size => 1,
|
|
||||||
report_cb => fun(R) -> {"~p",[R]} end,
|
|
||||||
template => []},
|
|
||||||
ok = emqx_logger_formatter:check_config(C1),
|
|
||||||
|
|
||||||
ok = emqx_logger_formatter:check_config(#{chars_limit => unlimited}),
|
|
||||||
?cfgerr({chars_limit,bad}) =
|
|
||||||
emqx_logger_formatter:check_config(#{chars_limit => bad}),
|
|
||||||
|
|
||||||
ok = emqx_logger_formatter:check_config(#{depth => unlimited}),
|
|
||||||
?cfgerr({depth,bad}) =
|
|
||||||
emqx_logger_formatter:check_config(#{depth => bad}),
|
|
||||||
|
|
||||||
ok = emqx_logger_formatter:check_config(#{max_size => unlimited}),
|
|
||||||
?cfgerr({max_size,bad}) =
|
|
||||||
emqx_logger_formatter:check_config(#{max_size => bad}),
|
|
||||||
|
|
||||||
ok =
|
|
||||||
emqx_logger_formatter:check_config(#{report_cb => fun(_,_) -> "" end}),
|
|
||||||
?cfgerr({report_cb,F}) =
|
|
||||||
emqx_logger_formatter:check_config(#{report_cb => F=fun(_,_,_) -> {"",[]} end}),
|
|
||||||
?cfgerr({report_cb,bad}) =
|
|
||||||
emqx_logger_formatter:check_config(#{report_cb => bad}),
|
|
||||||
|
|
||||||
Ts = [[key],
|
|
||||||
[[key1,key2]],
|
|
||||||
[{key,[key],[]}],
|
|
||||||
[{[key1,key2],[[key1,key2]],["noexist"]}],
|
|
||||||
["string"]],
|
|
||||||
[begin
|
|
||||||
ct:log("check template: ~p",[T]),
|
|
||||||
ok = emqx_logger_formatter:check_config(#{template => T})
|
|
||||||
end
|
|
||||||
|| T <- Ts],
|
|
||||||
|
|
||||||
ETs = [bad,
|
|
||||||
[{key,bad}],
|
|
||||||
[{key,[key],bad}],
|
|
||||||
[{key,[key],"bad"}],
|
|
||||||
"bad",
|
|
||||||
[[key,$a,$b,$c]],
|
|
||||||
[[$a,$b,$c,key]]],
|
|
||||||
[begin
|
|
||||||
ct:log("check template: ~p",[T]),
|
|
||||||
{error,{invalid_formatter_template,emqx_logger_formatter,T}} =
|
|
||||||
emqx_logger_formatter:check_config(#{template => T})
|
|
||||||
end
|
|
||||||
|| T <- ETs],
|
|
||||||
ok.
|
|
||||||
|
|
||||||
%% Test that formatter config can be changed, and that the default
|
|
||||||
%% template is updated accordingly
|
|
||||||
update_config(_Config) ->
|
|
||||||
{error,{not_found,?MODULE}} = logger:update_formatter_config(?MODULE,#{}),
|
|
||||||
|
|
||||||
logger:add_handler_filter(default,silence,{fun(_,_) -> stop end,ok}),
|
|
||||||
ok = logger:add_handler(?MODULE,?MODULE,#{formatter => {emqx_logger_formatter, #{chars_limit => unlimited}},
|
|
||||||
config => #{type => standard_io}}),
|
|
||||||
D = lists:seq(1,1000),
|
|
||||||
logger:notice("~p~n",[D]),
|
|
||||||
{Lines1,C1} = check_log(),
|
|
||||||
ct:log("lines1: ~p", [Lines1]),
|
|
||||||
ct:log("c1: ~p",[C1]),
|
|
||||||
[Line1 | _] = Lines1,
|
|
||||||
[_Date, WithOutDate1] = string:split(Line1," "),
|
|
||||||
[_, "notice: "++D1] = string:split(WithOutDate1," "),
|
|
||||||
?assert(length(D1)<1000),
|
|
||||||
?assertMatch(#{chars_limit := unlimited}, C1),
|
|
||||||
|
|
||||||
error_logger:error_msg("~p",[D]),
|
|
||||||
{Lines5,C5} = check_log(),
|
|
||||||
ct:log("Lines5: ~p", [Lines5]),
|
|
||||||
ct:log("c5: ~p",[C5]),
|
|
||||||
[Line5 | _] = Lines5,
|
|
||||||
[_Date, WithOutDate5] = string:split(Line5," "),
|
|
||||||
[_, "error: "++_D5] = string:split(WithOutDate5," "),
|
|
||||||
|
|
||||||
?assertMatch({error,{invalid_formatter_config,bad}},
|
|
||||||
logger:update_formatter_config(?MODULE,bad)),
|
|
||||||
?assertMatch({error,{invalid_formatter_config,emqx_logger_formatter,{depth,bad}}},
|
|
||||||
logger:update_formatter_config(?MODULE,depth,bad)),
|
|
||||||
|
|
||||||
ok.
|
|
||||||
|
|
||||||
update_config(cleanup,_Config) ->
|
|
||||||
_ = logger:remove_handler(?MODULE),
|
|
||||||
_ = logger:remove_handler_filter(default,silence),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
%%%-----------------------------------------------------------------
|
|
||||||
%%% Internal
|
|
||||||
format(Level,Msg,Meta,Config) ->
|
|
||||||
format(#{level=>Level,msg=>Msg,meta=>add_time(Meta)},Config).
|
|
||||||
|
|
||||||
format(Log,Config) ->
|
|
||||||
lists:flatten(emqx_logger_formatter:format(Log,Config)).
|
|
||||||
|
|
||||||
default_time_format(SysTime) when is_integer(SysTime) ->
|
|
||||||
Ms = SysTime rem 1000000 div 1000,
|
|
||||||
{Date, _Time = {H, Mi, S}} = calendar:system_time_to_local_time(SysTime, microsecond),
|
|
||||||
default_time_format({Date, {H, Mi, S, Ms}});
|
|
||||||
default_time_format({{Y, M, D}, {H, Mi, S, Ms}}) ->
|
|
||||||
io_lib:format("~b-~2..0b-~2..0b ~2..0b:~2..0b:~2..0b.~3..0b", [Y, M, D, H, Mi, S, Ms]);
|
|
||||||
default_time_format({{Y, M, D}, {H, Mi, S}}) ->
|
|
||||||
io_lib:format("~b-~2..0b-~2..0b ~2..0b:~2..0b:~2..0b", [Y, M, D, H, Mi, S]).
|
|
||||||
|
|
||||||
integer(Str) ->
|
|
||||||
is_integer(list_to_integer(Str)).
|
|
||||||
integer(Str,Max) ->
|
|
||||||
integer(Str,0,Max).
|
|
||||||
integer(Str,Min,Max) ->
|
|
||||||
Int = list_to_integer(Str),
|
|
||||||
Int >= Min andalso Int =<Max.
|
|
||||||
|
|
||||||
%%%-----------------------------------------------------------------
|
|
||||||
%%% Called by macro ?TRY(X)
|
|
||||||
my_try(Fun) ->
|
|
||||||
try Fun() catch C:R:S -> {C,R,hd(S)} end.
|
|
||||||
|
|
||||||
timestamp() ->
|
|
||||||
erlang:system_time(microsecond).
|
|
||||||
|
|
||||||
%% necessary?
|
|
||||||
add_time(#{time:=_}=Meta) ->
|
|
||||||
Meta;
|
|
||||||
add_time(Meta) ->
|
|
||||||
Meta#{time=>timestamp()}.
|
|
||||||
|
|
||||||
%%%-----------------------------------------------------------------
|
|
||||||
%%% handler callback
|
|
||||||
log(Log,#{formatter:={M,C}}) ->
|
|
||||||
put(log,{M:format(Log,C),C}),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
check_log() ->
|
|
||||||
{S,C} = erase(log),
|
|
||||||
{string:lexemes(S,"\n"),C}.
|
|
Loading…
Reference in New Issue