├── .gitignore
├── .vscode
├── launch.json
└── tasks.json
├── Delphinus.Info.json
├── Delphinus.Install.json
├── LICENSE.txt
├── Quick.Logger.ExceptionHook.pas
├── Quick.Logger.Provider.ADODB.pas
├── Quick.Logger.Provider.Console.pas
├── Quick.Logger.Provider.ElasticSearch.pas
├── Quick.Logger.Provider.Email.pas
├── Quick.Logger.Provider.EventLog.pas
├── Quick.Logger.Provider.Events.pas
├── Quick.Logger.Provider.Files.pas
├── Quick.Logger.Provider.GrayLog.pas
├── Quick.Logger.Provider.IDEDebug.pas
├── Quick.Logger.Provider.InfluxDB.pas
├── Quick.Logger.Provider.Logstash.pas
├── Quick.Logger.Provider.Memory.pas
├── Quick.Logger.Provider.Redis.pas
├── Quick.Logger.Provider.Rest.pas
├── Quick.Logger.Provider.Sentry.pas
├── Quick.Logger.Provider.Slack.pas
├── Quick.Logger.Provider.SolR.pas
├── Quick.Logger.Provider.StringList.pas
├── Quick.Logger.Provider.SysLog.pas
├── Quick.Logger.Provider.Telegram.pas
├── Quick.Logger.Provider.Twilio.pas
├── Quick.Logger.RuntimeErrorHook.pas
├── Quick.Logger.UnhandledExceptionHook.pas
├── Quick.Logger.pas
├── QuickLib.inc
├── QuickLogger.png
├── README.md
├── docs
├── QuickLogger.png
└── githubstartme.jpg
├── library
├── delphi&lazarus
│ └── src
│ │ ├── ProjectGroup1.groupproj
│ │ ├── QuickLogger.Lib.Tester.Tester
│ │ ├── QuickLogger.Lib.Tester.deployproj
│ │ ├── QuickLogger.Lib.Tester.dpr
│ │ ├── QuickLogger.Lib.Tester.dproj
│ │ ├── QuickLogger.Lib.Tester.lpi
│ │ ├── QuickLogger.Lib.Tester.res
│ │ ├── QuickLogger.deployproj
│ │ ├── QuickLogger.dpr
│ │ ├── QuickLogger.dproj
│ │ ├── QuickLogger.lpi
│ │ ├── QuickLogger.res
│ │ ├── lib
│ │ └── x86_64-linux
│ │ │ ├── QuickLogger.Lib.Tester.or
│ │ │ └── QuickLogger.Lib.Tester.res
│ │ ├── link8948.res
│ │ ├── link8954.res
│ │ ├── link8960.res
│ │ ├── link8966.res
│ │ └── link8972.res
├── packaging
│ └── nuget
│ │ ├── QuickLogger.Extensions.NetCore.1.5.6.nupkg
│ │ ├── QuickLogger.Extensions.NetCore.1.5.8.nupkg
│ │ ├── QuickLogger.Extensions.NetCore.1.5.9.nupkg
│ │ ├── QuickLogger.Extensions.Wrapper.1.5.6.nupkg
│ │ ├── QuickLogger.Extensions.Wrapper.1.5.7.nupkg
│ │ ├── QuickLogger.NetStandard.1.5.5.nupkg
│ │ ├── QuickLogger.NetStandard.1.5.5
│ │ ├── QuickLogger.NetStandard.nuspec
│ │ ├── [Content_Types].xml
│ │ ├── _rels
│ │ │ └── .rels
│ │ ├── build
│ │ │ └── net45
│ │ │ │ └── QuickLogger.NetStandard.targets
│ │ └── package
│ │ │ └── services
│ │ │ └── metadata
│ │ │ └── core-properties
│ │ │ └── e58e9a8a37e043fab1891917d3d74ce6.psmdcp
│ │ ├── QuickLogger.NetStandard.Abstractions.1.5.4.nupkg
│ │ └── libquicklogger
│ │ ├── libquickloggernative.redist.1.5.0.nupkg
│ │ └── libquickloggernative.redist.1.5.1.nupkg
└── wrappers
│ └── dotnet
│ └── QuickLogger
│ ├── .dockerignore
│ ├── QuickLogger.DefaultSettings.Generator
│ ├── Program.cs
│ └── QuickLogger.DefaultSettings.Generator.csproj
│ ├── QuickLogger.DefaultSettings
│ └── defaultSettings.json
│ ├── QuickLogger.Extensions.NetCore
│ ├── CallContext.cs
│ ├── Configuration
│ │ └── CoreConfigpathFinder.cs
│ ├── QuickLogger - Backup.Extensions.NetCore.csproj
│ ├── QuickLogger.Extensions.NetCore.csproj
│ ├── QuickLogger.json
│ ├── QuickLoggerAdapter.cs
│ ├── QuickLoggerExtensions.cs
│ ├── QuickLoggerProvider.cs
│ ├── QuickLoggerScope.cs
│ └── ScopeAdditionalInfoProvider.cs
│ ├── QuickLogger.Extensions.Wrapper
│ ├── Application
│ │ └── Services
│ │ │ ├── IAdditionalLoggerInfoProviderService.cs
│ │ │ ├── ILoggerConfigPathFinder.cs
│ │ │ ├── ILoggerService.cs
│ │ │ └── QuickLoggerService.cs
│ ├── Domain
│ │ ├── CustomExceptionWithRequestInfo.cs
│ │ └── CustomLogMessage.cs
│ ├── QuickLogger.Extensions.Wrapper.csproj
│ └── QuickLogger.json
│ ├── QuickLogger.NetStandard.Abstractions
│ ├── ILogger.cs
│ ├── ILoggerConfigManager.cs
│ ├── ILoggerProvider.cs
│ ├── ILoggerProviderProps.cs
│ ├── ILoggerSettings.cs
│ ├── LoggerEventTypes.cs
│ └── QuickLogger.NetStandard.Abstractions.csproj
│ ├── QuickLogger.Sample.ASPNetCore
│ ├── Controllers
│ │ └── HomeController.cs
│ ├── Dockerfile
│ ├── LoggerFields.cs
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── QuickLogger.Sample.ASPNetCore.csproj
│ ├── QuickLogger.json
│ ├── Startup.cs
│ ├── appsettings.Development.json
│ └── appsettings.json
│ ├── QuickLogger.Sample.NetCore.Console
│ ├── Program.cs
│ └── QuickLogger.Sample.NetCore.Console.csproj
│ ├── QuickLogger.Sample.NetFramework.Console
│ ├── App.config
│ ├── Program.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── QuickLogger.Sample.NetFramework.Console.csproj
│ └── packages.config
│ ├── QuickLogger.Tests
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── QuickLogger.Common.cs
│ ├── QuickLogger.Configuration.cs
│ ├── QuickLogger.Integration.cs
│ ├── QuickLogger.Tests.csproj
│ ├── app.config
│ └── packages.config
│ ├── QuickLogger.sln
│ ├── QuickLogger.v3.ncrunchsolution
│ └── QuickLogger
│ ├── QuickConfigManager.cs
│ ├── QuickLogger.NetStandard.csproj
│ ├── QuickLogger.NetStandard.nuspec
│ ├── QuickLoggerBuiltInStandardProviders.cs
│ ├── QuickLoggerFileConfigManager.cs
│ ├── QuickLoggerNative.cs
│ ├── QuickLoggerProvider.cs
│ ├── QuickLoggerProviderProps.cs
│ ├── QuickLoggerSettings.cs
│ ├── QuickLoggerStringConfigManager.cs
│ └── QuickLoggerTypesConverter.cs
└── samples
├── delphi
├── CustomFormatOutput
│ ├── CustomFormatOutputLogger.dpr
│ ├── CustomFormatOutputLogger.dproj
│ └── CustomFormatOutputLogger.res
├── DailyRotateLogger
│ ├── DailyRotateLogger.Service.pas
│ ├── DailyRotateLogger.dpr
│ ├── DailyRotateLogger.dproj
│ └── DailyRotateLogger.res
└── MultiLogger
│ ├── MultiLogger.dpr
│ ├── MultiLogger.dproj
│ └── MultiLogger.res
├── firemonkey
└── MultiLogger
│ ├── AndroidManifest.template.xml
│ ├── Entitlement.TemplateOSX.xml
│ ├── Entitlement.TemplateOSX32.xml
│ ├── MultiLogger.deployproj
│ ├── MultiLogger.dpr
│ ├── MultiLogger.dproj
│ ├── MultiLogger.res
│ ├── frMain.fmx
│ ├── frMain.pas
│ └── info.plist.TemplateOSX.xml
└── fpc
├── ConsoleLogger
├── ConsoleLogger.lpi
├── ConsoleLogger.lpr
├── backup
│ ├── ConsoleLogger.lpi
│ └── ConsoleLogger.lpr
└── lib
│ └── x86_64-linux
│ └── ConsoleLogger.or
└── MultiLogger
├── MultiLogger.lpi
├── MultiLogger.pas
├── MultiLogger.res
├── lib
├── i386-win32
│ ├── MultiLogger.or
│ └── MultiLogger.res
├── x86_64-linux
│ ├── MultiLogger.or
│ └── MultiLogger.res
└── x86_64-win64
│ └── MultiLogger.res
└── ppas.bat
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | # Created by https://www.gitignore.io/api/delphi,freepascal,visualstudio
7 |
8 | ### Delphi ###
9 | # Uncomment these types if you want even more clean repository. But be careful.
10 | # It can make harm to an existing project source. Read explanations below.
11 | #
12 | # Resource files are binaries containing manifest, project icon and version info.
13 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
14 | #*.res
15 | #
16 | # Type library file (binary). In old Delphi versions it should be stored.
17 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
18 | #*.tlb
19 | #
20 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
21 | # Uncomment this if you are not using diagrams or use newer Delphi version.
22 | #*.ddp
23 | #
24 | # Visual LiveBindings file. Added in Delphi XE2.
25 | # Uncomment this if you are not using LiveBindings Designer.
26 | #*.vlb
27 | #
28 | # Deployment Manager configuration file for your project. Added in Delphi XE2.
29 | # Uncomment this if it is not mobile development and you do not use remote debug feature.
30 | #*.deployproj
31 | #
32 | # C++ object files produced when C/C++ Output file generation is configured.
33 | # Uncomment this if you are not using external objects (zlib library for example).
34 | #*.obj
35 | #
36 |
37 | # Delphi compiler-generated binaries (safe to delete)
38 | *.exe
39 | *.dll
40 | *.bpl
41 | *.bpi
42 | *.dcp
43 | *.so
44 | *.apk
45 | *.drc
46 | *.map
47 | *.dres
48 | *.rsm
49 | *.tds
50 | *.dcu
51 | *.lib
52 | *.a
53 | *.o
54 | *.ocx
55 | Thumbs.db
56 | *.bak
57 | *.cache
58 | *.zip
59 | *.log
60 | desktop.ini
61 |
62 | samples/fpc/MultiLogger/backup/
63 | # Delphi autogenerated files (duplicated info)
64 | *.cfg
65 | *.hpp
66 | *Resource.rc
67 |
68 | # Delphi local files (user-specific info)
69 | *.local
70 | *.identcache
71 | *.projdata
72 | *.tvsconfig
73 | *.dsk
74 |
75 | # Delphi history and backups
76 | __history/
77 | __recovery/
78 | *.~*
79 | test/
80 |
81 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi)
82 | *.stat
83 |
84 |
85 |
86 | ### FreePascal ###
87 | *.lps
88 | *.compiled
89 | *.[oa]
90 | *.ppu
91 | *.rst
92 | *.cgi
93 | *.log
94 | *.bak*
95 | fp.ini
96 | fp.cfg
97 | fp.dsk
98 | *.lps
99 | *.rsj
100 |
101 | ### VisualStudio ###
102 | ## Ignore Visual Studio temporary files, build results, and
103 | ## files generated by popular Visual Studio add-ons.
104 | ##
105 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
106 |
107 |
108 | # User-specific files
109 | *.suo
110 | *.user
111 | *.userosscache
112 | *.sln.docstates
113 |
114 |
115 | # User-specific files (MonoDevelop/Xamarin Studio)
116 | *.userprefs
117 |
118 |
119 | # Build results
120 | [Dd]ebug/
121 | [Dd]ebugPublic/
122 | [Rr]elease/
123 | [Rr]eleases/
124 | x64/
125 | x86/
126 | bld/
127 | [Bb]in/
128 | [Oo]bj/
129 | [Ll]og/
130 |
131 | # Visual Studio 2015/2017 cache/options directory
132 | .vs/
133 | # Uncomment if you have tasks that create the project's static files in wwwroot
134 | #wwwroot/
135 |
136 | # Visual Studio 2017 auto generated files
137 | Generated\ Files/
138 |
139 | # MSTest test Results
140 | [Tt]est[Rr]esult*/
141 | [Bb]uild[Ll]og.*
142 |
143 | # NUNIT
144 | *.VisualState.xml
145 | TestResult.xml
146 |
147 | # Build Results of an ATL Project
148 | [Dd]ebugPS/
149 | [Rr]eleasePS/
150 | dlldata.c
151 |
152 | # Benchmark Results
153 | BenchmarkDotNet.Artifacts/
154 |
155 | # .NET Core
156 | project.lock.json
157 | project.fragment.lock.json
158 | artifacts/
159 |
160 | # StyleCop
161 | StyleCopReport.xml
162 |
163 | # Files built by Visual Studio
164 | *_i.c
165 | *_p.c
166 | *_i.h
167 | *.ilk
168 | *.meta
169 | *.obj
170 | *.iobj
171 | *.pch
172 | *.pdb
173 | *.ipdb
174 | *.pgc
175 | *.pgd
176 | *.rsp
177 | *.sbr
178 | *.tlb
179 | *.tli
180 | *.tlh
181 | *.tmp
182 | *.tmp_proj
183 | *.vspscc
184 | *.vssscc
185 | .builds
186 | *.pidb
187 | *.svclog
188 | *.scc
189 |
190 | # Chutzpah Test files
191 | _Chutzpah*
192 |
193 | # Visual C++ cache files
194 | ipch/
195 | *.aps
196 | *.ncb
197 | *.opendb
198 | *.opensdf
199 | *.sdf
200 | *.cachefile
201 | *.VC.db
202 | *.VC.VC.opendb
203 |
204 | # Visual Studio profiler
205 | *.psess
206 | *.vsp
207 | *.vspx
208 | *.sap
209 |
210 | # Visual Studio Trace Files
211 | *.e2e
212 |
213 | # TFS 2012 Local Workspace
214 | $tf/
215 |
216 | # Guidance Automation Toolkit
217 | *.gpState
218 |
219 | # ReSharper is a .NET coding add-in
220 | _ReSharper*/
221 | *.[Rr]e[Ss]harper
222 | *.DotSettings.user
223 |
224 | # JustCode is a .NET coding add-in
225 | .JustCode
226 |
227 | # TeamCity is a build add-in
228 | _TeamCity*
229 |
230 | # DotCover is a Code Coverage Tool
231 | *.dotCover
232 |
233 | # AxoCover is a Code Coverage Tool
234 | .axoCover/*
235 | !.axoCover/settings.json
236 |
237 | # Visual Studio code coverage results
238 | *.coverage
239 | *.coveragexml
240 |
241 | # NCrunch
242 | _NCrunch_*
243 | .*crunch*.local.xml
244 | nCrunchTemp_*
245 |
246 | # MightyMoose
247 | *.mm.*
248 | AutoTest.Net/
249 |
250 | # Web workbench (sass)
251 | .sass-cache/
252 |
253 | # Installshield output folder
254 | [Ee]xpress/
255 |
256 | # DocProject is a documentation generator add-in
257 | DocProject/buildhelp/
258 | DocProject/Help/*.HxT
259 | DocProject/Help/*.HxC
260 | DocProject/Help/*.hhc
261 | DocProject/Help/*.hhk
262 | DocProject/Help/*.hhp
263 | DocProject/Help/Html2
264 | DocProject/Help/html
265 |
266 | # Click-Once directory
267 | publish/
268 |
269 | # Publish Web Output
270 | *.[Pp]ublish.xml
271 | *.azurePubxml
272 | # Note: Comment the next line if you want to checkin your web deploy settings,
273 | # but database connection strings (with potential passwords) will be unencrypted
274 | *.pubxml
275 | *.publishproj
276 |
277 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
278 | # checkin your Azure Web App publish settings, but sensitive information contained
279 | # in these scripts will be unencrypted
280 | PublishScripts/
281 |
282 | # The packages folder can be ignored because of Package Restore
283 | **/[Pp]ackages/*
284 | # except build/, which is used as an MSBuild target.
285 | !**/[Pp]ackages/build/
286 | # Uncomment if necessary however generally it will be regenerated when needed
287 | #!**/[Pp]ackages/repositories.config
288 | # NuGet v3's project.json files produces more ignorable files
289 | *.nuget.props
290 | *.nuget.targets
291 |
292 | # Microsoft Azure Build Output
293 | csx/
294 | *.build.csdef
295 |
296 | # Microsoft Azure Emulator
297 | ecf/
298 | rcf/
299 |
300 | # Windows Store app package directories and files
301 | AppPackages/
302 | BundleArtifacts/
303 | Package.StoreAssociation.xml
304 | _pkginfo.txt
305 | *.appx
306 |
307 | # Visual Studio cache files
308 | # files ending in .cache can be ignored
309 | *.[Cc]ache
310 | # but keep track of directories ending in .cache
311 | !*.[Cc]ache/
312 |
313 | # Others
314 | ClientBin/
315 | ~$*
316 | *~
317 | *.dbmdl
318 | *.dbproj.schemaview
319 | *.jfm
320 | *.pfx
321 | *.publishsettings
322 | orleans.codegen.cs
323 |
324 | # Including strong name files can present a security risk
325 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
326 | #*.snk
327 |
328 | # Since there are multiple workflows, uncomment next line to ignore bower_components
329 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
330 | #bower_components/
331 |
332 | # RIA/Silverlight projects
333 | Generated_Code/
334 |
335 | # Backup & report files from converting an old project file
336 | # to a newer Visual Studio version. Backup files are not needed,
337 | # because we have git ;-)
338 | _UpgradeReport_Files/
339 | Backup*/
340 | UpgradeLog*.XML
341 | UpgradeLog*.htm
342 | ServiceFabricBackup/
343 | *.rptproj.bak
344 |
345 | # SQL Server files
346 | *.mdf
347 | *.ldf
348 | *.ndf
349 |
350 | # Business Intelligence projects
351 | *.rdl.data
352 | *.bim.layout
353 | *.bim_*.settings
354 | *.rptproj.rsuser
355 |
356 | # Microsoft Fakes
357 | FakesAssemblies/
358 |
359 | # GhostDoc plugin setting file
360 | *.GhostDoc.xml
361 |
362 | # Node.js Tools for Visual Studio
363 | .ntvs_analysis.dat
364 | node_modules/
365 |
366 | # Visual Studio 6 build log
367 | *.plg
368 |
369 | # Visual Studio 6 workspace options file
370 | *.opt
371 |
372 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
373 | *.vbw
374 |
375 | # Visual Studio LightSwitch build output
376 | **/*.HTMLClient/GeneratedArtifacts
377 | **/*.DesktopClient/GeneratedArtifacts
378 | **/*.DesktopClient/ModelManifest.xml
379 | **/*.Server/GeneratedArtifacts
380 | **/*.Server/ModelManifest.xml
381 | _Pvt_Extensions
382 |
383 | # Paket dependency manager
384 | .paket/paket.exe
385 | paket-files/
386 |
387 | # FAKE - F# Make
388 | .fake/
389 |
390 | # JetBrains Rider
391 | .idea/
392 | *.sln.iml
393 |
394 | # CodeRush
395 | .cr/
396 |
397 | # Python Tools for Visual Studio (PTVS)
398 | __pycache__/
399 | *.pyc
400 |
401 | # Cake - Uncomment if you are using it
402 | # tools/**
403 | # !tools/packages.config
404 |
405 | # Tabs Studio
406 | *.tss
407 |
408 | # Telerik's JustMock configuration file
409 | *.jmconfig
410 |
411 | # BizTalk build output
412 | *.btp.cs
413 | *.btm.cs
414 | *.odx.cs
415 | *.xsd.cs
416 |
417 | # OpenCover UI analysis results
418 | OpenCover/
419 |
420 | # Azure Stream Analytics local run output
421 | ASALocalRun/
422 |
423 | # MSBuild Binary and Structured Log
424 | *.binlog
425 |
426 | # NVidia Nsight GPU debugger configuration file
427 | *.nvuser
428 |
429 | # MFractors (Xamarin productivity tool) working folder
430 | .mfractor/
431 |
432 | ### VisualStudio Patch ###
433 | # By default, sensitive information, such as encrypted password
434 | # should be stored in the .pubxml.user file.
435 | *.pubxml.user
436 |
437 |
438 | # End of https://www.gitignore.io/api/delphi,freepascal,visualstudio
439 |
440 | test/MultiLoggerTest/
441 | bin/
442 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to find out which attributes exist for C# debugging
3 | // Use hover for the description of the existing attributes
4 | // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": ".NET Core Launch (console)",
9 | "type": "coreclr",
10 | "request": "launch",
11 | "preLaunchTask": "build",
12 | // If you have changed target frameworks, make sure to update the program path.
13 | "program": "${workspaceFolder}/library/wrappers/dotnet/QuickLogger/QuickLogger.DefaultSettings.Generator/bin/Debug/netcoreapp2.0/QuickLogger.DefaultSettings.Generator.dll",
14 | "args": [],
15 | "cwd": "${workspaceFolder}/library/wrappers/dotnet/QuickLogger/QuickLogger.DefaultSettings.Generator",
16 | // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
17 | "console": "internalConsole",
18 | "stopAtEntry": false,
19 | "internalConsoleOptions": "openOnSessionStart"
20 | },
21 | {
22 | "name": ".NET Core Attach",
23 | "type": "coreclr",
24 | "request": "attach",
25 | "processId": "${command:pickProcess}"
26 | }
27 | ,]
28 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "build",
6 | "command": "dotnet",
7 | "type": "process",
8 | "args": [
9 | "build",
10 | "${workspaceFolder}/library/wrappers/dotnet/QuickLogger/QuickLogger.DefaultSettings.Generator/QuickLogger.DefaultSettings.Generator.csproj"
11 | ],
12 | "problemMatcher": "$msCompile"
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/Delphinus.Info.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "{A404182F-6CED-4E8A-9028-6E068B5B7074}",
3 | "name": "",
4 | "picture": "QuickLogger.png",
5 | "license_type": "Apache-2.0",
6 | "license_file": "LICENSE.txt",
7 | "platforms": "Win32;Win64;OSX32;Android;IOSDevice32;IOSDevice64;Linux64",
8 | "package_compiler_min": 22,
9 | "package_compiler_max": 36,
10 | "compiler_min": 22,
11 | "compiler_max": 36,
12 | "first_version": "",
13 | "report_url": "",
14 | "dependencies":
15 | [
16 | {
17 | "id": "{039708CE-1DC1-4FC5-A58E-A77B3177A9C8}",
18 | "version_min": "1.0"
19 | }
20 | ]
21 | }
--------------------------------------------------------------------------------
/Delphinus.Install.json:
--------------------------------------------------------------------------------
1 | {
2 | "search_pathes":
3 | [
4 | {
5 | "pathes": ".",
6 | "platforms": "Win32;Win64;OSX32;Android;IOSDevice32;IOSDevice64;Linux64"
7 | }
8 | ],
9 | "browsing_pathes":
10 | [
11 | {
12 | "pathes": ".",
13 | "platforms": "Win32;Win64;OSX32;Android;IOSDevice32;IOSDevice64;Linux64"
14 | }
15 | ],
16 |
17 | "source_folders":
18 | [
19 | {
20 | "folder": ".",
21 | "recursive": true,
22 | "filter": "*;*.*"
23 | }
24 | ]
25 |
26 | }
--------------------------------------------------------------------------------
/Quick.Logger.ExceptionHook.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.ExceptionHook.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.ADODB.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.ADODB.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Console.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Console.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.ElasticSearch.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.ElasticSearch.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Email.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Email.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.EventLog.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.EventLog.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Events.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Events.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.GrayLog.pas:
--------------------------------------------------------------------------------
1 | { ***************************************************************************
2 |
3 | Copyright (c) 2016-2020 Kike Pérez
4 |
5 | Unit : Quick.Logger.Provider.GrayLog
6 | Description : Log GrayLog Provider
7 | Author : Kike Pérez
8 | Version : 1.2
9 | Created : 15/03/2019
10 | Modified : 25/04/2020
11 |
12 | This file is part of QuickLogger: https://github.com/exilon/QuickLogger
13 |
14 | ***************************************************************************
15 |
16 | Licensed under the Apache License, Version 2.0 (the "License");
17 | you may not use this file except in compliance with the License.
18 | You may obtain a copy of the License at
19 |
20 | http://www.apache.org/licenses/LICENSE-2.0
21 |
22 | Unless required by applicable law or agreed to in writing, software
23 | distributed under the License is distributed on an "AS IS" BASIS,
24 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 | See the License for the specific language governing permissions and
26 | limitations under the License.
27 |
28 | *************************************************************************** }
29 | unit Quick.Logger.Provider.GrayLog;
30 |
31 | {$i QuickLib.inc}
32 |
33 | interface
34 |
35 | uses
36 | Classes,
37 | SysUtils,
38 | DateUtils,
39 | {$IFDEF FPC}
40 | fpjson,
41 | fpjsonrtti,
42 | {$ELSE}
43 | {$IFDEF DELPHIXE8_UP}
44 | System.JSON,
45 | {$ELSE}
46 | Data.DBXJSON,
47 | {$ENDIF}
48 | {$ENDIF}
49 | Quick.HttpClient,
50 | Quick.Commons,
51 | Quick.Logger;
52 |
53 | type
54 |
55 | TLogGrayLogProvider = class (TLogProviderBase)
56 | private
57 | fHTTPClient : TJsonHTTPClient;
58 | fURL : string;
59 | fFullURL : string;
60 | fGrayLogVersion : string;
61 | fShortMessageAsEventType : Boolean;
62 | fConnectionTimeout : Integer;
63 | fResponseTimeout : Integer;
64 | fUserAgent : string;
65 | function LogToGELF(cLogItem: TLogItem): string;
66 | function EventTypeToSysLogLevel(aEventType : TEventType) : Integer;
67 | public
68 | constructor Create; override;
69 | destructor Destroy; override;
70 | property URL : string read fURL write fURL;
71 | property GrayLogVersion : string read fGrayLogVersion write fGrayLogVersion;
72 | property ShortMessageAsEventType : Boolean read fShortMessageAsEventType write fShortMessageAsEventType;
73 | property UserAgent : string read fUserAgent write fUserAgent;
74 | property JsonOutputOptions : TJsonOutputOptions read fJsonOutputOptions write fJsonOutputOptions;
75 | procedure Init; override;
76 | procedure Restart; override;
77 | procedure WriteLog(cLogItem : TLogItem); override;
78 | end;
79 |
80 | var
81 | GlobalLogGrayLogProvider : TLogGrayLogProvider;
82 |
83 | implementation
84 |
85 | const
86 | DEF_HTTPCONNECTION_TIMEOUT = 60000;
87 | DEF_HTTPRESPONSE_TIMEOUT = 60000;
88 |
89 | type
90 | TSyslogSeverity = (slEmergency, {0 - emergency - system unusable}
91 | slAlert, {1 - action must be taken immediately }
92 | slCritical, { 2 - critical conditions }
93 | slError, {3 - error conditions }
94 | slWarning, {4 - warning conditions }
95 | slNotice, {5 - normal but signification condition }
96 | slInformational, {6 - informational }
97 | slDebug); {7 - debug-level messages }
98 |
99 | constructor TLogGrayLogProvider.Create;
100 | begin
101 | inherited;
102 | LogLevel := LOG_ALL;
103 | fURL := 'http://localhost:12201';
104 | fGrayLogVersion := '2.1';
105 | fShortMessageAsEventType := False;
106 | fJsonOutputOptions.UseUTCTime := False;
107 | fConnectionTimeout := DEF_HTTPCONNECTION_TIMEOUT;
108 | fResponseTimeout := DEF_HTTPRESPONSE_TIMEOUT;
109 | fUserAgent := DEF_USER_AGENT;
110 | IncludedInfo := [iiAppName,iiHost,iiEnvironment];
111 | end;
112 |
113 | destructor TLogGrayLogProvider.Destroy;
114 | begin
115 | if Assigned(fHTTPClient) then FreeAndNil(fHTTPClient);
116 |
117 | inherited;
118 | end;
119 |
120 | procedure TLogGrayLogProvider.Init;
121 | begin
122 | fFullURL := Format('%s/gelf',[fURL]);
123 | fHTTPClient := TJsonHTTPClient.Create;
124 | fHTTPClient.ConnectionTimeout := fConnectionTimeout;
125 | fHTTPClient.ResponseTimeout := fResponseTimeout;
126 | fHTTPClient.ContentType := 'application/json';
127 | fHTTPClient.UserAgent := fUserAgent;
128 | fHTTPClient.HandleRedirects := True;
129 | inherited;
130 | end;
131 |
132 | function TLogGrayLogProvider.EventTypeToSysLogLevel(aEventType : TEventType) : Integer;
133 | begin
134 | case aEventType of
135 | etHeader: Result := Integer(TSyslogSeverity.slInformational);
136 | etInfo: Result := Integer(TSyslogSeverity.slInformational);
137 | etSuccess: Result := Integer(TSyslogSeverity.slNotice);
138 | etWarning: Result := Integer(TSyslogSeverity.slWarning);
139 | etError: Result := Integer(TSyslogSeverity.slError);
140 | etCritical: Result := Integer(TSyslogSeverity.slCritical);
141 | etException: Result := Integer(TSyslogSeverity.slAlert);
142 | etDebug: Result := Integer(TSyslogSeverity.slDebug);
143 | etTrace: Result := Integer(TSyslogSeverity.slInformational);
144 | etDone: Result := Integer(TSyslogSeverity.slNotice);
145 | etCustom1: Result := Integer(TSyslogSeverity.slEmergency);
146 | etCustom2: Result := Integer(TSyslogSeverity.slInformational);
147 | else Result := Integer(TSyslogSeverity.slInformational);
148 | end;
149 | end;
150 |
151 | function TLogGrayLogProvider.LogToGELF(cLogItem: TLogItem): string;
152 | var
153 | json : TJSONObject;
154 | tagName : string;
155 | tagValue : string;
156 | begin
157 | json := TJSONObject.Create;
158 | try
159 | json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('version',fGrayLogVersion);
160 | json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('host',SystemInfo.HostName);
161 | if fShortMessageAsEventType then
162 | begin
163 | json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('short_message',EventTypeName[cLogItem.EventType]);
164 | json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('full_message',cLogItem.Msg);
165 | end
166 | else
167 | begin
168 | json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('type',EventTypeName[cLogItem.EventType]);
169 | json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('short_message',cLogItem.Msg);
170 | end;
171 | {$IFDEF FPC}
172 | json.Add('timestamp',TJSONInt64Number.Create(DateTimeToUnix(cLogItem.EventDate)));
173 | json.Add('level',TJSONInt64Number.Create(EventTypeToSysLogLevel(cLogItem.EventType)));
174 | {$ELSE}
175 | {$IFDEF DELPHIXE7_UP}
176 | json.AddPair('timestamp',TJSONNumber.Create(DateTimeToUnix(cLogItem.EventDate,fJsonOutputOptions.UseUTCTime)));
177 | {$ELSE}
178 | json.AddPair('timestamp',TJSONNumber.Create(DateTimeToUnix(cLogItem.EventDate)));
179 | {$ENDIF}
180 | json.AddPair('level',TJSONNumber.Create(EventTypeToSysLogLevel(cLogItem.EventType)));
181 | {$ENDIF}
182 |
183 | if iiAppName in IncludedInfo then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('_application',AppName);
184 | if iiEnvironment in IncludedInfo then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('_environment',Environment);
185 | if iiPlatform in IncludedInfo then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('_platform',PlatformInfo);
186 | if iiOSVersion in IncludedInfo then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('_OS',SystemInfo.OSVersion);
187 | if iiUserName in IncludedInfo then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('_user',SystemInfo.UserName);
188 | if iiThreadId in IncludedInfo then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('_treadid',cLogItem.ThreadId.ToString);
189 | if iiProcessId in IncludedInfo then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}('_pid',SystemInfo.ProcessId.ToString);
190 |
191 | for tagName in IncludedTags do
192 | begin
193 | if fCustomTags.TryGetValue(tagName,tagValue) then json.{$IFDEF FPC}Add{$ELSE}AddPair{$ENDIF}(tagName,tagValue);
194 | end;
195 |
196 | {$IFDEF DELPHIXE8_UP}
197 | Result := json.ToJSON
198 | {$ELSE}
199 | {$IFDEF FPC}
200 | Result := json.AsJSON;
201 | {$ELSE}
202 | Result := json.ToString;
203 | {$ENDIF}
204 | {$ENDIF}
205 | finally
206 | json.Free;
207 | end;
208 | end;
209 |
210 | procedure TLogGrayLogProvider.Restart;
211 | begin
212 | Stop;
213 | if Assigned(fHTTPClient) then FreeAndNil(fHTTPClient);
214 | Init;
215 | end;
216 |
217 | procedure TLogGrayLogProvider.WriteLog(cLogItem : TLogItem);
218 | var
219 | resp : IHttpRequestResponse;
220 | begin
221 | if CustomMsgOutput then resp := fHTTPClient.Post(fFullURL,LogItemToFormat(cLogItem))
222 | else resp := fHTTPClient.Post(fFullURL,LogToGELF(cLogItem));
223 |
224 | if not (resp.StatusCode in [200,201,202]) then
225 | raise ELogger.Create(Format('[TLogGrayLogProvider] : Response %d : %s trying to post event',[resp.StatusCode,resp.StatusText]));
226 | end;
227 |
228 | initialization
229 | GlobalLogGrayLogProvider := TLogGrayLogProvider.Create;
230 |
231 | finalization
232 | if Assigned(GlobalLogGrayLogProvider) and (GlobalLogGrayLogProvider.RefCount = 0) then GlobalLogGrayLogProvider.Free;
233 |
234 | end.
235 |
--------------------------------------------------------------------------------
/Quick.Logger.Provider.IDEDebug.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.IDEDebug.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.InfluxDB.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.InfluxDB.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Logstash.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Logstash.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Memory.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Memory.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Redis.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Redis.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Rest.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Rest.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Sentry.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Sentry.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Slack.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Slack.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.SolR.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.SolR.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.StringList.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.StringList.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.SysLog.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.SysLog.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Telegram.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Telegram.pas
--------------------------------------------------------------------------------
/Quick.Logger.Provider.Twilio.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.Provider.Twilio.pas
--------------------------------------------------------------------------------
/Quick.Logger.RuntimeErrorHook.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.RuntimeErrorHook.pas
--------------------------------------------------------------------------------
/Quick.Logger.UnhandledExceptionHook.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/Quick.Logger.UnhandledExceptionHook.pas
--------------------------------------------------------------------------------
/QuickLib.inc:
--------------------------------------------------------------------------------
1 | {
2 | This file is part of QuickLib: https://github.com/exilon/QuickLib
3 |
4 | QuickLibs. Copyright (C) 2024 Kike Pérez
5 | Exilon - https://www.exilon.es
6 |
7 | ***************************************************************************
8 |
9 | Licensed under the Apache License, Version 2.0 (the "License");
10 | you may not use this file except in compliance with the License.
11 | You may obtain a copy of the License at
12 |
13 | http://www.apache.org/licenses/LICENSE-2.0
14 |
15 | Unless required by applicable law or agreed to in writing, software
16 | distributed under the License is distributed on an "AS IS" BASIS,
17 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 | See the License for the specific language governing permissions and
19 | limitations under the License.
20 |
21 | ***************************************************************************
22 | }
23 |
24 | {$ifdef FPC}
25 | {$MODE DELPHI}
26 |
27 | {$INLINE ON}
28 | {$define HASINLINE}
29 |
30 | {$ifdef LINUX}
31 | {$define FPCLINUX}
32 | {$endif}
33 |
34 | {$ifdef ANDROID}
35 | {$define LINUX}
36 | {$endif}
37 |
38 | {$ifdef VER2_7}
39 | {$define ISFPC27}
40 | {$endif}
41 |
42 | {$ifdef VER3_0}
43 | {$define ISFPC27}
44 | {$define ISFPC30}
45 | {$endif}
46 |
47 | {$ifdef VER3_1}
48 | {$define ISFPC27}
49 | {$define ISFPC30}
50 | {$endif}
51 |
52 | {$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
53 | {$define FPC_ENUMHASINNER}
54 | {$endif}
55 |
56 | {$ifdef FPC_HAS_MANAGEMENT_OPERATORS}
57 | {$define ISDELPHI2006ANDUP}
58 | {$endif FPC_HAS_MANAGEMENT_OPERATORS}
59 |
60 | {$else FPC}
61 |
62 | {$ifdef CONDITIONALEXPRESSIONS} //Delphi 6 or newer
63 | {$define HASINTERFACERTTI} //interface RTTI (not FPC)
64 | {$ifndef LINUX}
65 | {$ifdef VER140}
66 | {$define DELPHI6_UP} //Delphi 6 or newer
67 | {$else}
68 | {$define DELPHI7_UP} //Delphi 7 or newer
69 | {$endif}
70 | {$endif LINUX}
71 | {$if CompilerVersion >= 17}
72 | {$define DELPHI2005_UP} //Delphi 2005 or newer
73 | {$endif}
74 | {$if CompilerVersion >= 18}
75 | {$define DELPHI2006_UP} //Delphi 2006 or newer
76 | {$define HASINLINE}
77 | {$endif}
78 | {$if CompilerVersion > 18}
79 | {$define DELPHI2007_UP} //Delphi 2007 or newer
80 | {$endif}
81 | {$if CompilerVersion = 20}
82 | {$define DELPHI2009_UP} //Delphi 2009
83 | {$endif}
84 | {$if CompilerVersion >= 21.0} //Delphi 2010
85 | {$define DELPHI2010_UP}
86 | {$define FPC_OR_UNICODE}
87 | {$endif}
88 | {$if CompilerVersion >= 22.0} //Delphi XE
89 | {$define DELPHIXE_UP}
90 | {$endif}
91 | {$if CompilerVersion >= 23.0} //Delphi XE2
92 | {$define DELPHIXE2_UP}
93 | {$endif}
94 | {$if CompilerVersion >= 24.0} //Delphi XE3
95 | {$define DELPHIXE3_UP}
96 | {$endif}
97 | {$if CompilerVersion >= 25.0} //Delphi XE4
98 | {$define DELPHIXE4_UP}
99 | {$endif}
100 | {$if CompilerVersion >= 26.0} //Delphi XE5
101 | {$define DELPHIXE5_UP}
102 | {$endif}
103 | {$if CompilerVersion >= 27.0} //Delphi XE6
104 | {$define DELPHIXE6_UP}
105 | {$endif}
106 | {$if CompilerVersion >= 28.0} //Delphi XE7
107 | {$define DELPHIXE7_UP}
108 | {$endif}
109 | {$if CompilerVersion >= 29.0} //Delphi XE8
110 | {$define DELPHIXE8_UP}
111 | {$endif}
112 | {$if CompilerVersion >= 30.0} //Delphi XE10 Seattle
113 | {$define DELPHIRX10_UP}
114 | {$define DELPHISEATTLE_UP}
115 | {$endif}
116 | {$if CompilerVersion >= 31.0} //Delphi RX10.1 Berlin
117 | {$define DELPHIRX101_UP}
118 | {$define DELPHIBERLIN_UP}
119 | {$endif}
120 | {$if CompilerVersion >= 32.0} //Delphi RX10.2 Tokyo
121 | {$define DELPHIRX102_UP}
122 | {$define DELPHITOKYO_UP}
123 | {$ifdef LINUX}
124 | {$define DELPHILINUX}
125 | {$endif}
126 | {$endif}
127 | {$if CompilerVersion >= 33.0} //Delphi RX10.3 Rio
128 | {$define DELPHIRX103_UP}
129 | {$define DELPHIRIO_UP}
130 | {$endif}
131 | {$if CompilerVersion >= 34.0} //Delphi RX10.4 Sydney
132 | {$define DELPHIRX104_UP}
133 | {$define DELPHISYDNEY_UP}
134 | {$endif}
135 | {$if CompilerVersion >= 35.0} //Delphi RX11 Alexandria
136 | {$define DELPHIRX11_UP}
137 | {$define DELPHIALEXANDRIA_UP}
138 | {$UNDEF DELPHILINUX}
139 | {$if defined(POSIX)}
140 | {$DEFINE LINUX}
141 | {$DEFINE DELPHILINUX}
142 | {$if defined(CPUARM)}
143 | {$if defined(MACOS)}
144 |
145 | {$ELSE}
146 | {$DEFINE ANDROID}
147 | {$ENDIF}
148 | {$ENDIF}
149 | {$ENDIF}
150 | {$if defined(ANDROID) OR defined(IOS)}
151 | {$define NEXTGEN} //compatibility with older delphis
152 | {$endif}
153 | {$endif}
154 | {$if CompilerVersion >= 36.0} //Delphi RX11 Alexandria
155 | {$define DELPHIRX12_UP}
156 | {$define DELPHIATHENS_UP}
157 | {$UNDEF DELPHILINUX}
158 | {$if defined(POSIX)}
159 | {$DEFINE LINUX}
160 | {$DEFINE DELPHILINUX}
161 | {$if defined(CPUARM)}
162 | {$if defined(MACOS)}
163 | {$ELSE}
164 | {$DEFINE ANDROID}
165 | {$ENDIF}
166 | {$ENDIF}
167 | {$ENDIF}
168 | {$if defined(ANDROID) OR defined(IOS)}
169 | {$define NEXTGEN} //compatibility with older delphis
170 | {$endif}
171 | {$endif}
172 | {$else}
173 | //Delphi 5 or older
174 | {$define DELPHI6OROLDER}
175 | {$define DELPHI5OROLDER}
176 | {$define DELPHI5ORFPC}
177 | {$define MSWINDOWS}
178 | {$endif}
179 |
180 | {$endif FPC}
181 |
182 | {$ifdef VER150}
183 | {$WARN SYMBOL_DEPRECATED OFF}
184 | {$WARN UNSAFE_TYPE OFF}
185 | {$WARN UNSAFE_CODE OFF}
186 | {$WARN UNSAFE_CAST OFF}
187 | {$ENDIF}
188 |
189 | {$ifdef CONDITIONALEXPRESSIONS} //Delphi 6 or newer
190 | {.$WARN SYMBOL_PLATFORM OFF}
191 | {.$WARN UNIT_PLATFORM OFF}
192 | {$endif}
193 |
194 | {.$DEFINE QUICK_HINTSOFF}
195 | {.$DEFINE QUICK_WARNOFF}
196 |
197 | {$ifdef QUICK_HINTSOFF}
198 | {$HINTS OFF}
199 | {$endif}
200 |
201 | {$ifdef QUICK_WARNOFF}
202 | {$WARNINGS OFF}
203 | {$endif}
204 |
205 |
206 |
--------------------------------------------------------------------------------
/QuickLogger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/QuickLogger.png
--------------------------------------------------------------------------------
/docs/QuickLogger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/docs/QuickLogger.png
--------------------------------------------------------------------------------
/docs/githubstartme.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/docs/githubstartme.jpg
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/ProjectGroup1.groupproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {46236C72-4DAE-4D45-853F-1B44E7CEB347}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Default.Personality.12
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.Lib.Tester.Tester:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/delphi&lazarus/src/QuickLogger.Lib.Tester.Tester
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.Lib.Tester.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 |
8 |
9 | QuickLogger.Lib.Tester\
10 | QuickLogger_Lib_Tester.exe
11 | ProjectOutput
12 | 0
13 |
14 |
15 | True
16 | True
17 |
18 |
19 |
20 |
21 |
22 | QuickLogger.Lib.Tester\
23 | libQuickLogger.so
24 | File
25 | 0
26 |
27 |
28 | True
29 |
30 |
31 | QuickLogger.Lib.Tester\
32 | libQuickLogger.so
33 | File
34 | 0
35 |
36 |
37 | True
38 |
39 |
40 | QuickLogger.Lib.Tester\
41 | QuickLogger_Lib_Tester
42 | ProjectOutput
43 | 1
44 |
45 |
46 | True
47 | True
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.Lib.Tester.dpr:
--------------------------------------------------------------------------------
1 | program QuickLogger.Lib.Tester;
2 |
3 | {$APPTYPE CONSOLE}
4 |
5 | {$R *.res}
6 |
7 | uses
8 | Quick.Commons,
9 | Quick.Console,
10 | {$IFDEF MSWINDOWS}
11 | Winapi.ActiveX,
12 | {$ENDIF}
13 | System.SysUtils;
14 |
15 | const
16 | {$IFDEF MSWINDOWS}
17 | LIBPATH = '.\QuickLogger.dll';
18 | {$ELSE}
19 | LIBPATH = './libQuickLogger.so';
20 | {$ENDIF}
21 |
22 | function AddProviderJSONNative(Provider : Pchar) : Integer; stdcall; external LIBPATH;
23 | function AddStandardConsoleProviderNative: Integer; stdcall; external LIBPATH;
24 | function AddStandardFileProviderNative(const LogFilename : PChar) : Integer; stdcall; external LIBPATH;
25 | procedure ResetProviderNative(ProviderName : PChar); stdcall; external LIBPATH;
26 | function GetProviderNamesNative(out str: PChar): Integer; external LIBPATH;
27 | function GetLibVersionNative(out str: PChar): Integer; stdcall; external LIBPATH;
28 | function GetLastError(out str: PChar): Integer; stdcall; external LIBPATH;
29 | procedure InfoNative(Line : PChar); stdcall; external LIBPATH;
30 | procedure ErrorNative(Line : PChar); stdcall; external LIBPATH;
31 | procedure SuccessNative(Line : PChar); stdcall; external LIBPATH;
32 |
33 | function GetPChar(const str : string) : PChar;
34 | begin
35 | {$IFDEF MSWINDOWS}
36 | Result := CoTaskMemAlloc(SizeOf(Char)*(Length(str)+1));
37 | {$ELSE}
38 | {$IFDEF FPC}
39 | Result := Memory.MemAlloc(SizeOf(Char)*(Length(str)+1));
40 | {$ELSE}
41 | GetMem(Result,SizeOf(Char)*(Length(str)+1));
42 | {$ENDIF}
43 | {$ENDIF}
44 | {$IFNDEF FPC}
45 | StrCopy(Result, PWideChar(str));
46 | {$ELSE}
47 | StrCopy(Result, PChar(str));
48 | {$ENDIF}
49 | end;
50 |
51 | begin
52 | try
53 | AddStandardConsoleProviderNative;
54 | AddStandardFileProviderNative('./Logger.log');
55 | InfoNative('Info test');
56 | ErrorNative('Error test');
57 | SuccessNative('Success test');
58 | cout('press to Exit',ccYellow);
59 | ConsoleWaitForEnterKey;
60 | except
61 | on E: Exception do
62 | Writeln(E.ClassName, ': ', E.Message);
63 | end;
64 | end.
65 |
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.Lib.Tester.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.Lib.Tester.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/delphi&lazarus/src/QuickLogger.Lib.Tester.res
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 |
8 |
9 | QuickLogger\
10 | QuickLogger.dll
11 | ProjectOutput
12 | 0
13 |
14 |
15 | True
16 | True
17 |
18 |
19 |
20 |
21 | QuickLogger\
22 | QuickLogger.dll
23 | ProjectOutput
24 | 0
25 |
26 |
27 | True
28 | True
29 |
30 |
31 |
32 |
33 | QuickLogger\
34 | libQuickLogger.so
35 | ProjectOutput
36 | 1
37 |
38 |
39 | True
40 | True
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/QuickLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/delphi&lazarus/src/QuickLogger.res
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/lib/x86_64-linux/QuickLogger.Lib.Tester.or:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/delphi&lazarus/src/lib/x86_64-linux/QuickLogger.Lib.Tester.or
--------------------------------------------------------------------------------
/library/delphi&lazarus/src/lib/x86_64-linux/QuickLogger.Lib.Tester.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/delphi&lazarus/src/lib/x86_64-linux/QuickLogger.Lib.Tester.res
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.Extensions.NetCore.1.5.6.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/QuickLogger.Extensions.NetCore.1.5.6.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.Extensions.NetCore.1.5.8.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/QuickLogger.Extensions.NetCore.1.5.8.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.Extensions.NetCore.1.5.9.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/QuickLogger.Extensions.NetCore.1.5.9.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.Extensions.Wrapper.1.5.6.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/QuickLogger.Extensions.Wrapper.1.5.6.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.Extensions.Wrapper.1.5.7.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/QuickLogger.Extensions.Wrapper.1.5.7.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.NetStandard.1.5.5.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/QuickLogger.NetStandard.1.5.5.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.NetStandard.1.5.5/QuickLogger.NetStandard.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | QuickLogger.NetStandard
5 | 1.5.5
6 | QuickLogger.NetStandard
7 | QuickLogger.NetStandard
8 | false
9 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
10 | QuickLogger is a cross-platform-native, Testable and Injectable multi-provider logging library for .NET ,NetCore, Object Paascal C, PHP, Python, Golang and more!
11 | Exilon & Turric4n
12 | Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.NetStandard.1.5.5/[Content_Types].xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.NetStandard.1.5.5/_rels/.rels:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.NetStandard.1.5.5/build/net45/QuickLogger.NetStandard.targets:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Always
5 | QuickLogger-x86.dll
6 | false
7 |
8 |
9 | Always
10 | QuickLogger-x64.dll
11 | false
12 |
13 |
14 | Always
15 | libquicklogger.so
16 | false
17 |
18 |
19 |
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.NetStandard.1.5.5/package/services/metadata/core-properties/e58e9a8a37e043fab1891917d3d74ce6.psmdcp:
--------------------------------------------------------------------------------
1 |
2 |
3 | QuickLogger.NetStandard
4 | QuickLogger is a cross-platform-native, Testable and Injectable multi-provider logging library for .NET ,NetCore, Object Paascal C, PHP, Python, Golang and more!
5 | QuickLogger.NetStandard
6 | 1.5.5
7 | Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable
8 | NuGet.Packaging, Version=5.7.0.3, Culture=neutral, PublicKeyToken=31bf3856ad364e35;
9 |
--------------------------------------------------------------------------------
/library/packaging/nuget/QuickLogger.NetStandard.Abstractions.1.5.4.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/QuickLogger.NetStandard.Abstractions.1.5.4.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/libquicklogger/libquickloggernative.redist.1.5.0.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/libquicklogger/libquickloggernative.redist.1.5.0.nupkg
--------------------------------------------------------------------------------
/library/packaging/nuget/libquicklogger/libquickloggernative.redist.1.5.1.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/library/packaging/nuget/libquicklogger/libquickloggernative.redist.1.5.1.nupkg
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.classpath
2 | **/.dockerignore
3 | **/.env
4 | **/.git
5 | **/.gitignore
6 | **/.project
7 | **/.settings
8 | **/.toolstarget
9 | **/.vs
10 | **/.vscode
11 | **/*.*proj.user
12 | **/*.dbmdl
13 | **/*.jfm
14 | **/azds.yaml
15 | **/bin
16 | **/charts
17 | **/docker-compose*
18 | **/Dockerfile*
19 | **/node_modules
20 | **/npm-debug.log
21 | **/obj
22 | **/secrets.dev.yaml
23 | **/values.dev.yaml
24 | LICENSE
25 | README.md
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.DefaultSettings.Generator/Program.cs:
--------------------------------------------------------------------------------
1 | using QuickLogger.NetStandard;
2 | using QuickLogger.NetStandard.Abstractions;
3 | using System.Collections.Generic;
4 |
5 | namespace QuickLogger.DefaultSettings.Generator
6 | {
7 | class Program
8 | {
9 | static string _smtpconfig = "{" +
10 | "\"Host\": \"mail.domain.com\"," +
11 | "\"UserName\": \"email@domain.com\"," +
12 | "\"Password\": \"jfs93as\"," +
13 | "\"UseSSL\": false" +
14 | "}";
15 | static string _mailconfig = "{" +
16 | "\"SenderName\": \"Quick.Logger Alert\"," +
17 | "\"From\": \"email@domain.com\"," +
18 | "\"Recipient\": \"alert@domain.com\"," +
19 | "\"Subject\": \"\"," +
20 | "\"Body\": \"\"," +
21 | "\"CC\": \"myemail@domain.com\"," +
22 | "\"BCC\": \"\"" +
23 | "}";
24 | static string _dbconfig = "{" +
25 | "\"Provider\": \"dbMSSQL\"," +
26 | "\"Server\": \"localhost\"," +
27 | "\"Database\": \"Logger\"," +
28 | "\"Table\": \"QuickLogger\"," +
29 | "\"UserName\": \"myuser\"," +
30 | "\"Password\": \"1234\"" +
31 | "},";
32 |
33 | static string _dbfieldsmapping = "{" +
34 | "\"EventDate\": \"EventDate\"," +
35 | "\"EventType\": \"Level\"," +
36 | "\"Msg\": \"Msg\"," +
37 | "\"Environment\": \"Environment\"," +
38 | "\"PlatformInfo\": \"PlaftormInfo\"," +
39 | "\"OSVersion\": \"OSVersion\"," +
40 | "\"AppName\": \"AppName\"," +
41 | "\"UserName\": \"UserName\"," +
42 | "\"Host\": \"Host\"" +
43 | "},";
44 |
45 |
46 | static string _limits = "{" +
47 | "\"TimeRange\": \"slNoLimit\"," +
48 | "\"LimitEventTypes\": \"[]\"," +
49 | "\"MaxSent\": 0" +
50 | "},";
51 |
52 | static string _configName = "..\\..\\..\\..\\QuickLogger.DefaultSettings\\defaultSettings.json";
53 |
54 | static Dictionary _consoleproviderinfo =
55 | new Dictionary() {
56 | // Cool Console Log provider, events can be represented with colors and underlined.
57 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ShowTimeStamp", true }, { "ShowEventColors", true }, { "UnderlineHeaderEventType", false },
58 | { "TimePrecission", true }, { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }, { "AppName", "QuickLoggerDemo" }
59 | };
60 | // Standard File Log provider, can be rotated daily and compressed.
61 | static Dictionary _fileproviderinfo =
62 | new Dictionary() {
63 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "Filename", ".\\test.log" }, { "AutoFileNameByProcess", false }, { "MaxRotateFiles", 3 },
64 | { "MaxFileSizeInMB", 10 }, { "RotatedFilesPath", "" }, { "DailyRotate", false }, { "CompressRotatedFiles", false }, { "ShowEventType", true },
65 | { "ShowHeaderInfo", true }, { "TimePrecission", true }, { "UnderlineHeaderEventType", false }, { "AutoFlush", false }, { "MaxFailsToRestart", 2 },
66 | { "MaxFailsToStop", 10 }
67 | };
68 | // SMTP Log provider, will send mails CAUTION : (Will spam if limits aren't defined!)
69 | static Dictionary _emailproviderinfo =
70 | new Dictionary() {
71 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "SMTP", _smtpconfig }, { "Mail", _mailconfig }, { "SendLimits", _limits },
72 | { "TimePrecission", true }, { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
73 | };
74 | // Windows Event Log provider.
75 | static Dictionary _windowseventlogproviderinfo =
76 | new Dictionary() {
77 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "Source", "QuickLogger" }, { "DailyRotate", false }, { "ShowTimeStamp", true }, { "TimePrecission", true },
78 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
79 | };
80 | // HTTP POST RESTful client provider. Useful to send log events to a WEBAPI.
81 | static Dictionary _restproviderinfo =
82 | new Dictionary() {
83 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "URL", "http:\\\\localhost\\event" }, { "UserAgent", "Quick.Logger Agent" },
84 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
85 | };
86 | // ELK Friendly redis TCP provider.
87 | static Dictionary _redisproviderinfo =
88 | new Dictionary() {
89 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "Host", "192.168.5.100" }, { "Port", 6379 }, { "Password", "1234"}, { "LogKey", "Log" },
90 | { "MaxSize", 1000}, { "OutputAsJson", true }, { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
91 | };
92 | // Telegram channel provider.
93 | static Dictionary _telegramproviderinfo =
94 | new Dictionary() {
95 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ChannelName", "mychannelname" }, { "ChannelType", "tcPrivate" }, { "BotToken", "555555555:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" },
96 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
97 | };
98 | // Slack Provider.
99 | static Dictionary _slackproviderinfo =
100 | new Dictionary() {
101 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ChannelName", "#myLogger" }, { "UserName", "mySlackUserName" }, { "WebHookURL", "https:\\\\hooks.slack.com\\services\\TAAAAAAAA\\BBBBBBBBB\\CCCCCCCCCCCCCCCCCCCCCCCC" },
102 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
103 | };
104 | // ADO Provider.
105 | static Dictionary _adoproviderinfo =
106 | new Dictionary() {
107 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ConnectionString", "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=myuser;Password=1234;Database=Logger;Data Source=localhost" },
108 | { "DBConfig", _dbconfig }, { "FieldsMapping", _dbfieldsmapping },
109 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
110 | };
111 | // SysLog server provider.
112 | static Dictionary _syslogproviderinfo =
113 | new Dictionary() {
114 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "Host", "127.0.0.1" }, { "Port", 514 }, { "Facility", "sfUserLevel" },
115 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
116 | };
117 |
118 | static List _providers = new List() {
119 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default Console Provider", "ConsoleProvider")),
120 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default File Provider", "FileProvider")),
121 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default Redis Provider", "RedisProvider")),
122 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default Telegram Provider", "TelegramProvider")),
123 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default Slack Provider", "SlackProvider")),
124 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default Rest Provider", "RestProvider")),
125 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default Email Provider", "EmailProvider")),
126 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default ADODB Provider", "AdoProvider")),
127 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default WindowsEventLog Provider", "WindowsEventProvider")),
128 | new QuickLoggerProvider(new QuickLoggerProviderProps("Default SysLog Provider", "SyslogProvider"))};
129 |
130 | static void Main(string[] args)
131 | {
132 | ILoggerConfigManager configManager = new QuickLoggerFileConfigManager(_configName);
133 | ILoggerSettings settings = configManager.Load();
134 | foreach (ILoggerProvider provider in _providers)
135 | {
136 | if (provider.getProviderProperties().GetProviderType() == "ConsoleProvider") { provider.getProviderProperties().SetProviderInfo(_consoleproviderinfo); }
137 | else if (provider.getProviderProperties().GetProviderType() == "FileProvider") { provider.getProviderProperties().SetProviderInfo(_fileproviderinfo); }
138 | else if (provider.getProviderProperties().GetProviderType() == "RedisProvider") { provider.getProviderProperties().SetProviderInfo(_redisproviderinfo); }
139 | else if (provider.getProviderProperties().GetProviderType() == "SlackProvider") { provider.getProviderProperties().SetProviderInfo(_slackproviderinfo); }
140 | else if (provider.getProviderProperties().GetProviderType() == "RestProvider") { provider.getProviderProperties().SetProviderInfo(_restproviderinfo); }
141 | else if (provider.getProviderProperties().GetProviderType() == "EmailProvider") { provider.getProviderProperties().SetProviderInfo(_emailproviderinfo); }
142 | else if (provider.getProviderProperties().GetProviderType() == "AdoProvider") { provider.getProviderProperties().SetProviderInfo(_adoproviderinfo); }
143 | else if (provider.getProviderProperties().GetProviderType() == "WindowsEventProvider") { provider.getProviderProperties().SetProviderInfo(_windowseventlogproviderinfo); }
144 | else if (provider.getProviderProperties().GetProviderType() == "SyslogProvider") { provider.getProviderProperties().SetProviderInfo(_syslogproviderinfo); }
145 | settings.addProvider(provider);
146 | }
147 | configManager.Write();
148 | }
149 | }
150 | }
151 |
152 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.DefaultSettings.Generator/QuickLogger.DefaultSettings.Generator.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net5.0
6 | AnyCPU;x86
7 | true
8 | true
9 | snupkg
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/CallContext.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Concurrent;
3 | using System.Collections.Generic;
4 | using System.Threading;
5 |
6 | namespace QuickLogger.Extensions.NetCore
7 | {
8 | internal static class CallContext
9 | {
10 |
11 |
12 | static ConcurrentDictionary> state = new ConcurrentDictionary>();
13 |
14 |
15 | ///
16 | /// Stores a given object and associates it with the specified name.
17 | ///
18 | /// The name with which to associate the new item in the call context.
19 | /// The object to store in the call context.
20 | public static void SetData(Guid id, T data) =>
21 | state.GetOrAdd(id, _ => new AsyncLocal()).Value = data;
22 |
23 |
24 | ///
25 | /// Retrieves an object with the specified name from the .
26 | ///
27 | /// The type of the data being retrieved. Must match the type used when the was set via .
28 | /// The name of the item in the call context.
29 | /// The object in the call context associated with the specified name, or a default value for if none is found.
30 | public static T GetData(Guid id) =>
31 | state.TryGetValue(id, out AsyncLocal data) ? data.Value : default(T);
32 |
33 |
34 | ///
35 | /// Retrieves all stored objects.
36 | ///
37 | public static ICollection> GetAll() => state.Values;
38 |
39 |
40 | ///
41 | /// Removes a given object.
42 | ///
43 | /// The name with which to associate the new item in the call context.
44 | public static void RemoveData(Guid id, out AsyncLocal data) =>
45 | state.TryRemove(id, out data);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/Configuration/CoreConfigpathFinder.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.Configuration;
2 | using QuickLogger.Extensions.Wrapper.Application.Services;
3 |
4 | namespace QuickLogger.Extensions.NetCore.Configuration
5 | {
6 | public class CoreConfigPathFinder : ILoggerSettingsPathFinder
7 | {
8 | private readonly IConfiguration _configuration;
9 | public CoreConfigPathFinder(IConfiguration configuration)
10 | {
11 | _configuration = configuration;
12 | }
13 | public string GetSettingsPath()
14 | {
15 | var settings = _configuration.GetSection("QuickLogger")["ConfigPath"];
16 | settings = string.IsNullOrEmpty(settings) ? "QuickLogger.json" : settings;
17 | return settings;
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLogger - Backup.Extensions.NetCore.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | QuickLogger Dependency Injection Extensions and Standard Logging adapters for ASPNetCore.
6 | 1.6.0
7 | Exilon & Turrican
8 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
9 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
10 | true
11 | Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable
12 | GIT
13 | 1.6.0.0
14 | 1.5.9.0
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Always
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLogger.Extensions.NetCore.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | QuickLogger Dependency Injection Extensions and Standard Logging adapters for ASPNetCore.
6 | 1.6.7
7 | Exilon & Turrican
8 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
9 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
10 | true
11 | Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable
12 | GIT
13 | 1.6.7
14 | 1.6.7
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Always
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLogger.json:
--------------------------------------------------------------------------------
1 | {
2 | "environment": "pro",
3 | "providers": [
4 | {
5 | "providerProps": {
6 | "providerName": "Standard Console Provider",
7 | "providerType": "ConsoleProvider",
8 | "providerInfo": {
9 | "ShowEventType": true,
10 | "ShowEventColors": true,
11 | "ShowTimeStamp": true,
12 | "UnderlineHeaderEventType": true,
13 | "LogLevel": "[etHeader,etInfo,etSuccess,etWarning,etError,etCritical,etException,etDone,etCustom1,etCustom2]",
14 | "TimePrecission": false,
15 | "MaxFailsToRestart": 2,
16 | "MaxFailsToStop": 10,
17 | "CustomMsgOutput": false,
18 | "UsesQueue": true,
19 | "Enable": true,
20 | "SendLimits": {
21 | "TimeRange": "slNoLimit",
22 | "LimitEventTypes": "[]",
23 | "MaxSent": 0
24 | }
25 | }
26 | }
27 | }
28 | ]
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLoggerAdapter.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.Logging;
2 | using QuickLogger.Extensions.Wrapper.Application.Services;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Runtime.InteropServices;
6 | using System.Text;
7 |
8 | namespace QuickLogger.Extensions.NetCore
9 | {
10 | public class QuickLoggerAdapter : ILogger
11 | {
12 | private readonly string _categoryName;
13 | private readonly ILoggerService _quickloggerInstance;
14 |
15 | public QuickLoggerAdapter(string categoryName, ILoggerService quickloggerInstance)
16 | {
17 | _categoryName = categoryName;
18 | _quickloggerInstance = quickloggerInstance;
19 | }
20 |
21 | public IDisposable BeginScope(TState state)
22 | {
23 | if (!(state is IDictionary))
24 | return new Scope(state);
25 |
26 | try
27 | {
28 | return Scope.CreateScope(state);
29 | }
30 | catch (Exception e)
31 | {
32 | return new Scope(state);
33 | }
34 | }
35 |
36 | public bool IsEnabled(LogLevel logLevel)
37 | {
38 | return true;
39 | }
40 |
41 | public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter)
42 | {
43 | if (!IsEnabled(logLevel))
44 | {
45 | return;
46 | }
47 |
48 | var formatterType = formatter?.GetType().ToString();
49 |
50 | var isStandardFormatter = formatterType == "System.Func`3[Microsoft.Extensions.Logging.FormattedLogValues,System.Exception,System.String]";
51 |
52 | Func ourFormatter = (s, e) =>
53 | {
54 | var msg = s.ToString();
55 |
56 | var exceptionMsg = e != null
57 | ? $" - [{e.GetType()}] : {e.Message} - StackTrace : {e.StackTrace}" : "";
58 |
59 | msg = $"{_categoryName}[{eventId.Id}] - {msg}{exceptionMsg}";
60 | return msg;
61 | };
62 |
63 | var overrideFormatter = isStandardFormatter ? ourFormatter : formatter ?? ourFormatter;
64 |
65 | //We don't care of standard formatter...
66 | var message = overrideFormatter(state, exception);
67 |
68 | switch (logLevel)
69 | {
70 | case LogLevel.Error:
71 | _quickloggerInstance.Error(_categoryName, message);
72 | break;
73 | case LogLevel.Warning:
74 | _quickloggerInstance.Warning(_categoryName, message);
75 | break;
76 | case LogLevel.Critical:
77 | _quickloggerInstance.Critical(_categoryName, message);
78 | break;
79 | case LogLevel.Debug:
80 | _quickloggerInstance.Debug(_categoryName, message);
81 | break;
82 | case LogLevel.Trace:
83 | _quickloggerInstance.Trace(_categoryName, message);
84 | break;
85 | default:
86 | _quickloggerInstance.Info(_categoryName, message);
87 | break;
88 | }
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLoggerExtensions.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.DependencyInjection;
2 | using Microsoft.Extensions.Logging;
3 | using QuickLogger.Extensions.NetCore.Configuration;
4 | using QuickLogger.Extensions.Wrapper.Application.Services;
5 | using System;
6 | using System.Net;
7 |
8 | namespace QuickLogger.Extensions.NetCore
9 | {
10 | public static class QuickLoggerExtensions
11 | {
12 | internal static ILoggingBuilder AddLogger(ILoggingBuilder builder, ILoggerService loggerService)
13 | {
14 | builder.ClearProviders();
15 | builder.AddProvider(new QuickLoggerProvider(loggerService));
16 | return builder;
17 | }
18 |
19 | public static IServiceCollection AddQuickLogger(this IServiceCollection serviceCollection)
20 | {
21 | serviceCollection.AddSingleton();
22 | serviceCollection.AddSingleton();
23 |
24 | serviceCollection.AddSingleton();
25 | serviceCollection.AddLogging(x => AddLogger(x, serviceCollection.BuildServiceProvider().GetService()));
26 | return serviceCollection;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLoggerProvider.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.Configuration;
2 | using Microsoft.Extensions.DependencyInjection;
3 | using Microsoft.Extensions.Logging;
4 | using QuickLogger.Extensions.Wrapper.Application.Services;
5 | using System.Collections.Concurrent;
6 |
7 | namespace QuickLogger.Extensions.NetCore
8 | {
9 | public class QuickLoggerProvider : ILoggerProvider
10 | {
11 | private readonly ILoggerService _quickloggerService;
12 | private readonly ConcurrentDictionary _loggers = new ConcurrentDictionary();
13 |
14 | public QuickLoggerProvider(ILoggerService quickloggerService)
15 | {
16 |
17 | _quickloggerService = quickloggerService;
18 | }
19 |
20 | public ILogger CreateLogger(string categoryName)
21 | {
22 | return _loggers.GetOrAdd(categoryName, name => new QuickLoggerAdapter(name, _quickloggerService));
23 | }
24 |
25 | public void Dispose()
26 | {
27 | _loggers.Clear();
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLoggerScope.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace QuickLogger.Extensions.NetCore
5 | {
6 | internal class Scope : IDisposable
7 | {
8 |
9 |
10 | public Guid Id { get; private set; }
11 | public TState State { get; private set; }
12 |
13 |
14 | internal Scope(TState state)
15 | {
16 | Id = Guid.NewGuid();
17 | State = state;
18 | }
19 |
20 |
21 | public static IDisposable CreateScope(TState state)
22 | {
23 | var scope = new Scope>(state as IDictionary);
24 |
25 | CallContext>>.SetData(scope.Id, scope);
26 |
27 | return scope;
28 | }
29 |
30 |
31 | public void Dispose()
32 | {
33 | CallContext>>.RemoveData(Id, out var state);
34 |
35 | state?.Value.Dispose();
36 | State = default(TState);
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/ScopeAdditionalInfoProvider.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using QuickLogger.Extensions.Wrapper.Application.Services;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Reflection;
7 | using Newtonsoft.Json;
8 | using Newtonsoft.Json.Serialization;
9 |
10 | namespace QuickLogger.Extensions.NetCore
11 | {
12 | class DictionaryAsArrayResolver : DefaultContractResolver
13 | {
14 | protected override JsonContract CreateContract(Type objectType)
15 | {
16 | if (objectType.GetInterfaces().Any(i => i == typeof(IDictionary) ||
17 | (i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IDictionary<,>))))
18 | {
19 | return base.CreateArrayContract(objectType);
20 | }
21 |
22 | return base.CreateContract(objectType);
23 | }
24 | }
25 |
26 |
27 | public class ScopeInfoProvider : IScopeInfoProviderService
28 | {
29 |
30 | public object GetScopeInfo()
31 | {
32 | var scopes = CallContext>>.GetAll();
33 |
34 | var scope = scopes.FirstOrDefault();
35 |
36 |
37 | //JsonSerializerSettings settings = new JsonSerializerSettings();
38 |
39 | //string json = JsonConvert.SerializeObject(, settings);
40 |
41 | return scope?.Value?.State;
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/Application/Services/IAdditionalLoggerInfoProviderService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace QuickLogger.Extensions.Wrapper.Application.Services
6 | {
7 | public interface IScopeInfoProviderService
8 | {
9 | object GetScopeInfo();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/Application/Services/ILoggerConfigPathFinder.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace QuickLogger.Extensions.Wrapper.Application.Services
6 | {
7 | public interface ILoggerSettingsPathFinder
8 | {
9 | string GetSettingsPath();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/Application/Services/ILoggerService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace QuickLogger.Extensions.Wrapper.Application.Services
6 | {
7 | public interface ILoggerService
8 | {
9 | void Info(string className, string msg);
10 | void Info(string className, Exception exception, string msg);
11 | void Success(string className, string msg);
12 | void Warning(string className, string msg);
13 | void Warning(string className, Exception exception, string msg);
14 | void Error(string className, string msg);
15 | void Error(string className, Exception exception, string msg);
16 | void Debug(string className, string msg);
17 | void Debug(string className, Exception exception, string msg);
18 | void Trace(string className, string msg);
19 | void Trace(string className, Exception exception, string msg);
20 | void Critical(string className, string msg);
21 | void Critical(string className, Exception exception, string msg);
22 | void Exception(Exception exception);
23 | void Exception(Exception exception, string msg);
24 | void MultiException(AggregateException aggregateException);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/Application/Services/QuickLoggerService.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using QuickLogger.Extensions.Wrapper.Domain;
3 | using QuickLogger.NetStandard;
4 | using QuickLogger.NetStandard.Abstractions;
5 | using System;
6 | using System.IO;
7 | using System.Reflection;
8 |
9 | namespace QuickLogger.Extensions.Wrapper.Application.Services
10 | {
11 | public class QuickLoggerService : ILoggerService
12 | {
13 | private static string currentPath => AppDomain.CurrentDomain != null ?
14 | Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")) :
15 | Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
16 |
17 | private ILoggerConfigManager _configManager;
18 | private ILoggerSettings _settings;
19 | private readonly IScopeInfoProviderService _additionalLoggerInfoProvider;
20 |
21 | private readonly ILoggerSettingsPathFinder _loggerSettingsPathFinder;
22 | private readonly ILogger _quicklogger;
23 |
24 | protected JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings
25 | {
26 | ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
27 | Formatting = Formatting.Indented,
28 |
29 | ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
30 | };
31 |
32 | private void InitMessage()
33 | {
34 | _quicklogger?.Success("QuickLogger loaded -> version " + _quicklogger?.GetLoggerNameAndVersion());
35 | _settings.Providers().ForEach(x => _quicklogger?.Info(x.getProviderProperties().GetProviderName() + " Provider Initalized."));
36 | }
37 |
38 | private ILoggerSettings LoadConfigFromDisk()
39 | {
40 | var quickloggerconfigpath = _loggerSettingsPathFinder.GetSettingsPath();
41 | if (!Path.IsPathRooted(quickloggerconfigpath)) { quickloggerconfigpath = Path.Combine(currentPath, "..", quickloggerconfigpath); }
42 | _configManager = new QuickLoggerFileConfigManager(quickloggerconfigpath);
43 | return _configManager.Load();
44 | }
45 | private QuickLoggerService()
46 | {
47 | var loaderpath = currentPath;
48 | if (!Directory.Exists(loaderpath)) { loaderpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); }
49 | _quicklogger = new QuickLoggerNative(loaderpath, true);
50 | }
51 | ~QuickLoggerService()
52 | {
53 | foreach (var provider in _settings.Providers())
54 | {
55 | try
56 | {
57 | _quicklogger?.Info(provider.getProviderProperties().GetProviderName() + " Provider is going to be disabled.");
58 | _quicklogger?.DisableProvider(provider);
59 | _quicklogger?.RemoveProvider(provider);
60 | }
61 | catch (Exception ex)
62 | {
63 | //TODO : Turrican -> Do something with this! Case provider cannot be disabled removed...
64 | }
65 | }
66 | }
67 | public QuickLoggerService(ILoggerSettingsPathFinder loggerSettingsPathFinder, IScopeInfoProviderService scopeInfoProvider = null) : this()
68 | {
69 |
70 | _loggerSettingsPathFinder = loggerSettingsPathFinder;
71 | _additionalLoggerInfoProvider = scopeInfoProvider;
72 | _settings = LoadConfigFromDisk();
73 | foreach (var provider in _settings.Providers())
74 | {
75 | try
76 | {
77 | var providername = String.Format("[Name : {0}] - [PID : {1}] - [GUID : {2}]", provider.getProviderProperties().GetProviderName(),
78 | System.Diagnostics.Process.GetCurrentProcess().Id, Guid.NewGuid().ToString());
79 | provider.getProviderProperties().SetProviderName(providername);
80 | _quicklogger?.AddProvider(provider);
81 | }
82 | catch (Exception ex)
83 | {
84 | //TODO : Turrican -> Do something with this! Case provider cannot be added...
85 | }
86 | }
87 | InitMessage();
88 | }
89 | public QuickLoggerService(string setttingsAsJson) : this()
90 | {
91 | _configManager = new QuickLoggerStringConfigManager(setttingsAsJson);
92 | _settings = _configManager.Load();
93 | foreach (var provider in _settings.Providers())
94 | {
95 | _quicklogger?.AddProvider(provider);
96 | }
97 | InitMessage();
98 | }
99 |
100 | private string BuildJSONSerializedMessage(string className, string msg)
101 | {
102 | object scopeinfo = _additionalLoggerInfoProvider?.GetScopeInfo();
103 | CustomLogMessage custommessage =
104 | new CustomLogMessage(className, msg, scopeinfo);
105 | return JsonConvert.SerializeObject(custommessage, JsonSerializerSettings);
106 | }
107 |
108 | private string BuildJSONSerializedException(string className, Exception exception, string msg)
109 | {
110 | object scopeinfo = _additionalLoggerInfoProvider?.GetScopeInfo();
111 | CustomExceptionWithHTTPRequestInfo customException =
112 | new CustomExceptionWithHTTPRequestInfo(className, exception, msg, scopeinfo);
113 | return JsonConvert.SerializeObject(customException, JsonSerializerSettings);
114 | }
115 |
116 | public void Error(string className, string msg)
117 | {
118 | string custommessage = BuildJSONSerializedMessage(className, msg);
119 | _quicklogger?.Error(custommessage);
120 | }
121 | public void Info(string className, string msg)
122 | {
123 | string custommessage = BuildJSONSerializedMessage(className, msg);
124 | _quicklogger?.Info(custommessage);
125 | }
126 | public void Warning(string className, string msg)
127 | {
128 | string custommessage = BuildJSONSerializedMessage(className, msg);
129 | _quicklogger?.Warning(custommessage);
130 | }
131 | public void Success(string className, string msg)
132 | {
133 | string custommessage = BuildJSONSerializedMessage(className, msg);
134 | _quicklogger?.Success(custommessage);
135 | }
136 | public void Trace(string className, string msg)
137 | {
138 | string custommessage = BuildJSONSerializedMessage(className, msg);
139 | _quicklogger?.Trace(custommessage);
140 | }
141 | public void Debug(string className, string msg)
142 | {
143 | string custommessage = BuildJSONSerializedMessage(className, msg);
144 | _quicklogger?.Debug(custommessage);
145 | }
146 | public bool IsQueueEmpty()
147 | {
148 | return _quicklogger.IsQueueEmpty();
149 | }
150 | public void Critical(string className, string msg)
151 | {
152 | string custommessage = BuildJSONSerializedMessage(className, msg);
153 | _quicklogger?.Critical(custommessage);
154 | }
155 | public void Exception(Exception exception)
156 | {
157 | _quicklogger?.Exception(exception);
158 | }
159 | public void Exception(Exception exception, string msg)
160 | {
161 | string custommessage = BuildJSONSerializedException("", exception, msg);
162 | _quicklogger?.Exception(custommessage, exception.GetType().ToString(),
163 | exception.StackTrace);
164 | }
165 |
166 | public void MultiException(AggregateException aggregateException)
167 | {
168 | foreach (Exception exception in aggregateException.InnerExceptions)
169 | {
170 | _quicklogger?.Exception(exception);
171 | }
172 | }
173 |
174 | public void Info(string className, Exception exception, string msg)
175 | {
176 | string custommessage = BuildJSONSerializedException(className, exception, msg);
177 | _quicklogger?.Info(custommessage);
178 | }
179 |
180 | public void Warning(string className, Exception exception, string msg)
181 | {
182 | string custommessage = BuildJSONSerializedException(className, exception, msg);
183 | _quicklogger?.Warning(custommessage);
184 | }
185 |
186 | public void Error(string className, Exception exception, string msg)
187 | {
188 | string custommessage = BuildJSONSerializedException(className, exception, msg);
189 | _quicklogger?.Error(custommessage);
190 | }
191 |
192 | public void Trace(string className, Exception exception, string msg)
193 | {
194 | string custommessage = BuildJSONSerializedException(className, exception, msg);
195 | _quicklogger?.Trace(custommessage);
196 | }
197 |
198 | public void Critical(string className, Exception exception, string msg)
199 | {
200 | string custommessage = BuildJSONSerializedException(className, exception, msg);
201 | _quicklogger?.Critical(custommessage);
202 | }
203 |
204 | public void Debug(string className, Exception exception, string msg)
205 | {
206 | string custommessage = BuildJSONSerializedException(className, exception, msg);
207 | _quicklogger?.Debug(custommessage);
208 | }
209 | }
210 | }
211 |
212 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/Domain/CustomExceptionWithRequestInfo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace QuickLogger.Extensions.Wrapper.Domain
4 | {
5 | public class CustomExceptionWithHTTPRequestInfo
6 | {
7 | private object _scopeInfo;
8 | private string _custommessage;
9 | private Exception _exception;
10 | private string _className;
11 |
12 | public string ClassName { get { return _className; } }
13 | public string CustomMessage { get { return _custommessage; } }
14 | public Exception Exception { get { return _exception; } }
15 | public object ScopeInfo { get { return _scopeInfo; } }
16 | public CustomExceptionWithHTTPRequestInfo(string className, Exception exception, string customMessage, object scopeInfo = null)
17 | {
18 | _className = className;
19 | _custommessage = customMessage;
20 | _scopeInfo = scopeInfo;
21 | _exception = exception;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/Domain/CustomLogMessage.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace QuickLogger.Extensions.Wrapper.Domain
6 | {
7 | public class CustomLogMessage
8 | {
9 | private object _scopeInfo;
10 | private string _custommessage;
11 | private string _classname;
12 |
13 | public string ClassName { get { return _classname; } }
14 | public string CustomMessage { get { return _custommessage; } }
15 | public object ScopeInfo { get { return _scopeInfo; } }
16 |
17 | public CustomLogMessage(string classname, string msg, object scopeInfo)
18 | {
19 | _custommessage = msg;
20 | _classname = classname;
21 | _scopeInfo = scopeInfo;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/QuickLogger.Extensions.Wrapper.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | 1.6.5
6 | QuickLogger Wrapper for .NET and DotNetCore
7 | Exilon & Turric4n
8 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
9 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
10 | GIT
11 | true
12 | Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable
13 | 1.6.5
14 | 1.6.5
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Always
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.Wrapper/QuickLogger.json:
--------------------------------------------------------------------------------
1 | {
2 | "environment": "pro",
3 | "providers": [
4 | {
5 | "providerProps": {
6 | "providerName": "Standard Console Provider",
7 | "providerType": "ConsoleProvider",
8 | "providerInfo": {
9 | "ShowEventType": true,
10 | "ShowEventColors": true,
11 | "ShowTimeStamp": true,
12 | "UnderlineHeaderEventType": true,
13 | "LogLevel": "[etHeader,etInfo,etSuccess,etWarning,etError,etCritical,etException,etDone,etCustom1,etCustom2]",
14 | "TimePrecission": false,
15 | "MaxFailsToRestart": 2,
16 | "MaxFailsToStop": 10,
17 | "CustomMsgOutput": false,
18 | "UsesQueue": true,
19 | "Enable": true,
20 | "SendLimits": {
21 | "TimeRange": "slNoLimit",
22 | "LimitEventTypes": "[]",
23 | "MaxSent": 0
24 | }
25 | }
26 | }
27 | }
28 | ]
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/ILogger.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace QuickLogger.NetStandard.Abstractions
5 | {
6 | public interface ILogger
7 | {
8 | void AddStandardConsoleProvider();
9 | void AddStandardFileProvider(string filename);
10 | void AddProvider(ILoggerProvider provider);
11 | void RemoveProvider(ILoggerProvider provider);
12 | void RemoveProvider(string name);
13 | void EnableProvider(ILoggerProvider provider);
14 | void EnableProvider(string name);
15 | void DisableProvider(ILoggerProvider provider);
16 | void DisableProvider(string name);
17 | string[] GetLoggerProviderTypes();
18 | string GetCurrentProviders();
19 | string GetLoggerNameAndVersion();
20 | void Info(string message);
21 | void Success(string message);
22 | void Warning(string message);
23 | void Error(string message);
24 | void Exception(Exception exception);
25 | void Exception(string message, string exceptionType, string stackTrace);
26 | void Trace(string message);
27 | void Custom(string message);
28 | void Critical(string message);
29 | void Debug(string message);
30 | void TestCallbacks();
31 | string GetLastError();
32 | int GetQueueCount();
33 | bool IsQueueEmpty();
34 | void WaitSecondsForFlushBeforeExit(int seconds);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/ILoggerConfigManager.cs:
--------------------------------------------------------------------------------
1 | using QuickLogger.NetStandard.Abstractions;
2 |
3 | namespace QuickLogger.NetStandard.Abstractions
4 | {
5 | public interface ILoggerConfigManager
6 | {
7 | ILoggerSettings Load();
8 | ILoggerSettings Reset();
9 | ILoggerSettings GetSettings();
10 | void Write();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/ILoggerProvider.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Runtime.InteropServices;
4 |
5 | namespace QuickLogger.NetStandard.Abstractions
6 | {
7 | public delegate void ProviderStartEventHandler([MarshalAs(UnmanagedType.LPWStr)] string msg);
8 | public delegate void ProviderStatusChangedEventHandler([MarshalAs(UnmanagedType.LPWStr)] string msg);
9 | public delegate void ProviderErrorEventHandler([MarshalAs(UnmanagedType.LPWStr)] string msg);
10 | public delegate void ProviderQueueErrorEventHandler([MarshalAs(UnmanagedType.LPWStr)] string msg);
11 | public delegate void ProviderRestartEventHandler([MarshalAs(UnmanagedType.LPWStr)] string msg);
12 | public delegate void ProviderCriticalErrorEventHandler([MarshalAs(UnmanagedType.LPWStr)] string msg);
13 | public delegate void ProviderSendLimits();
14 | public delegate void ProviderFailToLog();
15 |
16 | public interface ILoggerProvider
17 | {
18 | event ProviderStartEventHandler Started;
19 | void OnStarted(string msg);
20 | event ProviderStatusChangedEventHandler StatusChanged;
21 | void OnStatusChanged(string msg);
22 | event ProviderErrorEventHandler Error;
23 | void OnError(string msg);
24 | event ProviderQueueErrorEventHandler QueueError;
25 | void OnQueueError(string msg);
26 | event ProviderCriticalErrorEventHandler CriticalError;
27 | void OnCriticalError(string msg);
28 | event ProviderSendLimits SendLimitsReached;
29 | void OnSendLimitsReached();
30 | event ProviderRestartEventHandler Restarted;
31 | void OnRestart(string msg);
32 | event ProviderFailToLog FailToLog;
33 | void OnFailToLog();
34 | ILoggerProviderProps getProviderProperties();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/ILoggerProviderProps.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace QuickLogger.NetStandard.Abstractions
6 | {
7 | public interface ILoggerProviderProps
8 | {
9 | string GetProviderName();
10 | void SetProviderName(string providerName);
11 | string GetProviderType();
12 | void SetProviderType(string providerType);
13 | string ToJSON();
14 | Dictionary GetProviderInfo();
15 | void SetProviderInfo(Dictionary providerInfo);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/ILoggerSettings.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace QuickLogger.NetStandard.Abstractions
4 | {
5 | public interface ILoggerSettings
6 | {
7 | void addProvider(ILoggerProvider provider);
8 | List Providers();
9 | ILoggerProvider getProvider(string name);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/LoggerEventTypes.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Runtime.Serialization;
4 | using System.Text;
5 |
6 | namespace QuickLogger.NetStandard.Abstractions
7 | {
8 | public static class LoggerEventTypes
9 | {
10 | public enum EventType { etHeader, etInfo, etSuccess, etWarning, etError, etCritical, etException, etDebug, etTrace, etDone, etCustom1, etCustom2 }
11 | public static HashSet LOG_ONLYERRORS = new HashSet() {EventType.etHeader, EventType.etInfo, EventType.etError, EventType.etCritical, EventType.etException };
12 | public static HashSet LOG_ERRORSANDWARNINGS = new HashSet() { EventType.etInfo, EventType.etSuccess, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException };
13 | public static HashSet LOG_BASIC = new HashSet() { EventType.etHeader, EventType.etInfo, EventType.etSuccess, EventType.etDone, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException, EventType.etCustom1, EventType.etCustom2 };
14 | public static HashSet LOG_ALL = new HashSet() { EventType.etHeader, EventType.etInfo, EventType.etSuccess, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException, EventType.etDebug, EventType.etTrace, EventType.etDone, EventType.etCustom1, EventType.etCustom2 };
15 | public static HashSet LOG_TRACE = new HashSet() { EventType.etHeader, EventType.etInfo, EventType.etSuccess, EventType.etDone, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException, EventType.etTrace };
16 | public static HashSet LOG_DEBUG = new HashSet() { EventType.etHeader, EventType.etInfo, EventType.etSuccess, EventType.etDone, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException, EventType.etTrace, EventType.etDebug };
17 | public static HashSet LOG_VERBOSE = LOG_ALL;
18 | };
19 | }
20 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/QuickLogger.NetStandard.Abstractions.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | AnyCPU;x64;x86
6 | true
7 | 1.5.5
8 | Exilon & Turrican
9 | Exilon
10 | Abstractions and user interfaces for QuickLogger
11 | https://github.com/exilon/QuickLogger/blob/master/QuickLogger.png
12 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
13 | GIT
14 | Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable
15 | 1.5.5
16 | 1.5.5
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | AnyCPU
26 | false
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/Controllers/HomeController.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore.Mvc;
2 | using Microsoft.Extensions.Logging;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Globalization;
6 |
7 | namespace QuickLogger.Sample.ASPNetCore.Controllers
8 | {
9 | [Route("api/[controller]")]
10 | [ApiController]
11 | public class HomeController : ControllerBase
12 | {
13 | private readonly ILogger _logger;
14 |
15 | public HomeController(ILogger Logger)
16 | {
17 | _logger = Logger;
18 | }
19 |
20 | public IActionResult Index()
21 | {
22 | using var scope = _logger.BeginScope(
23 | new Dictionary()
24 | {
25 | {LoggerFields.CorrelationId, Guid.NewGuid().ToString()},
26 | {LoggerFields.AgencyId, 2345},
27 | {LoggerFields.AgentId, "334234"},
28 | });
29 | var exception = new Exception("Test exception");
30 | _logger.LogError(3, exception, "error");
31 | _logger.LogDebug("Index Called, debug");
32 | _logger.LogError("Index Called, error");
33 | _logger.LogTrace("Index Called, trace");
34 | _logger.LogCritical("Index Called, critical");
35 | _logger.LogWarning("Index Called, warning");
36 | _logger.LogInformation("Index Called, information");
37 | return Ok();
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/Dockerfile:
--------------------------------------------------------------------------------
1 | #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
2 |
3 | FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
4 | WORKDIR /app
5 | EXPOSE 80
6 |
7 | FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
8 | WORKDIR /src
9 | COPY ["QuickLogger.Sample.ASPNetCore/QuickLogger.Sample.ASPNetCore.csproj", "QuickLogger.Sample.ASPNetCore/"]
10 | COPY ["QuickLogger.Extensions.Wrapper/QuickLogger.Extensions.Wrapper.csproj", "QuickLogger.Extensions.Wrapper/"]
11 | COPY ["QuickLogger/QuickLogger.NetStandard.csproj", "QuickLogger/"]
12 | COPY ["QuickLogger.NetStandard.Abstractions/QuickLogger.NetStandard.Abstractions.csproj", "QuickLogger.NetStandard.Abstractions/"]
13 | COPY ["QuickLogger.Extensions.NetCore/QuickLogger.Extensions.NetCore.csproj", "QuickLogger.Extensions.NetCore/"]
14 | RUN dotnet restore "QuickLogger.Sample.ASPNetCore/QuickLogger.Sample.ASPNetCore.csproj"
15 | COPY . .
16 | WORKDIR "/src/QuickLogger.Sample.ASPNetCore"
17 | RUN dotnet build "QuickLogger.Sample.ASPNetCore.csproj" -c Release -o /app/build
18 |
19 | FROM build AS publish
20 | RUN dotnet publish "QuickLogger.Sample.ASPNetCore.csproj" -c Release -o /app/publish
21 |
22 | FROM base AS final
23 | WORKDIR /app
24 | COPY --from=publish /app/publish .
25 | RUN apt-get update && \
26 | apt-get install -y --allow-unauthenticated libc6-dev
27 | ENTRYPOINT ["dotnet", "QuickLogger.Sample.ASPNetCore.dll"]
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/LoggerFields.cs:
--------------------------------------------------------------------------------
1 | namespace Microsoft.Extensions.Logging
2 | {
3 | public static class LoggerFields
4 | {
5 | public const string
6 | CorrelationId = "correlationId",
7 | AgencyId = "agencyId",
8 | AgentId = "agentId";
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/Program.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore.Hosting;
2 | using Microsoft.Extensions.Hosting;
3 |
4 | namespace QuickLogger.Sample.ASPNetCore
5 | {
6 | public class Program
7 | {
8 | public static void Main(string[] args)
9 | {
10 | CreateHostBuilder(args).Build().Run();
11 | }
12 |
13 | public static IHostBuilder CreateHostBuilder(string[] args) =>
14 | Host.CreateDefaultBuilder(args)
15 | .ConfigureWebHostDefaults(webBuilder =>
16 | {
17 | webBuilder.UseStartup();
18 | });
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/launchsettings.json",
3 | "iisSettings": {
4 | "windowsAuthentication": false,
5 | "anonymousAuthentication": true,
6 | "iisExpress": {
7 | "applicationUrl": "http://localhost:65375",
8 | "sslPort": 0
9 | }
10 | },
11 | "profiles": {
12 | "IIS Express": {
13 | "commandName": "IISExpress",
14 | "launchBrowser": true,
15 | "launchUrl": "weatherforecast",
16 | "environmentVariables": {
17 | "ASPNETCORE_ENVIRONMENT": "Development"
18 | }
19 | },
20 | "QuickLogger.Sample.ASPNetCore": {
21 | "commandName": "Project",
22 | "launchBrowser": true,
23 | "launchUrl": "home",
24 | "applicationUrl": "http://localhost:5000",
25 | "environmentVariables": {
26 | "ASPNETCORE_ENVIRONMENT": "Development"
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/QuickLogger.Sample.ASPNetCore.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net5.0
5 | Linux
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | Always
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/QuickLogger.json:
--------------------------------------------------------------------------------
1 | {
2 | "environment": "pro",
3 | "providers": [
4 | {
5 | "providerProps": {
6 | "providerName": "Standard Console Provider",
7 | "providerType": "ConsoleProvider",
8 | "providerInfo": {
9 | "ShowEventType": true,
10 | "ShowEventColors": true,
11 | "ShowTimeStamp": true,
12 | "UnderlineHeaderEventType": true,
13 | "LogLevel": "[etHeader,etInfo,etSuccess,etWarning,etError,etCritical,etException,etDone,etCustom1,etCustom2]",
14 | "TimePrecission": false,
15 | "MaxFailsToRestart": 2,
16 | "MaxFailsToStop": 10,
17 | "CustomMsgOutput": false,
18 | "UsesQueue": true,
19 | "Enable": true,
20 | "SendLimits": {
21 | "TimeRange": "slNoLimit",
22 | "LimitEventTypes": "[]",
23 | "MaxSent": 0
24 | }
25 | }
26 | }
27 | },
28 | {
29 | "providerProps": {
30 | "providerName": "Redis ELK Provider for Pisos.com",
31 | "providerType": "RedisProvider",
32 | "providerInfo": {
33 | "AppName": "Test Quicklogger",
34 | "IncludedInfo": "[iiAppName, iiUserName, iiEnvironment, iiHost, iiPlatform, iiOSVersion, iiExceptionInfo, iiExceptionStackTrace]",
35 | "LogLevel": "[etHeader,etInfo,etSuccess,etWarning,etError,etCritical,etException,etDebug,etTrace,etDone,etCustom1,etCustom2]",
36 | "Environment": "Dev",
37 | "Host": "192.168.0.69",
38 | "Port": 6379,
39 | "Password": "",
40 | "Platform": "DotNetCore",
41 | "LogKey": "pisos-logstash-key",
42 | "MaxSize": 1000,
43 | "MaxFailsToRestart": 1,
44 | "MaxFailsToStop": 0,
45 | "OutputAsJson": true,
46 | "JsonOutputOptions": {
47 | "UseUTCTime": true
48 | },
49 | "Enable": true
50 | }
51 | }
52 | }
53 | ]
54 | }
55 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/Startup.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using Microsoft.AspNetCore.Builder;
6 | using Microsoft.AspNetCore.Hosting;
7 | using Microsoft.AspNetCore.Mvc;
8 | using Microsoft.Extensions.Configuration;
9 | using Microsoft.Extensions.DependencyInjection;
10 | using Microsoft.Extensions.Hosting;
11 | using QuickLogger.Extensions.NetCore;
12 |
13 | namespace QuickLogger.Sample.ASPNetCore
14 | {
15 | public class Startup
16 | {
17 | public Startup(IConfiguration configuration)
18 | {
19 | Configuration = configuration;
20 | }
21 |
22 | public IConfiguration Configuration { get; }
23 |
24 | // This method gets called by the runtime. Use this method to add services to the container.
25 | public void ConfigureServices(IServiceCollection services)
26 | {
27 | services.AddQuickLogger();
28 |
29 | services.AddControllers();
30 |
31 | }
32 |
33 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
34 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
35 | {
36 | if (env.IsDevelopment())
37 | {
38 | app.UseDeveloperExceptionPage();
39 | }
40 |
41 | app.UseRouting();
42 |
43 | app.UseAuthorization();
44 |
45 | app.UseEndpoints(endpoints =>
46 | {
47 | endpoints.MapControllers();
48 | });
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Error",
6 | "Microsoft.Hosting.Lifetime": "Error"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.ASPNetCore/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information"
5 | }
6 | },
7 | "QuickLogger": {
8 | "ConfigPath": "QuickLogger.json"
9 | },
10 | "AllowedHosts": "*"
11 | }
12 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetCore.Console/Program.cs:
--------------------------------------------------------------------------------
1 | using QuickLogger.NetStandard.Abstractions;
2 | using QuickLogger.NetStandard;
3 | using System;
4 | using System.IO;
5 |
6 | namespace QuickLogger.Sample
7 | {
8 | class Program
9 | {
10 | private const string CONFIGPATH = "config.json";
11 | private const string FILELOGPATH = "logging.json";
12 |
13 | static void DeleteDemoFiles()
14 | {
15 | if (File.Exists(CONFIGPATH)) { File.Delete(CONFIGPATH); }
16 | if (File.Exists(FILELOGPATH)) { File.Delete(FILELOGPATH); }
17 | }
18 | static void AssignProviderCallbacks(ILoggerProvider provider)
19 | {
20 | provider.CriticalError += (x => Console.WriteLine(provider.getProviderProperties().GetProviderName() + " Provider Critical Error : " + x));
21 | provider.Error += (x => Console.WriteLine(provider.getProviderProperties().GetProviderName() + " Provider Error : " + x));
22 | provider.QueueError += (x => Console.WriteLine("Provider QueueError : " + x));
23 | provider.StatusChanged += (x => Console.WriteLine("Provider Status Changed : " + x));
24 | provider.FailToLog += Provider_FailToLog; // Another way to define callback references
25 | provider.Started += (x => Console.WriteLine("Provider Started : " + x));
26 | }
27 |
28 | private static void Provider_FailToLog()
29 | {
30 | Console.WriteLine("Provider Fail to log");
31 | }
32 |
33 | static ILoggerProvider CreateFileDemoProvider(string logPath)
34 | {
35 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps("Dirty File Logger", "FileProvider");
36 | providerProps.SetProviderInfo(new System.Collections.Generic.Dictionary()
37 | {
38 | { "LogLevel", LoggerEventTypes.LOG_ALL}, { "FileName", logPath }, { "AutoFileNameByProcess", "False" },
39 | { "DailyRotate", false }, { "ShowTimeStamp", true }
40 | });
41 | return new QuickLoggerProvider(providerProps);
42 | }
43 |
44 | static ILoggerProvider CreateConsoleDemoProvider()
45 | {
46 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps("Dirty Console Logger", "ConsoleProvider");
47 |
48 | providerProps.SetProviderInfo(new System.Collections.Generic.Dictionary()
49 | {
50 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ShowEventColors", true }, { "ShowTimeStamp", true }
51 | });
52 | return new QuickLoggerProvider(providerProps);
53 | }
54 |
55 | static ILoggerProvider CreateRedisProvider()
56 | {
57 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps("Dirty Redis Logger", "RedisProvider");
58 |
59 | providerProps.SetProviderInfo(new System.Collections.Generic.Dictionary()
60 | {
61 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "Host", "localhost" }, { "Port", 6379 }, { "Password", ""}, { "LogKey", "Log" },
62 | { "MaxSize", 1000}, { "OutputAsJson", true }, { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 }
63 | });
64 | return new QuickLoggerProvider(providerProps);
65 | }
66 |
67 | static void Main(string[] args)
68 | {
69 | ILogger logger = new QuickLoggerNative("");
70 | try
71 | {
72 | System.Console.WriteLine(LoggerEventTypes.LOG_ALL.ToString());
73 |
74 | DeleteDemoFiles();
75 |
76 | ILoggerProvider myFileDemoProvider = CreateFileDemoProvider(FILELOGPATH);
77 | ILoggerProvider myConsoleDemoProvider = CreateConsoleDemoProvider();
78 | ILoggerProvider myRedisProvider = CreateRedisProvider();
79 |
80 | /* Optional config handler
81 | Create new config instance, ADD Providers and Write to disk.
82 | ILoggerConfigManager configManager = new QuickLoggerFileConfigManager(CONFIGPATH);
83 | if (File.Exists(CONFIGPATH)) { configManager.Load(); }
84 | else
85 | {
86 | //Add providers to settings
87 | configManager.GetSettings().addProvider(myFileDemoProvider);
88 | configManager.GetSettings().addProvider(myConsoleDemoProvider);
89 | //Write settings to disk
90 | configManager.Write();
91 | }*/
92 |
93 | QuickLoggerSettings quickLoggerSettings = new QuickLoggerSettings();
94 |
95 |
96 | quickLoggerSettings.Providers().Add(myConsoleDemoProvider);
97 | quickLoggerSettings.Providers().Add(myFileDemoProvider);
98 | quickLoggerSettings.Providers().Add(myRedisProvider);
99 |
100 | quickLoggerSettings.Providers().ForEach(x =>
101 | {
102 | logger.AddProvider(x);
103 | AssignProviderCallbacks(x);
104 | });
105 |
106 | System.Console.WriteLine(logger.GetLoggerNameAndVersion());
107 | //logger.TestCallbacks();
108 |
109 | // Main!
110 | logger.Info("QuickLogger demo program main loop started.");
111 |
112 | for (int x = 1; x <= 100; x++)
113 | {
114 | logger.Info("QuickLogger demo program main loop iteration. Nº " + x.ToString());
115 | logger.Success("QuickLogger demo program main loop iteration. Nº " + x.ToString());
116 | logger.Trace("QuickLogger demo program main loop iteration. Nº " + x.ToString());
117 | logger.Warning("QuickLogger demo program main loop iteration. Nº " + x.ToString());
118 | logger.Error("QuickLogger demo program main loop iteration. Nº " + x.ToString());
119 | logger.Debug("QuickLogger demo program main loop iteration. Nº " + x.ToString());
120 | }
121 |
122 | logger.Info("QuickLogger demo program finished.");
123 | System.Console.ReadKey();
124 |
125 | quickLoggerSettings.Providers().ForEach(x =>
126 | {
127 | // We remove providers we created before (code sanity)
128 | logger.DisableProvider(x);
129 | logger.RemoveProvider(x);
130 | });
131 | }
132 | catch (Exception ex)
133 | {
134 | System.Console.WriteLine(ex.Message + " " + logger.GetLastError());
135 | System.Console.ReadKey();
136 | }
137 | }
138 |
139 | private static void MyFileDemoProvider_CriticalError(string msg)
140 | {
141 | Console.WriteLine(msg);
142 | }
143 | }
144 | }
145 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetCore.Console/QuickLogger.Sample.NetCore.Console.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net5.0
6 | AnyCPU;x86
7 | true
8 | true
9 | snupkg
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | true
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetFramework.Console/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetFramework.Console/Program.cs:
--------------------------------------------------------------------------------
1 | using QuickLogger.NetStandard.Abstractions;
2 | using QuickLogger.NetStandard;
3 | using System;
4 | using System.IO;
5 |
6 | namespace QuickLogger.Sample
7 | {
8 | class Program
9 | {
10 | private const string CONFIGPATH = ".\\config.json";
11 | private const string FILELOGPATH = ".\\logging.json";
12 |
13 | static void DeleteDemoFiles()
14 | {
15 | if (File.Exists(CONFIGPATH)) { File.Delete(CONFIGPATH); }
16 | if (File.Exists(FILELOGPATH)) { File.Delete(FILELOGPATH); }
17 | }
18 | static void AssignProviderCallbacks(ILoggerProvider provider)
19 | {
20 | provider.CriticalError += (x => Console.WriteLine(provider.getProviderProperties().GetProviderName() + " Provider Critical Error : " + x));
21 | provider.Error += (x => Console.WriteLine(provider.getProviderProperties().GetProviderName() + " Provider Error : " + x));
22 | provider.QueueError += (x => Console.WriteLine("Provider QueueError : " + x));
23 | provider.StatusChanged += (x => Console.WriteLine("Provider Status Changed : " + x));
24 | provider.FailToLog += Provider_FailToLog; // Another way to define callback references
25 | provider.Started += (x => Console.WriteLine("Provider Started : " + x));
26 | }
27 |
28 | private static void Provider_FailToLog()
29 | {
30 | Console.WriteLine("Provider Fail to log");
31 | }
32 |
33 | static ILoggerProvider CreateFileDemoProvider(string logPath)
34 | {
35 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps("Dirty File Logger", "FileProvider");
36 | providerProps.SetProviderInfo(new System.Collections.Generic.Dictionary()
37 | {
38 | { "LogLevel", LoggerEventTypes.LOG_ALL}, { "FileName", logPath }, { "AutoFileNameByProcess", "False" },
39 | { "DailyRotate", false }, { "ShowTimeStamp", true }
40 | });
41 | return new QuickLoggerProvider(providerProps);
42 | }
43 |
44 | static ILoggerProvider CreateConsoleDemoProvider()
45 | {
46 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps("Dirty Console Logger", "ConsoleProvider");
47 |
48 | providerProps.SetProviderInfo(new System.Collections.Generic.Dictionary()
49 | {
50 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ShowEventColors", true }, { "ShowTimeStamp", true }
51 | });
52 | return new QuickLoggerProvider(providerProps);
53 | }
54 |
55 | static void Main(string[] args)
56 | {
57 | ILogger logger = new QuickLoggerNative("");
58 | try
59 | {
60 | System.Console.WriteLine(LoggerEventTypes.LOG_ALL.ToString());
61 |
62 | DeleteDemoFiles();
63 |
64 | ILoggerProvider myFileDemoProvider = CreateFileDemoProvider(FILELOGPATH);
65 | ILoggerProvider myConsoleDemoProvider = CreateConsoleDemoProvider();
66 |
67 | /* Optional config handler
68 | Create new config instance, ADD Providers and Write to disk.
69 | ILoggerConfigManager configManager = new QuickLoggerFileConfigManager(CONFIGPATH);
70 | if (File.Exists(CONFIGPATH)) { configManager.Load(); }
71 | else
72 | {
73 | //Add providers to settings
74 | configManager.GetSettings().addProvider(myFileDemoProvider);
75 | configManager.GetSettings().addProvider(myConsoleDemoProvider);
76 | //Write settings to disk
77 | configManager.Write();
78 | }*/
79 |
80 | QuickLoggerSettings quickLoggerSettings = new QuickLoggerSettings();
81 |
82 |
83 | quickLoggerSettings.Providers().Add(myConsoleDemoProvider);
84 | quickLoggerSettings.Providers().Add(myFileDemoProvider);
85 |
86 | quickLoggerSettings.Providers().ForEach(x =>
87 | {
88 | logger.AddProvider(x);
89 | AssignProviderCallbacks(x);
90 | });
91 |
92 | System.Console.WriteLine(logger.GetLoggerNameAndVersion());
93 | logger.TestCallbacks();
94 |
95 | // Main!
96 | logger.Info("QuickLogger demo program main loop started.");
97 |
98 | for (int x = 1; x <= 100; x++)
99 | {
100 | logger.Info("QuickLogger demo program main loop iteration. Nº " + x.ToString());
101 | }
102 |
103 | logger.Info("QuickLogger demo program finished.");
104 | System.Console.ReadKey();
105 |
106 | quickLoggerSettings.Providers().ForEach(x =>
107 | {
108 | // We remove providers we created before (code sanity)
109 | logger.DisableProvider(x);
110 | logger.RemoveProvider(x);
111 | });
112 | }
113 | catch (Exception ex)
114 | {
115 | System.Console.WriteLine(ex.Message + " " + logger.GetLastError());
116 | System.Console.ReadKey();
117 | }
118 | }
119 |
120 | private static void MyFileDemoProvider_CriticalError(string msg)
121 | {
122 | Console.WriteLine(msg);
123 | }
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetFramework.Console/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("QuickLogger.Sample.NetFramework.Console")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("QuickLogger.Sample.NetFramework.Console")]
13 | [assembly: AssemblyCopyright("Copyright © 2018")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("d9fcd89b-732d-4c24-8fbe-e9caf35bac95")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetFramework.Console/QuickLogger.Sample.NetFramework.Console.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {D9FCD89B-732D-4C24-8FBE-E9CAF35BAC95}
8 | Exe
9 | QuickLogger.Sample.NetFramework.Console
10 | QuickLogger.Sample.NetFramework.Console
11 | v4.6.2
12 | 512
13 | true
14 |
15 |
16 |
17 | x64
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 | true
37 | bin\x86\Debug\
38 | DEBUG;TRACE
39 | full
40 | x86
41 | prompt
42 | MinimumRecommendedRules.ruleset
43 | true
44 |
45 |
46 | bin\x86\Release\
47 | TRACE
48 | true
49 | pdbonly
50 | x86
51 | prompt
52 | MinimumRecommendedRules.ruleset
53 | true
54 |
55 |
56 |
57 | ..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll
58 |
59 |
60 | ..\packages\Microsoft.DotNet.PlatformAbstractions.3.1.6\lib\net45\Microsoft.DotNet.PlatformAbstractions.dll
61 |
62 |
63 | ..\packages\Microsoft.Extensions.DependencyModel.5.0.0\lib\net461\Microsoft.Extensions.DependencyModel.dll
64 |
65 |
66 | ..\packages\NativeLibraryLoader.1.0.12\lib\netstandard2.0\NativeLibraryLoader.dll
67 |
68 |
69 | ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
70 |
71 |
72 |
73 | ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
74 |
75 |
76 |
77 | ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll
78 |
79 |
80 |
81 | ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
82 |
83 |
84 | ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll
85 |
86 |
87 | ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
88 | True
89 | True
90 |
91 |
92 | ..\packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll
93 |
94 |
95 | ..\packages\System.Text.Json.5.0.2\lib\net461\System.Text.Json.dll
96 |
97 |
98 | ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll
99 |
100 |
101 | ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 | {943f3c07-0743-4c17-a5af-22027276beaf}
121 | QuickLogger.NetStandard.Abstractions
122 |
123 |
124 | {8760612a-a649-4752-9cc3-b7af44f14b5a}
125 | QuickLogger.NetStandard
126 |
127 |
128 |
129 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetFramework.Console/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Tests/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | [assembly: AssemblyTitle("QuickLogger.Tests")]
6 | [assembly: AssemblyDescription("")]
7 | [assembly: AssemblyConfiguration("")]
8 | [assembly: AssemblyCompany("")]
9 | [assembly: AssemblyProduct("QuickLogger.Tests")]
10 | [assembly: AssemblyCopyright("Copyright © 2018")]
11 | [assembly: AssemblyTrademark("")]
12 | [assembly: AssemblyCulture("")]
13 |
14 | [assembly: ComVisible(false)]
15 |
16 | [assembly: Guid("c545e720-1b43-4a9e-bc56-3398f7a1444a")]
17 |
18 | // [assembly: AssemblyVersion("1.0.*")]
19 | [assembly: AssemblyVersion("1.0.0.0")]
20 | [assembly: AssemblyFileVersion("1.0.0.0")]
21 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Tests/QuickLogger.Common.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace QuickLogger.Tests
8 | {
9 | class Class1
10 | {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Tests/QuickLogger.Configuration.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Collections.Generic;
4 | using NUnit.Framework;
5 | using System.Reflection;
6 | using QuickLogger.NetStandard;
7 | using QuickLogger.NetStandard.Abstractions;
8 |
9 | namespace QuickLogger.Tests.Unit
10 | {
11 | [TestFixture(Category = "Unit")]
12 | public class QuickLogger_Configuration_Should
13 | {
14 | private static string _configPath = String.Empty;
15 | private static string _configName = "config.json";
16 | private static string _testprovidername = "A dirty File provider";
17 | private static string _testprovidertype = "FileProvider";
18 | private static Dictionary _testproviderinfo =
19 | new Dictionary() {
20 | { "LogLevel", "LOG_DEBUG" }, { "Filename", ".\\test.log" }, { "DailyRotate", false }, { "ShowTimeStamp", true }
21 | };
22 | private string _lastcriticalerror;
23 | private string _lasterror;
24 | private void LoggerCallbackHandler(ILoggerProvider loggerProvider)
25 | {
26 | loggerProvider.CriticalError += (x =>
27 | _lastcriticalerror = x);
28 | loggerProvider.Error += (x =>
29 | _lasterror = x);
30 | }
31 | public ILoggerProvider GetaTestProvider(string providername)
32 | {
33 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps(_testprovidername, _testprovidertype);
34 | providerProps.SetProviderInfo(_testproviderinfo);
35 | ILoggerProvider provider = new QuickLoggerProvider(providerProps);
36 | return provider;
37 | }
38 |
39 | public ILoggerConfigManager GetaTestFileConfigManager(string configpath)
40 | {
41 | ILoggerConfigManager configmanager = new QuickLoggerFileConfigManager(configpath);
42 | return configmanager;
43 | }
44 | public ILoggerConfigManager GetTestStringConfigManager()
45 | {
46 | var conf = "{ \"environment\": \"Test\", \"providers\": [ { \"providerProps\": { \"providerName\": \"A dirty File provider\", \"providerType\": \"RedisProvider\", \"providerInfo\": { \"AppName\": \"QuickLogger Redis Integration Tests\", \"LogLevel\": \"[etHeader,etInfo,etSuccess,etWarning,etError,etCritical,etException,etDebug,etTrace,etDone,etCustom1,etCustom2]\", \"Host\": \"*host*\", \"Port\": 6379, \"Password\": \"\", \"LogKey\": \"a redis key\", \"MaxSize\": 1000, \"MaxFailsToRestart\": 2, \"MaxFailsToStop\": 0, \"OutputAsJson\": true, \"Enable\": true } } } ]}";
47 | ILoggerConfigManager configmanager = new QuickLoggerStringConfigManager(conf);
48 | return configmanager;
49 | }
50 |
51 | [OneTimeSetUp]
52 | public void SetUp()
53 | {
54 | _configPath = Directory.GetParent(Assembly.GetAssembly(typeof(QuickLogger_Configuration_Should)).Location).Parent.Parent.FullName;
55 | _configPath += _configName;
56 | if (File.Exists(_configPath)) { File.Delete(_configPath); }
57 | }
58 | [Test]
59 | public void Create_new_configuration_manager()
60 | {
61 | ILoggerConfigManager configManager = new QuickLoggerFileConfigManager(_configPath);
62 | Assert.That(configManager, !Is.Null);
63 | }
64 | [Test]
65 | public void Add_Logger_provider_into_a_new_configuration_manager()
66 | {
67 | ILoggerConfigManager configmanager = GetaTestFileConfigManager(_configPath);
68 | configmanager.GetSettings().addProvider(GetaTestProvider(_testprovidername));
69 | Assert.That(configmanager.GetSettings().getProvider(_testprovidername), !Is.Null);
70 | }
71 | [Test]
72 | public void Make_default_settings_and_save_to_disk()
73 | {
74 | ILoggerConfigManager configmanager = GetaTestFileConfigManager(_configPath);
75 | configmanager.Write();
76 | Assert.That(File.Exists(_configPath), Is.True);
77 | }
78 | [Test]
79 | public void Create_Save_And_Load_logger_configuration_from_disk()
80 | {
81 | ILoggerConfigManager configmanager = GetaTestFileConfigManager(_configPath);
82 | configmanager.GetSettings().addProvider(GetaTestProvider(_testprovidername));
83 | configmanager.Write();
84 | Assert.That(File.Exists(_configPath), Is.True);
85 | configmanager.Load();
86 | Assert.That(configmanager.GetSettings(), !Is.Null);
87 | Assert.That(configmanager.GetSettings().getProvider(_testprovidername), !Is.Null);
88 | }
89 | [Test]
90 | public void Create_logger_configuration_from_string()
91 | {
92 | ILoggerConfigManager configmanager = GetTestStringConfigManager();
93 | configmanager.Load();
94 | Assert.That(configmanager.GetSettings(), !Is.Null);
95 | Assert.That(configmanager.GetSettings().getProvider(_testprovidername), !Is.Null);
96 | }
97 | [TearDown]
98 | public void TearDown()
99 | {
100 | if (File.Exists(_configPath)) { File.Delete(_configPath); };
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Tests/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.Tests/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger.v3.ncrunchsolution:
--------------------------------------------------------------------------------
1 |
2 |
3 | False
4 | True
5 |
6 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickConfigManager.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using QuickLogger.NetStandard.Abstractions;
3 |
4 | namespace QuickLogger.NetStandard
5 | {
6 | public abstract class QuickConfigManager : ILoggerConfigManager
7 | {
8 | protected ILoggerSettings _settings;
9 |
10 | protected JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings
11 | {
12 | ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
13 | Formatting = Formatting.Indented,
14 | ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
15 | };
16 |
17 | protected QuickConfigManager()
18 | {
19 | JsonSerializerSettings.Converters.Add(new LoggerProviderTypeConverter());
20 | JsonSerializerSettings.Converters.Add(new LoggerProviderPropsTypeConverter());
21 | JsonSerializerSettings.Converters.Add(new LoggerLoggerTypeConverter());
22 | JsonSerializerSettings.Converters.Add(new LoggerHashSetTypeConverter());
23 | }
24 |
25 | public ILoggerSettings GetSettings()
26 | {
27 | return _settings ?? (_settings = new QuickLoggerSettings());
28 | }
29 |
30 | public abstract ILoggerSettings Load();
31 |
32 | public ILoggerSettings Reset()
33 | {
34 | _settings = null;
35 | return (_settings = new QuickLoggerSettings());
36 | }
37 |
38 | public abstract void Write();
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLogger.NetStandard.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | AnyCPU;x64;x86
6 | 1.6.1
7 | QuickLogger is a cross-platform-native, Testable and Injectable multi-provider logging library for .NET ,NetCore, Object Paascal C, PHP, Python, Golang and more!
8 | Exilon & Turric4n
9 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
10 | true
11 | 1.6.1
12 | 1.6.1
13 | https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger
14 | Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable
15 | GIT
16 | true
17 | true
18 | snupkg
19 | true
20 | true
21 | true
22 |
23 |
24 |
25 | Windows
26 |
27 |
28 | OSX
29 |
30 |
31 | Linux
32 |
33 |
34 |
35 |
36 | all
37 | runtime; build; native; contentfiles; analyzers; buildtransitive
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | true
47 |
48 |
49 |
50 | true
51 |
52 |
53 |
54 | true
55 | AnyCPU
56 |
57 |
58 |
59 | true
60 |
61 |
62 |
63 | true
64 |
65 |
66 |
67 | true
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLogger.NetStandard.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | QuickLogger.NetStandard
6 | QuickLogger.NetStandard
7 | 1.5.9
8 | Exilon - Turric4n
9 | Exilon - Turric4n
10 | false
11 | Apache-2.0
12 |
13 | Hi
14 | logger
15 | Hi
16 | QuickLogger is a cross-platform-native, Testable and Injectable multi-provider logging library for .NET ,NetCore, Object Paascal C, PHP, Python, Golang and more!
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLoggerBuiltInStandardProviders.cs:
--------------------------------------------------------------------------------
1 | using QuickLogger.NetStandard.Abstractions;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace QuickLogger.NetStandard
7 | {
8 | public class QuickLoggerBuiltInStandardProviders
9 | {
10 | static public ILoggerProvider CreateStandardConsoleProvider()
11 | {
12 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps("Standard Console", "ConsoleProvider");
13 | providerProps.SetProviderInfo(new Dictionary() { { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ShowEventColors", true }, { "ShowTimeStamp", true } });
14 | return new QuickLoggerProvider(providerProps);
15 | }
16 | static public ILoggerProvider CreateStandardFileProvider(string filePath)
17 | {
18 | ILoggerProviderProps providerProps = new QuickLoggerProviderProps("FileProvider", "Standard File");
19 | providerProps.SetProviderInfo(new Dictionary() { { "LogLevel", LoggerEventTypes.LOG_ALL }, { "Filename", filePath }, { "DailyRotate", false }, { "ShowTimeStamp", true } });
20 | return new QuickLoggerProvider(providerProps);
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLoggerFileConfigManager.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using QuickLogger.NetStandard.Abstractions;
3 | using Newtonsoft.Json;
4 |
5 | namespace QuickLogger.NetStandard
6 | {
7 | public class QuickLoggerFileConfigManager : QuickConfigManager
8 | {
9 | private readonly string _configurationFilePath;
10 |
11 | public QuickLoggerFileConfigManager(string configurationFilePath)
12 | {
13 | _configurationFilePath = configurationFilePath;
14 | }
15 |
16 | public override ILoggerSettings Load()
17 | {
18 | _settings = null;
19 | if (!File.Exists(_configurationFilePath)) throw new FileNotFoundException("[QuickLogger Exception] Config File not found");
20 |
21 | var jsonFile = File.ReadAllText(_configurationFilePath);
22 |
23 | _settings = (QuickLoggerSettings)JsonConvert.DeserializeObject(jsonFile, typeof(QuickLoggerSettings), JsonSerializerSettings);
24 | return _settings;
25 | }
26 |
27 | public override void Write()
28 | {
29 | if (_settings == null) { _settings = new QuickLoggerSettings(); }
30 | if (File.Exists(_configurationFilePath))
31 | File.Delete(_configurationFilePath);
32 |
33 | using (var sw = new StreamWriter(_configurationFilePath))
34 | sw.Write(JsonConvert.SerializeObject(_settings, JsonSerializerSettings));
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLoggerProvider.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using System.Collections.Generic;
4 | using Newtonsoft.Json;
5 | using QuickLogger.NetStandard.Abstractions;
6 |
7 | namespace QuickLogger.NetStandard
8 | {
9 | public class QuickLoggerProvider : ILoggerProvider
10 | {
11 | private ILoggerProviderProps _providerProps { get; set; }
12 | public ILoggerProviderProps providerProps { get { return _providerProps; } }
13 | public QuickLoggerProvider(ILoggerProviderProps providerProps)
14 | {
15 | _providerProps = providerProps;
16 | }
17 |
18 | public event ProviderStartEventHandler Started;
19 | public event ProviderStatusChangedEventHandler StatusChanged;
20 | public event ProviderErrorEventHandler Error;
21 | public event ProviderQueueErrorEventHandler QueueError;
22 | public event ProviderCriticalErrorEventHandler CriticalError;
23 | public event ProviderRestartEventHandler Restarted;
24 | public event ProviderSendLimits SendLimitsReached;
25 | public event ProviderFailToLog FailToLog;
26 |
27 | public ILoggerProviderProps getProviderProperties()
28 | {
29 | return _providerProps;
30 | }
31 |
32 | public void OnStarted(string msg)
33 | {
34 | Started?.Invoke(msg);
35 | }
36 |
37 | public void OnStatusChanged(string msg)
38 | {
39 | StatusChanged?.Invoke(msg);
40 | }
41 |
42 | public void OnError(string msg)
43 | {
44 | Error?.Invoke(msg);
45 | }
46 |
47 | public void OnQueueError(string msg)
48 | {
49 | QueueError?.Invoke(msg);
50 | }
51 |
52 | public void OnCriticalError(string msg)
53 | {
54 | CriticalError?.Invoke(msg);
55 | }
56 |
57 | public void OnRestart(string msg)
58 | {
59 | Restarted?.Invoke(msg);
60 | }
61 |
62 | public void OnSendLimitsReached()
63 | {
64 | SendLimitsReached?.Invoke();
65 | }
66 |
67 | public void OnFailToLog()
68 | {
69 | FailToLog?.Invoke();
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLoggerProviderProps.cs:
--------------------------------------------------------------------------------
1 | using QuickLogger.NetStandard.Abstractions;
2 | using System;
3 | using System.Collections.Generic;
4 | using Newtonsoft.Json;
5 | using System.Text;
6 |
7 | namespace QuickLogger.NetStandard
8 | {
9 | public class QuickLoggerProviderProps : ILoggerProviderProps
10 | {
11 | private JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings
12 | {
13 | ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
14 | ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
15 | };
16 |
17 | private string _providerName { get; set; }
18 | public string providerName { get { return _providerName; } }
19 | private string _providerType { get; set; }
20 | public string providerType { get { return this._providerType; } }
21 | private Dictionary _providerInfo { get; set; }
22 | public Dictionary providerInfo { get { return _providerInfo; } set { _providerInfo = value; } }
23 |
24 |
25 |
26 | public QuickLoggerProviderProps(string providerName, string providerType)
27 | {
28 | SetProviderName(providerName);
29 | SetProviderType(providerType);
30 | JsonSerializerSettings.Converters.Add(new LoggerHashSetTypeConverter());
31 | _providerInfo = new Dictionary();
32 | }
33 | public Dictionary GetProviderInfo()
34 | {
35 | return _providerInfo;
36 | }
37 |
38 | public string GetProviderName()
39 | {
40 | return _providerName;
41 | }
42 | public void SetProviderName(string providerName)
43 | {
44 | if (string.IsNullOrEmpty(providerName)) { throw new Exception("Invalid provider name"); }
45 | _providerName = providerName;
46 | }
47 |
48 | public void SetProviderInfo(Dictionary providerInfo)
49 | {
50 | _providerInfo = providerInfo;
51 | }
52 |
53 | public string GetProviderType()
54 | {
55 | return _providerType;
56 | }
57 |
58 | public void SetProviderType(string providerType)
59 | {
60 | if (string.IsNullOrEmpty(providerName)) { throw new Exception("Invalid provider type, call getProviders() to get valid providers"); }
61 | _providerType = providerType;
62 | }
63 |
64 | public string ToJSON()
65 | {
66 | return JsonConvert.SerializeObject(this, JsonSerializerSettings);
67 | }
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLoggerSettings.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using System.Collections.Generic;
4 | using QuickLogger.NetStandard.Abstractions;
5 | using Newtonsoft.Json;
6 |
7 | namespace QuickLogger.NetStandard
8 | {
9 | public class QuickLoggerSettings : ILoggerSettings
10 | {
11 | private bool _handleUncatchedExceptions { get; set; }
12 | public bool handleUncatchedExceptions { get { return _handleUncatchedExceptions; } set { _handleUncatchedExceptions = value; } }
13 | public List providers { get; set; }
14 |
15 | public QuickLoggerSettings() => providers = new List();
16 |
17 | public List Providers()
18 | {
19 | return providers;
20 | }
21 |
22 | public void addProvider(ILoggerProvider provider)
23 | {
24 | providers.Add(provider);
25 | }
26 |
27 | public ILoggerProvider getProvider(string name)
28 | {
29 | //Areglar
30 | return providers.Where(x => x.getProviderProperties().GetProviderName() == name).FirstOrDefault();
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLoggerStringConfigManager.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using QuickLogger.NetStandard.Abstractions;
3 |
4 | namespace QuickLogger.NetStandard
5 | {
6 | public class QuickLoggerStringConfigManager : QuickConfigManager
7 | {
8 | private string _config;
9 | public QuickLoggerStringConfigManager(string configLines)
10 | {
11 | _config = configLines;
12 | }
13 |
14 | public QuickLoggerStringConfigManager()
15 | {
16 | _settings = new QuickLoggerSettings();
17 | }
18 |
19 | public override ILoggerSettings Load()
20 | {
21 | _settings = null;
22 | _settings = (QuickLoggerSettings)JsonConvert.DeserializeObject(_config, typeof(QuickLoggerSettings), JsonSerializerSettings);
23 | return _settings;
24 | }
25 |
26 | public override void Write()
27 | {
28 | if (_settings == null) { _settings = new QuickLoggerSettings(); }
29 | _config = JsonConvert.SerializeObject(_settings, JsonSerializerSettings);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLoggerTypesConverter.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using QuickLogger.NetStandard.Abstractions;
3 | using System;
4 | using System.Collections.Generic;
5 | using static QuickLogger.NetStandard.Abstractions.LoggerEventTypes;
6 |
7 | namespace QuickLogger.NetStandard
8 | {
9 | public class LoggerProviderTypeConverter : JsonConverter
10 | {
11 | public override bool CanConvert(Type objectType)
12 | {
13 | return objectType == typeof(ILoggerProvider);
14 | }
15 |
16 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
17 | {
18 | return serializer.Deserialize(reader, typeof(QuickLoggerProvider));
19 | }
20 |
21 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
22 | {
23 | serializer.Serialize(writer, typeof(ILoggerProvider));
24 | }
25 | }
26 |
27 | public class LoggerProviderPropsTypeConverter : JsonConverter
28 | {
29 | public override bool CanConvert(Type objectType)
30 | {
31 | return objectType == typeof(ILoggerProviderProps);
32 | }
33 |
34 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
35 | {
36 | return serializer.Deserialize(reader, typeof(QuickLoggerProviderProps));
37 | }
38 |
39 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
40 | {
41 | serializer.Serialize(writer, typeof(ILoggerProviderProps));
42 | }
43 | }
44 |
45 | public class LoggerLoggerTypeConverter : JsonConverter
46 | {
47 | public override bool CanConvert(Type objectType)
48 | {
49 | return objectType == typeof(EventType);
50 | }
51 |
52 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
53 | {
54 | return serializer.Deserialize(reader, typeof(EventType));
55 | }
56 |
57 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
58 | {
59 | serializer.Serialize(writer, Enum.GetName(typeof(EventType), value));
60 | }
61 | }
62 |
63 | public class LoggerHashSetTypeConverter : JsonConverter
64 | {
65 | public override bool CanConvert(Type objectType)
66 | {
67 | return objectType == typeof(HashSet);
68 | }
69 |
70 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
71 | {
72 | string[] ets = ((string)reader.Value).Replace("[", "").Replace("]", "").Split(',');
73 | HashSet eventTypes = new HashSet();
74 | EventType a = 0;
75 | foreach (string et in ets)
76 | {
77 | if (Enum.TryParse(et, out a)) { eventTypes.Add(a); }
78 | }
79 | return eventTypes;
80 | }
81 |
82 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
83 | {
84 | string ets = string.Join(",", ((HashSet)value));
85 | ets = ets.Insert(0, "[");
86 | ets = ets.Insert(ets.Length, "]");
87 | serializer.Serialize(writer, ets);
88 | }
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/samples/delphi/CustomFormatOutput/CustomFormatOutputLogger.dpr:
--------------------------------------------------------------------------------
1 | program CustomFormatOutputLogger;
2 |
3 | {$APPTYPE CONSOLE}
4 |
5 | {$R *.res}
6 |
7 | uses
8 | System.SysUtils,
9 | Quick.Commons,
10 | Quick.Console,
11 | Quick.Logger,
12 | Quick.Logger.Provider.Console,
13 | Quick.Logger.Provider.Files;
14 |
15 | begin
16 | try
17 | //wait for 60 seconds to flush pending logs in queue on program finishes
18 | Logger.WaitForFlushBeforeExit := 60;
19 | Logger.CustomTags['MYTAG1'] := 'MyTextTag1';
20 | Logger.CustomTags['MYTAG2'] := 'MyTextTag2';
21 |
22 | //configure Console Log provider
23 | Logger.Providers.Add(GlobalLogConsoleProvider);
24 | with GlobalLogConsoleProvider do
25 | begin
26 | LogLevel := LOG_ALL;
27 | ShowEventColors := True;
28 | ShowTimeStamp := True;
29 | TimePrecission := True;
30 | CustomMsgOutput := True;
31 | CustomFormatOutput := '%{DATE} %{TIME} - [%{LEVEL}] : %{MESSAGE} (%{MYTAG1} / %{MYTAG2})';
32 | Enabled := True;
33 | end;
34 |
35 | //configure File log provider
36 | Logger.Providers.Add(GlobalLogFileProvider);
37 | with GlobalLogFileProvider do
38 | begin
39 | FileName := '.\LoggerDemo.log';
40 | LogLevel := LOG_ALL;
41 | TimePrecission := True;
42 | MaxRotateFiles := 3;
43 | MaxFileSizeInMB := 5;
44 | RotatedFilesPath := '.\RotatedLogs';
45 | CompressRotatedFiles := False;
46 | CustomMsgOutput := True;
47 | CustomFormatOutput := '%{DATETIME} [%{LEVEL}] : %{MESSAGE} [%{APPNAME}] (%{MYTAG2})';
48 | Enabled := True;
49 | end;
50 |
51 | Logger.Info('This is a info message');
52 |
53 | Logger.Error('This is a error message');
54 |
55 | Logger.Done('This is a done message');
56 |
57 |
58 |
59 |
60 | ConsoleWaitForEnterKey;
61 |
62 | //check if you press the key before all items are flushed to console/disk
63 | if Logger.QueueCount > 0 then
64 | begin
65 | cout(Format('There are %d log items in queue. Waiting %d seconds max to flush...',[Logger.QueueCount,Logger.WaitForFlushBeforeExit]),ccYellow);
66 | end;
67 | except
68 | on E: Exception do
69 | Writeln(E.ClassName, ': ', E.Message);
70 | end;
71 | end.
72 |
--------------------------------------------------------------------------------
/samples/delphi/CustomFormatOutput/CustomFormatOutputLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/delphi/CustomFormatOutput/CustomFormatOutputLogger.res
--------------------------------------------------------------------------------
/samples/delphi/DailyRotateLogger/DailyRotateLogger.Service.pas:
--------------------------------------------------------------------------------
1 | unit DailyRotateLogger.Service;
2 |
3 | interface
4 |
5 | uses
6 | Quick.Logger,
7 | Quick.Logger.Provider.Files,
8 | Quick.Logger.ExceptionHook,
9 | Quick.Threads;
10 |
11 | type
12 | TMyService = class
13 | private
14 | fScheduler : TScheduledTasks;
15 | public
16 | constructor Create;
17 | destructor Destroy; override;
18 | procedure Execute;
19 | end;
20 |
21 | implementation
22 |
23 | constructor TMyService.Create;
24 | begin
25 | fScheduler := TScheduledTasks.Create;
26 | GlobalLogFileProvider.DailyRotate := True;
27 | GlobalLogFileProvider.DailyRotateFileDateFormat := 'yyyymmdd';
28 | GlobalLogFileProvider.MaxRotateFiles := 10;
29 | GlobalLogFileProvider.MaxFileSizeInMB := 10;
30 | GlobalLogFileProvider.RotatedFilesPath := '.\logs';
31 | Logger.Providers.Add(GlobalLogFileProvider);
32 | GlobalLogFileProvider.Enabled := True;
33 | end;
34 |
35 | destructor TMyService.Destroy;
36 | begin
37 | fScheduler.Free;
38 | inherited;
39 | end;
40 |
41 | procedure TMyService.Execute;
42 | begin
43 | fScheduler.AddTask('LogToFile',procedure(aTask : ITask)
44 | begin
45 | Logger.Info('Logged a new entry');
46 | end
47 | ).StartNow.RepeatEvery(10,TTimeMeasure.tmSeconds);
48 | fScheduler.Start;
49 | end;
50 |
51 |
52 | end.
53 |
--------------------------------------------------------------------------------
/samples/delphi/DailyRotateLogger/DailyRotateLogger.dpr:
--------------------------------------------------------------------------------
1 | program DailyRotateLogger;
2 |
3 | {$APPTYPE CONSOLE}
4 |
5 | {$R *.res}
6 |
7 | uses
8 | SysUtils,
9 | Quick.Commons,
10 | Quick.Console,
11 | Quick.AppService,
12 | DailyRotateLogger.Service in 'DailyRotateLogger.Service.pas';
13 |
14 | var
15 |
16 | MyService : TMyService;
17 |
18 | begin
19 |
20 | try
21 | if not AppService.IsRunningAsService then
22 | begin
23 | cout('Running in console mode',etInfo);
24 | MyService := TMyService.Create;
25 | MyService.Execute;
26 | cout('Press [Enter] to exit',etInfo);
27 | ConsoleWaitForEnterKey;
28 | cout('Closing app...',etInfo);
29 | MyService.Free;
30 | end
31 | else
32 | begin
33 | AppService.ServiceName := 'MyService';
34 | AppService.DisplayName := 'MyServicesvc';
35 | {$IFDEF FPC}
36 | AppService.OnStart := TSrvFactory.CreateMyService;
37 | {$ELSE}
38 | //you can pass an anonymous method to events
39 | AppService.OnStart := procedure
40 | begin
41 | MyService := TMyService.Create;
42 | end;
43 | {$ENDIF}
44 | AppService.OnExecute := MyService.Execute;
45 | AppService.OnStop := MyService.Free;
46 | AppService.CheckParams;
47 | end;
48 | except
49 | on E: Exception do
50 | Writeln(E.ClassName, ': ', E.Message);
51 | end;
52 | end.
53 |
--------------------------------------------------------------------------------
/samples/delphi/DailyRotateLogger/DailyRotateLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/delphi/DailyRotateLogger/DailyRotateLogger.res
--------------------------------------------------------------------------------
/samples/delphi/MultiLogger/MultiLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/delphi/MultiLogger/MultiLogger.res
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/AndroidManifest.template.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 | <%uses-permission%>
12 |
13 |
21 |
22 | <%application-meta-data%>
23 | <%services%>
24 |
26 |
30 |
31 |
33 |
34 |
35 |
36 |
37 |
38 | <%activity%>
39 | <%receivers%>
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/Entitlement.TemplateOSX.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%appSandboxKeys%>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/Entitlement.TemplateOSX32.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%appSandboxKeys%>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/MultiLogger.dpr:
--------------------------------------------------------------------------------
1 | program MultiLogger;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | frMain in 'frMain.pas' {frmMain};
7 |
8 | {$R *.res}
9 |
10 | begin
11 | Application.Initialize;
12 | Application.CreateForm(TfrmMain, frmMain);
13 | Application.Run;
14 | end.
15 |
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/MultiLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/firemonkey/MultiLogger/MultiLogger.res
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/frMain.fmx:
--------------------------------------------------------------------------------
1 | object frmMain: TfrmMain
2 | Left = 0
3 | Top = 0
4 | Caption = 'Form1'
5 | ClientHeight = 480
6 | ClientWidth = 355
7 | FormFactor.Width = 320
8 | FormFactor.Height = 480
9 | FormFactor.Devices = [Desktop]
10 | OnCreate = FormCreate
11 | OnClose = FormClose
12 | DesignerMasterStyle = 0
13 | object meLog: TMemo
14 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
15 | DataDetectorTypes = []
16 | ReadOnly = True
17 | Align = Client
18 | Size.Width = 355.000000000000000000
19 | Size.Height = 436.000000000000000000
20 | Size.PlatformDefault = False
21 | TabOrder = 0
22 | Viewport.Width = 351.000000000000000000
23 | Viewport.Height = 432.000000000000000000
24 | end
25 | object btnGenerateLog: TButton
26 | Align = MostBottom
27 | Position.Y = 436.000000000000000000
28 | Size.Width = 355.000000000000000000
29 | Size.Height = 22.000000000000000000
30 | Size.PlatformDefault = False
31 | TabOrder = 2
32 | Text = 'Generate one Log entry'
33 | OnClick = btnGenerateLogClick
34 | end
35 | object btnMultiThread: TButton
36 | Align = MostBottom
37 | Position.Y = 458.000000000000000000
38 | Size.Width = 355.000000000000000000
39 | Size.Height = 22.000000000000000000
40 | Size.PlatformDefault = False
41 | TabOrder = 1
42 | Text = 'Generate Mutithread Log entries'
43 | OnClick = btnMultiThreadClick
44 | end
45 | end
46 |
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/frMain.pas:
--------------------------------------------------------------------------------
1 | unit frMain;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
8 | FMX.Controls.Presentation, FMX.ScrollBox,
9 | FMX.Memo, FMX.StdCtrls,
10 | Quick.Logger,
11 | Quick.Logger.Provider.Files,
12 | Quick.Logger.Provider.IDEDebug,
13 | Quick.Logger.Provider.Events,
14 | Quick.Threads, FMX.Memo.Types;
15 |
16 | type
17 | TfrmMain = class(TForm)
18 | meLog: TMemo;
19 | btnGenerateLog: TButton;
20 | btnMultiThread: TButton;
21 | procedure btnGenerateLogClick(Sender: TObject);
22 | procedure FormCreate(Sender: TObject);
23 | procedure OnNewLog(LogItem : TLogItem);
24 | procedure FormClose(Sender: TObject; var Action: TCloseAction);
25 | procedure btnMultiThreadClick(Sender: TObject);
26 | private
27 | { Private declarations }
28 | public
29 | { Public declarations }
30 | end;
31 |
32 | var
33 | frmMain: TfrmMain;
34 | backgroundtasks : TBackgroundTasks;
35 |
36 | implementation
37 |
38 | {$R *.fmx}
39 |
40 | procedure TfrmMain.btnGenerateLogClick(Sender: TObject);
41 | begin
42 | Log('Test log entry created!',etError);
43 | end;
44 |
45 | procedure TfrmMain.btnMultiThreadClick(Sender: TObject);
46 | var
47 | i : Integer;
48 | begin
49 | for i := 1 to 10 do
50 | begin
51 | backgroundtasks.AddTask([i],False,procedure(task : ITask)
52 | begin
53 | Logger.Info('Logged from Task %d',[task[0].AsInteger]);
54 | end).Run;
55 | end;
56 | end;
57 |
58 | procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
59 | begin
60 | backgroundtasks.Free;
61 | end;
62 |
63 | procedure TfrmMain.FormCreate(Sender: TObject);
64 | begin
65 | GlobalLogFileProvider.LogLevel := LOG_ALL;
66 | GlobalLogFileProvider.Enabled := True;
67 | GlobalLogFileProvider.IncludedInfo := GlobalLogFileProvider.IncludedInfo + [iiThreadId];
68 | Logger.Providers.Add(GlobalLogFileProvider);
69 |
70 | GlobalLogEventsProvider.LogLevel := LOG_ALL;
71 | GlobalLogEventsProvider.OnAny := OnNewLog;
72 | GlobalLogEventsProvider.Enabled := True;
73 | Logger.Providers.Add(GlobalLogEventsProvider);
74 |
75 | GlobalLogIDEDebugProvider.Enabled := True;
76 | Logger.Providers.Add(GlobalLogIDEDebugProvider);
77 |
78 | backgroundtasks := TBackgroundTasks.Create(10,100);
79 | backgroundtasks.Start;
80 | end;
81 |
82 | procedure TfrmMain.OnNewLog(LogItem: TLogItem);
83 | begin
84 | TThread.Synchronize(nil,
85 | procedure
86 | begin
87 | meLog.Lines.Add(Format('%s [%s] %s (TreadId: %d)',[DateTimeToStr(LogItem.EventDate),LogItem.EventTypeName,LogItem.Msg,LogItem.ThreadId]));
88 | end
89 | );
90 | end;
91 |
92 | end.
93 |
--------------------------------------------------------------------------------
/samples/firemonkey/MultiLogger/info.plist.TemplateOSX.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%VersionInfoPListKeys%>
6 | <%ExtraInfoPListKeys%>
7 |
8 |
9 |
--------------------------------------------------------------------------------
/samples/fpc/ConsoleLogger/ConsoleLogger.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/samples/fpc/ConsoleLogger/ConsoleLogger.lpr:
--------------------------------------------------------------------------------
1 | program ConsoleLogger;
2 |
3 | {$mode delphi}
4 |
5 | uses
6 | {$IFDEF UNIX}
7 | CThreads,
8 | {$ENDIF}
9 | Classes,
10 | Quick.Logger,
11 | Quick.Logger.Provider.Console,
12 | Quick.Logger.Provider.Files;
13 | //Quick.Logger.Provider.Events,
14 | //Quick.Logger.Provider.Rest,
15 | //Quick.Logger.Provider.Redis,
16 | //Quick.Logger.Provider.Memory;
17 |
18 | begin
19 | GlobalLogConsoleProvider.LogLevel := LOG_DEBUG;
20 | GlobalLogConsoleProvider.Enabled := True;
21 | GlobalLogConsoleProvider.ShowTimeStamp:= True;
22 | Logger.Providers.Add(GlobalLogConsoleProvider);
23 |
24 | GlobalLogFileProvider.LogLevel := LOG_DEBUG;
25 | GlobalLogFileProvider.Enabled := True;
26 | Logger.Providers.Add(GlobalLogFileProvider);
27 |
28 | Log('Console output Test',etHeader);
29 | Log('Hello world!',etInfo);
30 | Log('Error Test!',etError);
31 | Log('Warning Test',etWarning);
32 | Log('Debug Test',etDebug);
33 | Log('Trace Test',etTrace);
34 | Log('Critical Test',etCritical);
35 | Log('Exception Test',etException);
36 | end.
37 |
38 |
--------------------------------------------------------------------------------
/samples/fpc/ConsoleLogger/backup/ConsoleLogger.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/samples/fpc/ConsoleLogger/backup/ConsoleLogger.lpr:
--------------------------------------------------------------------------------
1 | program ConsoleLogger;
2 |
3 | {$mode delphi}
4 |
5 | uses
6 | {$IFDEF UNIX}
7 | CThreads,
8 | {$ENDIF}
9 | Classes,
10 | Quick.Logger,
11 | Quick.Logger.Provider.Console,
12 | Quick.Logger.Provider.Files,
13 | //Quick.Logger.Provider.Events,
14 | //Quick.Logger.Provider.Rest,
15 | //Quick.Logger.Provider.Redis,
16 | //Quick.Logger.Provider.Memory;
17 |
18 | begin
19 | GlobalLogConsoleProvider.LogLevel := LOG_DEBUG;
20 | GlobalLogConsoleProvider.Enabled := True;
21 | GlobalLogConsoleProvider.ShowTimeStamp:= True;
22 | Logger.Providers.Add(GlobalLogConsoleProvider);
23 |
24 | GlobalLogFileProvider.LogLevel := LOG_DEBUG;
25 | GlobalLogFileProvider.Enabled := True;
26 | Logger.Providers.Add(GlobalLogFileProvider);
27 |
28 | Log('Console output Test',etHeader);
29 | Log('Hello world!',etInfo);
30 | Log('Error Test!',etError);
31 | Log('Warning Test',etWarning);
32 | Log('Debug Test',etDebug);
33 | Log('Trace Test',etTrace);
34 | Log('Critical Test',etCritical);
35 | Log('Exception Test',etException);
36 | end.
37 |
38 |
--------------------------------------------------------------------------------
/samples/fpc/ConsoleLogger/lib/x86_64-linux/ConsoleLogger.or:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/fpc/ConsoleLogger/lib/x86_64-linux/ConsoleLogger.or
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/MultiLogger.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/MultiLogger.pas:
--------------------------------------------------------------------------------
1 | program MultiLogger;
2 |
3 | {$IFDEF MSWINDOWS}
4 | {$APPTYPE CONSOLE}
5 | {$ENDIF}
6 |
7 | {$MODE DELPHI}
8 |
9 | {$R *.res}
10 |
11 | uses
12 | {$IFDEF UNIX}
13 | CThreads,
14 | {$ENDIF}
15 | Classes,
16 | SysUtils,
17 | Quick.Console,
18 | Quick.Logger,
19 | Quick.Logger.Provider.Console,
20 | Quick.Logger.Provider.Files,
21 | Quick.Logger.Provider.Email,
22 | Quick.Logger.Provider.Events,
23 | Quick.Logger.Provider.Rest,
24 | Quick.Logger.Provider.Redis,
25 | {$IFDEF MSWINDOWS}
26 | Quick.Logger.Provider.IDEDebug,
27 | Quick.Logger.Provider.EventLog,
28 | {$ENDIF}
29 | Quick.Logger.Provider.Memory,
30 | Quick.Logger.Provider.Telegram,
31 | Quick.Logger.Provider.Slack,
32 | Quick.Logger.UnhandledExceptionHook,
33 | Quick.Logger.Provider.InfluxDB,
34 | Quick.Logger.Provider.Logstash,
35 | Quick.Logger.Provider.ElasticSearch,
36 | Quick.Logger.Provider.GrayLog,
37 | Quick.Logger.Provider.Sentry,
38 | Quick.Logger.Provider.Twilio;
39 |
40 | var
41 | a : Integer;
42 |
43 | procedure Test;
44 | var
45 | x : Integer;
46 | threadnum : Integer;
47 | begin
48 | Inc(a);
49 | threadnum := a;
50 | Sleep(Random(50));
51 | for x := 1 to 10000 do
52 | begin
53 | Log('Thread %d - Item %d (%s)',[threadnum,x,DateTimeToStr(Now,GlobalLogConsoleProvider.FormatSettings)],etWarning);
54 | end;
55 | Log('Thread %d - (Finished) (%s)',[threadnum,DateTimeToStr(Now,GlobalLogConsoleProvider.FormatSettings)],etWarning);
56 | end;
57 |
58 | procedure MultiThreadWriteTest;
59 | var
60 | i : Integer;
61 | begin
62 | a := 0;
63 | for i := 1 to 30 do
64 | begin
65 | Log('Launch Thread %d',[i],etInfo);
66 | TThread.CreateAnonymousThread(Test).Start;
67 | end;
68 | Sleep(1000);
69 | Log('Process finished. Press to Exit',etInfo);
70 | end;
71 |
72 | type
73 |
74 | TMyEvent = class
75 | procedure Critical(logItem : TLogItem);
76 | end;
77 |
78 | procedure TMyEvent.Critical(logItem : TLogItem);
79 | begin
80 | Writeln(Format('OnCritical Event received: %s',[logitem.Msg]));
81 | end;
82 |
83 | begin
84 | //wait for 60 seconds to flush pending logs in queue on program finishes
85 | Logger.WaitForFlushBeforeExit := 60;
86 | //configure Console Log provider
87 | Logger.Providers.Add(GlobalLogConsoleProvider);
88 | with GlobalLogConsoleProvider do
89 | begin
90 | LogLevel := LOG_ALL;
91 | ShowEventColors := True;
92 | ShowTimeStamp := True;
93 | TimePrecission := True;
94 | Enabled := True;
95 | end;
96 | //configure File log provider
97 | Logger.Providers.Add(GlobalLogFileProvider);
98 | with GlobalLogFileProvider do
99 | begin
100 | FileName := './LoggerDemo.log';
101 | LogLevel := LOG_ALL;
102 | TimePrecission := True;
103 | MaxRotateFiles := 3;
104 | MaxFileSizeInMB := 5;
105 | RotatedFilesPath := './RotatedLogs';
106 | CompressRotatedFiles := False;
107 | Enabled := True;
108 | end;
109 | //configure Email log provider
110 | Logger.Providers.Add(GlobalLogEmailProvider);
111 | with GlobalLogEmailProvider do
112 | begin
113 | LogLevel := [etCritical];
114 | SMTP.Host := 'smtp.domain.com';
115 | SMTP.Username := 'myemail@domain.com';
116 | SMTP.Password := '1234';
117 | Mail.SenderName := 'Quick.Logger Alert';
118 | Mail.From := 'myemail@domain.com';
119 | Mail.Recipient := 'otheremail@domain.com';
120 | Mail.CC := '';
121 | Enabled := False; //enable when you have a stmp server to connect
122 | end;
123 | //configure Events log provider
124 | Logger.Providers.Add(GlobalLogEventsProvider);
125 | with GlobalLogEventsProvider do
126 | begin
127 | LogLevel := [etWarning,etCritical];
128 | SendLimits.TimeRange := slByMinute;
129 | SendLimits.LimitEventTypes := [etWarning];
130 | SendLimits.MaxSent := 2;
131 | OnCritical := TMyEvent.Critical;
132 | Enabled := True;
133 | end;
134 | {$IFDEF MSWINDOWS}
135 | //configure IDEDebug provider
136 | Logger.Providers.Add(GlobalLogIDEDebugProvider);
137 | with GlobalLogIDEDebugProvider do
138 | begin
139 | LogLevel := [etCritical];
140 | Enabled := True;
141 | end;
142 | //configure EventLog provider
143 | Logger.Providers.Add(GlobalLogEventLogProvider);
144 | with GlobalLogEventLogProvider do
145 | begin
146 | LogLevel := [etSuccess,etError,etCritical,etException];
147 | Source := 'QuickLogger';
148 | Enabled := True;
149 | end;
150 | {$ENDIF}
151 | //configure Rest log provider
152 | Logger.Providers.Add(GlobalLogRestProvider);
153 | with GlobalLogRestProvider do
154 | begin
155 | URL := 'http://localhost/event';
156 | LogLevel := [etError,etCritical,etException];
157 | Enabled := False; //enable when you have a http server server to connect
158 | end;
159 | //configure Redis log provider
160 | Logger.Providers.Add(GlobalLogRedisProvider);
161 | with GlobalLogRedisProvider do
162 | begin
163 | Host := '192.168.1.133';
164 | LogKey := 'Log';
165 | MaxSize := 1000;
166 | Password := 'pass123';
167 | LogLevel := LOG_ALL;// [etError,etCritical,etException];
168 | Enabled := True; //enable when you have a redis to connect
169 | end;
170 | //configure Mem log provider
171 | Logger.Providers.Add(GlobalLogMemoryProvider);
172 | with GlobalLogMemoryProvider do
173 | begin
174 | LogLevel := [etError,etCritical,etException];
175 | Enabled := True;
176 | end;
177 |
178 | //configure Telegram log provider
179 | Logger.Providers.Add(GlobalLogTelegramProvider);
180 | with GlobalLogTelegramProvider do
181 | begin
182 | ChannelName := 'YourChannel';
183 | ChannelType := TTelegramChannelType.tcPrivate;
184 | BotToken := 'yourbottoken';
185 | Environment := 'Test';
186 | PlatformInfo := 'App';
187 | IncludedInfo := [iiAppName,iiHost,iiEnvironment,iiPlatform];
188 | LogLevel := [etError,etCritical,etException];
189 | Enabled := False;
190 | end;
191 |
192 | //configure Slack log provider
193 | Logger.Providers.Add(GlobalLogSlackProvider);
194 | with GlobalLogSlackProvider do
195 | begin
196 | ChannelName := 'alerts';
197 | UserName := 'yourbot';
198 | WebHookURL := 'https://hooks.slack.com/services/TXXXXXXXX/BXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX';
199 | LogLevel := [etError,etCritical,etException];
200 | Enabled := False;
201 | end;
202 |
203 |
204 | //configure Logstash log provider
205 | Logger.Providers.Add(GlobalLogLogstashProvider);
206 | with GlobalLogLogstashProvider do
207 | begin
208 | URL := 'http://192.168.1.133:5011';
209 | IndexName := 'logger';
210 | LogLevel := [etError,etCritical,etException];
211 | Environment := 'Production';
212 | PlatformInfo := 'Desktop';
213 | IncludedInfo := [iiAppName,iiHost,iiEnvironment,iiPlatform];
214 | Enabled := False; //enable when you have a logstash service to connect
215 | end;
216 |
217 | //configure ElasticSearch log provider
218 | Logger.Providers.Add(GlobalLogElasticSearchProvider);
219 | with GlobalLogElasticSearchProvider do
220 | begin
221 | URL := 'http://192.168.1.133:9200';
222 | IndexName := 'logger';
223 | LogLevel := [etError,etCritical,etException];
224 | Environment := 'Production';
225 | PlatformInfo := 'Desktop';
226 | IncludedInfo := [iiAppName,iiHost,iiEnvironment,iiPlatform];
227 | Enabled := False; //enable when you have a ElasticSearch service to connect
228 | end;
229 |
230 | //configure InfluxDB log provider
231 | Logger.Providers.Add(GlobalLogInfluxDBProvider);
232 | with GlobalLogInfluxDBProvider do
233 | begin
234 | URL := 'http://192.168.1.133:8086';
235 | DataBase := 'logger';
236 | CreateDataBaseIfNotExists := True;
237 | LogLevel := LOG_DEBUG;
238 | MaxFailsToRestart := 5;
239 | MaxFailsToStop := 0;
240 | Environment := 'Production';
241 | PlatformInfo := 'Desktop';
242 | IncludedTags := [iiAppName,iiHost,iiEnvironment,iiPlatform];
243 | IncludedInfo := [iiAppName,iiHost,iiEnvironment,iiPlatform];
244 | Enabled := False; //enable when you have a InfluxDB server to connect
245 | end;
246 |
247 | //configure GrayLog log provider
248 | Logger.Providers.Add(GlobalLogGrayLogProvider);
249 | with GlobalLogGrayLogProvider do
250 | begin
251 | URL := 'http://192.168.1.133:12201';
252 | LogLevel := LOG_DEBUG;
253 | MaxFailsToRestart := 5;
254 | MaxFailsToStop := 0;
255 | Environment := 'Production';
256 | PlatformInfo := 'Desktop';
257 | IncludedInfo := [iiAppName,iiEnvironment,iiPlatform];
258 | Enabled := False; //enable when you have a GrayLog server to connect
259 | end;
260 |
261 | //configure Sentry log provider
262 | Logger.Providers.Add(GlobalLogSentryProvider);
263 | with GlobalLogSentryProvider do
264 | begin
265 | DSNKey := 'https://xxxxxxxxxxx@999999.ingest.sentry.io/999999';
266 | LogLevel := LOG_DEBUG;
267 | MaxFailsToRestart := 5;
268 | MaxFailsToStop := 0;
269 | Environment := 'Production';
270 | PlatformInfo := 'Desktop';
271 | IncludedInfo := [iiAppName,iiEnvironment,iiPlatform,iiOSVersion,iiUserName];
272 | Enabled := False; //enable when you have a Sentry server to connect
273 | end;
274 |
275 | //configure Twilio log provider
276 | Logger.Providers.Add(GlobalLogTwilioProvider);
277 | with GlobalLogTwilioProvider do
278 | begin
279 | AccountSID := 'ACxxxxxxxxx';
280 | AuthToken := 'xxxx';
281 | SendFrom := '+123123123';
282 | SendTo := '+123123123';
283 | LogLevel := LOG_DEBUG;
284 | MaxFailsToRestart := 5;
285 | MaxFailsToStop := 0;
286 | Environment := 'Production';
287 | PlatformInfo := 'Desktop';
288 | IncludedInfo := [iiAppName,iiEnvironment,iiPlatform,iiOSVersion,iiUserName];
289 | Enabled := False; //enable when you have a Twilio account to connect
290 | end;
291 |
292 | Log('Quick.Logger Demo 1 [Event types]',etHeader);
293 | Log('Hello world!',etInfo);
294 | Log('An error msg!',etError);
295 | Log('A warning msg!',etWarning);
296 | Log('A critical error!',etCritical);
297 | Log('Successfully process',etSuccess);
298 |
299 | Log('Quick.Logger Demo 2 [Exception Hook]',etHeader);
300 |
301 | Log('Press to begin Thread collision Test',etInfo);
302 | //ConsoleWaitForEnterKey;
303 |
304 | Log('Quick.Logger Demo 3 [Thread collision]',etHeader);
305 | MultiThreadWriteTest;
306 | ConsoleWaitForEnterKey;
307 |
308 | //check if you press the key before all items are flushed to console/disk
309 | if Logger.QueueCount > 0 then
310 | begin
311 | Writeln(Format('There are %d log items in queue. Waiting %d seconds max to flush...',[Logger.QueueCount,Logger.WaitForFlushBeforeExit]));
312 | end;
313 | end.
314 |
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/MultiLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/fpc/MultiLogger/MultiLogger.res
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/lib/i386-win32/MultiLogger.or:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/fpc/MultiLogger/lib/i386-win32/MultiLogger.or
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/lib/i386-win32/MultiLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/fpc/MultiLogger/lib/i386-win32/MultiLogger.res
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/lib/x86_64-linux/MultiLogger.or:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/fpc/MultiLogger/lib/x86_64-linux/MultiLogger.or
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/lib/x86_64-linux/MultiLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/fpc/MultiLogger/lib/x86_64-linux/MultiLogger.res
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/lib/x86_64-win64/MultiLogger.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exilon/QuickLogger/1257c4634e628b5ce36089a26883841129f84f23/samples/fpc/MultiLogger/lib/x86_64-win64/MultiLogger.res
--------------------------------------------------------------------------------
/samples/fpc/MultiLogger/ppas.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | SET THEFILE=QuickLoggerDemo.exe
3 | echo Linking %THEFILE%
4 | D:\Lazarus\fpc\bin\i386-win32\ld.exe -b pei-i386 -m i386pe --gc-sections --entry=_mainCRTStartup -o QuickLoggerDemo.exe link.res
5 | if errorlevel 1 goto linkend
6 | D:\Lazarus\fpc\bin\i386-win32\postw32.exe --subsystem console --input QuickLoggerDemo.exe --stack 16777216
7 | if errorlevel 1 goto linkend
8 | goto end
9 | :asmend
10 | echo An error occurred while assembling %THEFILE%
11 | goto end
12 | :linkend
13 | echo An error occurred while linking %THEFILE%
14 | :end
15 |
--------------------------------------------------------------------------------