├── .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 | <UseAppBundle Value="False"/> 14 | <ResourceType Value="res"/> 15 | </General> 16 | <BuildModes> 17 | <Item Name="Default" Default="True"/> 18 | </BuildModes> 19 | <PublishOptions> 20 | <Version Value="2"/> 21 | <UseFileFilters Value="True"/> 22 | </PublishOptions> 23 | <RunParams> 24 | <FormatVersion Value="2"/> 25 | <Modes Count="0"/> 26 | </RunParams> 27 | <Units> 28 | <Unit> 29 | <Filename Value="QuickLogger.Lib.Tester.dpr"/> 30 | <IsPartOfProject Value="True"/> 31 | </Unit> 32 | </Units> 33 | </ProjectOptions> 34 | <CompilerOptions> 35 | <Version Value="11"/> 36 | <Target> 37 | <Filename Value="QuickLogger.Lib.Tester.Tester"/> 38 | </Target> 39 | <SearchPaths> 40 | <IncludeFiles Value="$(ProjOutDir)"/> 41 | <Libraries Value="lib/x86_64-linux"/> 42 | <OtherUnitFiles Value="../../../../QuickLib"/> 43 | <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> 44 | </SearchPaths> 45 | </CompilerOptions> 46 | <Debugging> 47 | <Exceptions Count="3"> 48 | <Item1> 49 | <Name Value="EAbort"/> 50 | </Item1> 51 | <Item2> 52 | <Name Value="ECodetoolError"/> 53 | </Item2> 54 | <Item3> 55 | <Name Value="EFOpenError"/> 56 | </Item3> 57 | </Exceptions> 58 | </Debugging> 59 | </CONFIG> 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 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <Import Condition="Exists('$(BDS)\bin\CodeGear.Deployment.targets')" Project="$(BDS)\bin\CodeGear.Deployment.targets"/> 3 | <ProjectExtensions> 4 | <ProjectFileVersion>12</ProjectFileVersion> 5 | </ProjectExtensions> 6 | <PropertyGroup/> 7 | <ItemGroup Condition="'$(Platform)'=='Win32'"> 8 | <DeployFile Include="Win32\Release\QuickLogger.dll" Condition="'$(Config)'=='Release'"> 9 | <RemoteDir>QuickLogger\</RemoteDir> 10 | <RemoteName>QuickLogger.dll</RemoteName> 11 | <DeployClass>ProjectOutput</DeployClass> 12 | <Operation>0</Operation> 13 | <LocalCommand/> 14 | <RemoteCommand/> 15 | <Overwrite>True</Overwrite> 16 | <Required>True</Required> 17 | </DeployFile> 18 | </ItemGroup> 19 | <ItemGroup Condition="'$(Platform)'=='Win64'"> 20 | <DeployFile Include="Win64\Release\QuickLogger.dll" Condition="'$(Config)'=='Release'"> 21 | <RemoteDir>QuickLogger\</RemoteDir> 22 | <RemoteName>QuickLogger.dll</RemoteName> 23 | <DeployClass>ProjectOutput</DeployClass> 24 | <Operation>0</Operation> 25 | <LocalCommand/> 26 | <RemoteCommand/> 27 | <Overwrite>True</Overwrite> 28 | <Required>True</Required> 29 | </DeployFile> 30 | </ItemGroup> 31 | <ItemGroup Condition="'$(Platform)'=='Linux64'"> 32 | <DeployFile Include="..\..\bin\Linux64\Release\libQuickLogger.so" Condition="'$(Config)'=='Release'"> 33 | <RemoteDir>QuickLogger\</RemoteDir> 34 | <RemoteName>libQuickLogger.so</RemoteName> 35 | <DeployClass>ProjectOutput</DeployClass> 36 | <Operation>1</Operation> 37 | <LocalCommand/> 38 | <RemoteCommand/> 39 | <Overwrite>True</Overwrite> 40 | <Required>True</Required> 41 | </DeployFile> 42 | </ItemGroup> 43 | </Project> 44 | -------------------------------------------------------------------------------- /library/delphi&lazarus/src/QuickLogger.lpi: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <CONFIG> 3 | <ProjectOptions> 4 | <Version Value="11"/> 5 | <PathDelim Value="\"/> 6 | <General> 7 | <Flags> 8 | <MainUnitHasUsesSectionForAllUnits Value="False"/> 9 | <MainUnitHasCreateFormStatements Value="False"/> 10 | <MainUnitHasTitleStatement Value="False"/> 11 | <MainUnitHasScaledStatement Value="False"/> 12 | </Flags> 13 | <SessionStorage Value="InProjectDir"/> 14 | <MainUnit Value="0"/> 15 | <Title Value="QuickLogger"/> 16 | <UseAppBundle Value="False"/> 17 | <ResourceType Value="res"/> 18 | </General> 19 | <BuildModes Count="1"> 20 | <Item1 Name="Default" Default="True"/> 21 | </BuildModes> 22 | <PublishOptions> 23 | <Version Value="2"/> 24 | </PublishOptions> 25 | <RunParams> 26 | <FormatVersion Value="2"/> 27 | <Modes Count="1"> 28 | <Mode0 Name="default"/> 29 | </Modes> 30 | </RunParams> 31 | <RequiredPackages Count="2"> 32 | <Item1> 33 | <PackageName Value="indylaz"/> 34 | </Item1> 35 | <Item2> 36 | <PackageName Value="LCL"/> 37 | </Item2> 38 | </RequiredPackages> 39 | <Units Count="1"> 40 | <Unit0> 41 | <Filename Value="QuickLogger.dpr"/> 42 | <IsPartOfProject Value="True"/> 43 | </Unit0> 44 | </Units> 45 | </ProjectOptions> 46 | <CompilerOptions> 47 | <Version Value="11"/> 48 | <PathDelim Value="\"/> 49 | <SearchPaths> 50 | <IncludeFiles Value="$(ProjOutDir)"/> 51 | <OtherUnitFiles Value="..\..\..;..\..\..\..\QuickLib;..\..\..\..\generics.collections\src"/> 52 | <UnitOutputDirectory Value="..\..\bin\$(TargetCPU)-$(TargetOS)"/> 53 | </SearchPaths> 54 | <Parsing> 55 | <SyntaxOptions> 56 | <SyntaxMode Value="Delphi"/> 57 | </SyntaxOptions> 58 | </Parsing> 59 | <CodeGeneration> 60 | <TargetOS Value="linux"/> 61 | <Optimizations> 62 | <OptimizationLevel Value="3"/> 63 | </Optimizations> 64 | </CodeGeneration> 65 | <Linking> 66 | <Debugging> 67 | <GenerateDebugInfo Value="False"/> 68 | </Debugging> 69 | <LinkSmart Value="True"/> 70 | <Options> 71 | <ExecutableType Value="Library"/> 72 | </Options> 73 | </Linking> 74 | <Other> 75 | <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> 76 | </Other> 77 | </CompilerOptions> 78 | <Debugging> 79 | <Exceptions Count="3"> 80 | <Item1> 81 | <Name Value="EAbort"/> 82 | </Item1> 83 | <Item2> 84 | <Name Value="ECodetoolError"/> 85 | </Item2> 86 | <Item3> 87 | <Name Value="EFOpenError"/> 88 | </Item3> 89 | </Exceptions> 90 | </Debugging> 91 | </CONFIG> 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 | <?xml version="1.0" encoding="utf-8"?> 2 | <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> 3 | <metadata> 4 | <id>QuickLogger.NetStandard</id> 5 | <version>1.5.5</version> 6 | <authors>QuickLogger.NetStandard</authors> 7 | <owners>QuickLogger.NetStandard</owners> 8 | <requireLicenseAcceptance>false</requireLicenseAcceptance> 9 | <projectUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</projectUrl> 10 | <description>QuickLogger is a cross-platform-native, Testable and Injectable multi-provider logging library for .NET ,NetCore, Object Paascal C, PHP, Python, Golang and more!</description> 11 | <copyright>Exilon & Turric4n</copyright> 12 | <tags>Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable</tags> 13 | <repository type="GIT" url="https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger" /> 14 | <dependencies> 15 | <group targetFramework=".NETStandard2.0"> 16 | <dependency id="QuickLogger.NetStandard.Abstractions" version="1.5.4" exclude="Build,Analyzers" /> 17 | <dependency id="Microsoft.CSharp" version="4.7.0" exclude="Build,Analyzers" /> 18 | <dependency id="NativeLibraryLoader" version="1.0.12" exclude="Build,Analyzers" /> 19 | <dependency id="Newtonsoft.Json" version="12.0.3" exclude="Build,Analyzers" /> 20 | </group> 21 | </dependencies> 22 | </metadata> 23 | </package> -------------------------------------------------------------------------------- /library/packaging/nuget/QuickLogger.NetStandard.1.5.5/[Content_Types].xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> 3 | <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /> 4 | <Default Extension="psmdcp" ContentType="application/vnd.openxmlformats-package.core-properties+xml" /> 5 | <Default Extension="targets" ContentType="application/octet" /> 6 | <Default Extension="dll" ContentType="application/octet" /> 7 | <Default Extension="so" ContentType="application/octet" /> 8 | <Default Extension="nuspec" ContentType="application/octet" /> 9 | </Types> -------------------------------------------------------------------------------- /library/packaging/nuget/QuickLogger.NetStandard.1.5.5/_rels/.rels: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> 3 | <Relationship Type="http://schemas.microsoft.com/packaging/2010/07/manifest" Target="/QuickLogger.NetStandard.nuspec" Id="R5AC5F250B313C66E" /> 4 | <Relationship Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="/package/services/metadata/core-properties/e58e9a8a37e043fab1891917d3d74ce6.psmdcp" Id="R3ADF530FB16526EC" /> 5 | </Relationships> -------------------------------------------------------------------------------- /library/packaging/nuget/QuickLogger.NetStandard.1.5.5/build/net45/QuickLogger.NetStandard.targets: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 | <Content Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x86\native\QuickLogger-x86.dll"> 4 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 5 | <Link>QuickLogger-x86.dll</Link> 6 | <Visible>false</Visible> 7 | </Content> 8 | <Content Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x64\native\QuickLogger-x64.dll"> 9 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 10 | <Link>QuickLogger-x64.dll</Link> 11 | <Visible>false</Visible> 12 | </Content> 13 | <Content Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libquicklogger.so"> 14 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 15 | <Link>libquicklogger.so</Link> 16 | <Visible>false</Visible> 17 | </Content> 18 | </Project> 19 | -------------------------------------------------------------------------------- /library/packaging/nuget/QuickLogger.NetStandard.1.5.5/package/services/metadata/core-properties/e58e9a8a37e043fab1891917d3d74ce6.psmdcp: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <coreProperties xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.openxmlformats.org/package/2006/metadata/core-properties"> 3 | <dc:creator>QuickLogger.NetStandard</dc:creator> 4 | <dc:description>QuickLogger is a cross-platform-native, Testable and Injectable multi-provider logging library for .NET ,NetCore, Object Paascal C, PHP, Python, Golang and more!</dc:description> 5 | <dc:identifier>QuickLogger.NetStandard</dc:identifier> 6 | <version>1.5.5</version> 7 | <keywords>Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable</keywords> 8 | <lastModifiedBy>NuGet.Packaging, Version=5.7.0.3, Culture=neutral, PublicKeyToken=31bf3856ad364e35;</lastModifiedBy> 9 | </coreProperties> -------------------------------------------------------------------------------- /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<string, object> _consoleproviderinfo = 55 | new Dictionary<string, object>() { 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<string, object> _fileproviderinfo = 62 | new Dictionary<string, object>() { 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<string, object> _emailproviderinfo = 70 | new Dictionary<string, object>() { 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<string, object> _windowseventlogproviderinfo = 76 | new Dictionary<string, object>() { 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<string, object> _restproviderinfo = 82 | new Dictionary<string, object>() { 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<string, object> _redisproviderinfo = 88 | new Dictionary<string, object>() { 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<string, object> _telegramproviderinfo = 94 | new Dictionary<string, object>() { 95 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "ChannelName", "mychannelname" }, { "ChannelType", "tcPrivate" }, { "BotToken", "555555555:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" }, 96 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 } 97 | }; 98 | // Slack Provider. 99 | static Dictionary<string, object> _slackproviderinfo = 100 | new Dictionary<string, object>() { 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<string, object> _adoproviderinfo = 106 | new Dictionary<string, object>() { 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<string, object> _syslogproviderinfo = 113 | new Dictionary<string, object>() { 114 | { "LogLevel", LoggerEventTypes.LOG_ALL }, { "Host", "127.0.0.1" }, { "Port", 514 }, { "Facility", "sfUserLevel" }, 115 | { "MaxFailsToRestart", 2 }, { "MaxFailsToStop", 10 } 116 | }; 117 | 118 | static List<ILoggerProvider> _providers = new List<ILoggerProvider>() { 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 | <Project Sdk="Microsoft.NET.Sdk"> 2 | 3 | <PropertyGroup> 4 | <OutputType>Exe</OutputType> 5 | <TargetFramework>net5.0</TargetFramework> 6 | <Platforms>AnyCPU;x86</Platforms> 7 | <PublishRepositoryUrl>true</PublishRepositoryUrl> 8 | <IncludeSymbols>true</IncludeSymbols> 9 | <SymbolPackageFormat>snupkg</SymbolPackageFormat> 10 | </PropertyGroup> 11 | 12 | <ItemGroup> 13 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 14 | </ItemGroup> 15 | 16 | 17 | <ItemGroup> 18 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 19 | <ProjectReference Include="..\QuickLogger.NetStandard.Abstractions\QuickLogger.NetStandard.Abstractions.csproj" /> 20 | <ProjectReference Include="..\QuickLogger\QuickLogger.NetStandard.csproj" /> 21 | </ItemGroup> 22 | 23 | </Project> 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<T> 9 | { 10 | 11 | 12 | static ConcurrentDictionary<Guid, AsyncLocal<T>> state = new ConcurrentDictionary<Guid, AsyncLocal<T>>(); 13 | 14 | 15 | /// <summary> 16 | /// Stores a given object and associates it with the specified name. 17 | /// </summary> 18 | /// <param name="id">The name with which to associate the new item in the call context.</param> 19 | /// <param name="data">The object to store in the call context.</param> 20 | public static void SetData(Guid id, T data) => 21 | state.GetOrAdd(id, _ => new AsyncLocal<T>()).Value = data; 22 | 23 | 24 | /// <summary> 25 | /// Retrieves an object with the specified name from the <see cref="CallContext"/>. 26 | /// </summary> 27 | /// <typeparam name="T">The type of the data being retrieved. Must match the type used when the <paramref name="id"/> was set via <see cref="SetData{T}(string, T)"/>.</typeparam> 28 | /// <param name="id">The name of the item in the call context.</param> 29 | /// <returns>The object in the call context associated with the specified name, or a default value for <typeparamref name="T"/> if none is found.</returns> 30 | public static T GetData(Guid id) => 31 | state.TryGetValue(id, out AsyncLocal<T> data) ? data.Value : default(T); 32 | 33 | 34 | /// <summary> 35 | /// Retrieves all stored objects. 36 | /// </summary> 37 | public static ICollection<AsyncLocal<T>> GetAll() => state.Values; 38 | 39 | 40 | /// <summary> 41 | /// Removes a given object. 42 | /// </summary> 43 | /// <param name="id">The name with which to associate the new item in the call context.</param> 44 | public static void RemoveData(Guid id, out AsyncLocal<T> 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 | <Project Sdk="Microsoft.NET.Sdk"> 2 | 3 | <PropertyGroup> 4 | <TargetFramework>netstandard2.0</TargetFramework> 5 | <Description>QuickLogger Dependency Injection Extensions and Standard Logging adapters for ASPNetCore.</Description> 6 | <Version>1.6.0</Version> 7 | <Copyright>Exilon & Turrican</Copyright> 8 | <PackageProjectUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</PackageProjectUrl> 9 | <RepositoryUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</RepositoryUrl> 10 | <GeneratePackageOnBuild>true</GeneratePackageOnBuild> 11 | <PackageTags>Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable</PackageTags> 12 | <RepositoryType>GIT</RepositoryType> 13 | <AssemblyVersion>1.6.0.0</AssemblyVersion> 14 | <FileVersion>1.5.9.0</FileVersion> 15 | </PropertyGroup> 16 | 17 | <ItemGroup> 18 | <None Remove="QuickLogger.json" /> 19 | </ItemGroup> 20 | 21 | <ItemGroup> 22 | <Content Include="QuickLogger.json"> 23 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 24 | </Content> 25 | </ItemGroup> 26 | 27 | <ItemGroup> 28 | <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" /> 29 | <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" /> 30 | <PackageReference Include="Microsoft.Extensions.Logging" Version="5.0.0" /> 31 | </ItemGroup> 32 | 33 | <ItemGroup> 34 | <ProjectReference Include="..\QuickLogger.Extensions.Wrapper\QuickLogger.Extensions.Wrapper.csproj" /> 35 | </ItemGroup> 36 | 37 | </Project> 38 | -------------------------------------------------------------------------------- /library/wrappers/dotnet/QuickLogger/QuickLogger.Extensions.NetCore/QuickLogger.Extensions.NetCore.csproj: -------------------------------------------------------------------------------- 1 | <Project Sdk="Microsoft.NET.Sdk"> 2 | 3 | <PropertyGroup> 4 | <TargetFramework>netstandard2.0</TargetFramework> 5 | <Description>QuickLogger Dependency Injection Extensions and Standard Logging adapters for ASPNetCore.</Description> 6 | <Version>1.6.7</Version> 7 | <Copyright>Exilon & Turrican</Copyright> 8 | <PackageProjectUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</PackageProjectUrl> 9 | <RepositoryUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</RepositoryUrl> 10 | <GeneratePackageOnBuild>true</GeneratePackageOnBuild> 11 | <PackageTags>Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable</PackageTags> 12 | <RepositoryType>GIT</RepositoryType> 13 | <AssemblyVersion>1.6.7</AssemblyVersion> 14 | <FileVersion>1.6.7</FileVersion> 15 | </PropertyGroup> 16 | 17 | <ItemGroup> 18 | <None Remove="QuickLogger.json" /> 19 | </ItemGroup> 20 | 21 | <ItemGroup> 22 | <Content Include="QuickLogger.json"> 23 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 24 | </Content> 25 | </ItemGroup> 26 | 27 | <ItemGroup> 28 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 29 | <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" /> 30 | <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" /> 31 | <PackageReference Include="Microsoft.Extensions.Logging" Version="5.0.0" /> 32 | </ItemGroup> 33 | 34 | <ItemGroup> 35 | <ProjectReference Include="..\QuickLogger.Extensions.Wrapper\QuickLogger.Extensions.Wrapper.csproj" /> 36 | </ItemGroup> 37 | 38 | </Project> 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>(TState state) 22 | { 23 | if (!(state is IDictionary<string, object>)) 24 | return new Scope<TState>(state); 25 | 26 | try 27 | { 28 | return Scope<TState>.CreateScope(state); 29 | } 30 | catch (Exception e) 31 | { 32 | return new Scope<TState>(state); 33 | } 34 | } 35 | 36 | public bool IsEnabled(LogLevel logLevel) 37 | { 38 | return true; 39 | } 40 | 41 | public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> 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<TState, Exception, string> 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<ILoggerSettingsPathFinder, CoreConfigPathFinder>(); 22 | serviceCollection.AddSingleton<ILoggerService, QuickLoggerService>(); 23 | 24 | serviceCollection.AddSingleton<IScopeInfoProviderService, ScopeInfoProvider>(); 25 | serviceCollection.AddLogging(x => AddLogger(x, serviceCollection.BuildServiceProvider().GetService<ILoggerService>())); 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<string, QuickLoggerAdapter> _loggers = new ConcurrentDictionary<string, QuickLoggerAdapter>(); 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<TState> : 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<IDictionary<string, object>>(state as IDictionary<string, object>); 24 | 25 | CallContext<Scope<IDictionary<string, object>>>.SetData(scope.Id, scope); 26 | 27 | return scope; 28 | } 29 | 30 | 31 | public void Dispose() 32 | { 33 | CallContext<Scope<IDictionary<string, object>>>.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<Scope<IDictionary<string, object>>>.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 | <Project Sdk="Microsoft.NET.Sdk"> 2 | 3 | <PropertyGroup> 4 | <TargetFramework>netstandard2.0</TargetFramework> 5 | <Version>1.6.5</Version> 6 | <Description>QuickLogger Wrapper for .NET and DotNetCore</Description> 7 | <Copyright>Exilon & Turric4n</Copyright> 8 | <PackageProjectUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</PackageProjectUrl> 9 | <RepositoryUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</RepositoryUrl> 10 | <RepositoryType>GIT</RepositoryType> 11 | <GeneratePackageOnBuild>true</GeneratePackageOnBuild> 12 | <PackageTags>Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable</PackageTags> 13 | <AssemblyVersion>1.6.5</AssemblyVersion> 14 | <FileVersion>1.6.5</FileVersion> 15 | </PropertyGroup> 16 | 17 | <ItemGroup> 18 | <None Remove="QuickLogger.json" /> 19 | </ItemGroup> 20 | 21 | <ItemGroup> 22 | <Content Include="QuickLogger.json"> 23 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 24 | </Content> 25 | </ItemGroup> 26 | 27 | <ItemGroup> 28 | <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> 29 | </ItemGroup> 30 | 31 | <ItemGroup> 32 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 33 | </ItemGroup> 34 | 35 | <ItemGroup> 36 | <ProjectReference Include="..\QuickLogger.NetStandard.Abstractions\QuickLogger.NetStandard.Abstractions.csproj" /> 37 | <ProjectReference Include="..\QuickLogger\QuickLogger.NetStandard.csproj" /> 38 | </ItemGroup> 39 | 40 | </Project> 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<string, object> GetProviderInfo(); 15 | void SetProviderInfo(Dictionary<string, object> 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<ILoggerProvider> 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<EventType> LOG_ONLYERRORS = new HashSet<EventType>() {EventType.etHeader, EventType.etInfo, EventType.etError, EventType.etCritical, EventType.etException }; 12 | public static HashSet<EventType> LOG_ERRORSANDWARNINGS = new HashSet<EventType>() { EventType.etInfo, EventType.etSuccess, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException }; 13 | public static HashSet<EventType> LOG_BASIC = new HashSet<EventType>() { EventType.etHeader, EventType.etInfo, EventType.etSuccess, EventType.etDone, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException, EventType.etCustom1, EventType.etCustom2 }; 14 | public static HashSet<EventType> LOG_ALL = new HashSet<EventType>() { 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<EventType> LOG_TRACE = new HashSet<EventType>() { EventType.etHeader, EventType.etInfo, EventType.etSuccess, EventType.etDone, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException, EventType.etTrace }; 16 | public static HashSet<EventType> LOG_DEBUG = new HashSet<EventType>() { EventType.etHeader, EventType.etInfo, EventType.etSuccess, EventType.etDone, EventType.etWarning, EventType.etError, EventType.etCritical, EventType.etException, EventType.etTrace, EventType.etDebug }; 17 | public static HashSet<EventType> LOG_VERBOSE = LOG_ALL; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /library/wrappers/dotnet/QuickLogger/QuickLogger.NetStandard.Abstractions/QuickLogger.NetStandard.Abstractions.csproj: -------------------------------------------------------------------------------- 1 | <Project Sdk="Microsoft.NET.Sdk"> 2 | 3 | <PropertyGroup> 4 | <TargetFramework>netstandard2.0</TargetFramework> 5 | <Platforms>AnyCPU;x64;x86</Platforms> 6 | <GeneratePackageOnBuild>true</GeneratePackageOnBuild> 7 | <Version>1.5.5</Version> 8 | <Authors>Exilon & Turrican</Authors> 9 | <Company>Exilon</Company> 10 | <Description>Abstractions and user interfaces for QuickLogger</Description> 11 | <PackageIconUrl>https://github.com/exilon/QuickLogger/blob/master/QuickLogger.png</PackageIconUrl> 12 | <RepositoryUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</RepositoryUrl> 13 | <RepositoryType>GIT</RepositoryType> 14 | <PackageTags>Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable</PackageTags> 15 | <AssemblyVersion>1.5.5</AssemblyVersion> 16 | <FileVersion>1.5.5</FileVersion> 17 | </PropertyGroup> 18 | 19 | <ItemGroup> 20 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 21 | </ItemGroup> 22 | 23 | 24 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> 25 | <PlatformTarget>AnyCPU</PlatformTarget> 26 | <AllowUnsafeBlocks>false</AllowUnsafeBlocks> 27 | </PropertyGroup> 28 | 29 | </Project> 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<HomeController> _logger; 14 | 15 | public HomeController(ILogger<HomeController> Logger) 16 | { 17 | _logger = Logger; 18 | } 19 | 20 | public IActionResult Index() 21 | { 22 | using var scope = _logger.BeginScope( 23 | new Dictionary<string, object>() 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<Startup>(); 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 | <Project Sdk="Microsoft.NET.Sdk.Web"> 2 | 3 | <PropertyGroup> 4 | <TargetFramework>net5.0</TargetFramework> 5 | <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> 6 | </PropertyGroup> 7 | 8 | <ItemGroup> 9 | <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" /> 10 | </ItemGroup> 11 | 12 | <ItemGroup> 13 | <ProjectReference Include="..\QuickLogger.Extensions.NetCore\QuickLogger.Extensions.NetCore.csproj" /> 14 | </ItemGroup> 15 | 16 | <ItemGroup> 17 | <Content Update="QuickLogger.json"> 18 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 19 | </Content> 20 | </ItemGroup> 21 | 22 | 23 | </Project> 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<string, object>() 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<string, object>() 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<string, object>() 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 | <Project Sdk="Microsoft.NET.Sdk"> 2 | 3 | <PropertyGroup> 4 | <OutputType>Exe</OutputType> 5 | <TargetFramework>net5.0</TargetFramework> 6 | <Platforms>AnyCPU;x86</Platforms> 7 | <PublishRepositoryUrl>true</PublishRepositoryUrl> 8 | <IncludeSymbols>true</IncludeSymbols> 9 | <SymbolPackageFormat>snupkg</SymbolPackageFormat> 10 | </PropertyGroup> 11 | 12 | <ItemGroup> 13 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 14 | </ItemGroup> 15 | 16 | 17 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> 18 | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 19 | </PropertyGroup> 20 | 21 | <ItemGroup> 22 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 23 | <ProjectReference Include="..\QuickLogger\QuickLogger.NetStandard.csproj" /> 24 | </ItemGroup> 25 | 26 | </Project> 27 | -------------------------------------------------------------------------------- /library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetFramework.Console/App.config: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <configuration> 3 | <startup> 4 | <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /> 5 | </startup> 6 | <runtime> 7 | <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 8 | <dependentAssembly> 9 | <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 10 | <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> 11 | </dependentAssembly> 12 | <dependentAssembly> 13 | <assemblyIdentity name="Microsoft.DotNet.PlatformAbstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> 14 | <bindingRedirect oldVersion="0.0.0.0-3.1.6.0" newVersion="3.1.6.0" /> 15 | </dependentAssembly> 16 | <dependentAssembly> 17 | <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 18 | <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> 19 | </dependentAssembly> 20 | <dependentAssembly> 21 | <assemblyIdentity name="Microsoft.Extensions.DependencyModel" publicKeyToken="adb9793829ddae60" culture="neutral" /> 22 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> 23 | </dependentAssembly> 24 | <dependentAssembly> 25 | <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 26 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> 27 | </dependentAssembly> 28 | <dependentAssembly> 29 | <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> 30 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.2" newVersion="5.0.0.2" /> 31 | </dependentAssembly> 32 | <dependentAssembly> 33 | <assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> 34 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> 35 | </dependentAssembly> 36 | </assemblyBinding> 37 | </runtime> 38 | </configuration> 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<string, object>() 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<string, object>() 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 | <?xml version="1.0" encoding="utf-8"?> 2 | <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 | <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 4 | <PropertyGroup> 5 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 6 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 7 | <ProjectGuid>{D9FCD89B-732D-4C24-8FBE-E9CAF35BAC95}</ProjectGuid> 8 | <OutputType>Exe</OutputType> 9 | <RootNamespace>QuickLogger.Sample.NetFramework.Console</RootNamespace> 10 | <AssemblyName>QuickLogger.Sample.NetFramework.Console</AssemblyName> 11 | <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> 12 | <FileAlignment>512</FileAlignment> 13 | <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 14 | <TargetFrameworkProfile /> 15 | </PropertyGroup> 16 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 17 | <PlatformTarget>x64</PlatformTarget> 18 | <DebugSymbols>true</DebugSymbols> 19 | <DebugType>full</DebugType> 20 | <Optimize>false</Optimize> 21 | <OutputPath>bin\Debug\</OutputPath> 22 | <DefineConstants>DEBUG;TRACE</DefineConstants> 23 | <ErrorReport>prompt</ErrorReport> 24 | <WarningLevel>4</WarningLevel> 25 | </PropertyGroup> 26 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 27 | <PlatformTarget>AnyCPU</PlatformTarget> 28 | <DebugType>pdbonly</DebugType> 29 | <Optimize>true</Optimize> 30 | <OutputPath>bin\Release\</OutputPath> 31 | <DefineConstants>TRACE</DefineConstants> 32 | <ErrorReport>prompt</ErrorReport> 33 | <WarningLevel>4</WarningLevel> 34 | </PropertyGroup> 35 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> 36 | <DebugSymbols>true</DebugSymbols> 37 | <OutputPath>bin\x86\Debug\</OutputPath> 38 | <DefineConstants>DEBUG;TRACE</DefineConstants> 39 | <DebugType>full</DebugType> 40 | <PlatformTarget>x86</PlatformTarget> 41 | <ErrorReport>prompt</ErrorReport> 42 | <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 43 | <Prefer32Bit>true</Prefer32Bit> 44 | </PropertyGroup> 45 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> 46 | <OutputPath>bin\x86\Release\</OutputPath> 47 | <DefineConstants>TRACE</DefineConstants> 48 | <Optimize>true</Optimize> 49 | <DebugType>pdbonly</DebugType> 50 | <PlatformTarget>x86</PlatformTarget> 51 | <ErrorReport>prompt</ErrorReport> 52 | <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 53 | <Prefer32Bit>true</Prefer32Bit> 54 | </PropertyGroup> 55 | <ItemGroup> 56 | <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> 57 | <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath> 58 | </Reference> 59 | <Reference Include="Microsoft.DotNet.PlatformAbstractions, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> 60 | <HintPath>..\packages\Microsoft.DotNet.PlatformAbstractions.3.1.6\lib\net45\Microsoft.DotNet.PlatformAbstractions.dll</HintPath> 61 | </Reference> 62 | <Reference Include="Microsoft.Extensions.DependencyModel, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> 63 | <HintPath>..\packages\Microsoft.Extensions.DependencyModel.5.0.0\lib\net461\Microsoft.Extensions.DependencyModel.dll</HintPath> 64 | </Reference> 65 | <Reference Include="NativeLibraryLoader, Version=1.0.12.0, Culture=neutral, processorArchitecture=MSIL"> 66 | <HintPath>..\packages\NativeLibraryLoader.1.0.12\lib\netstandard2.0\NativeLibraryLoader.dll</HintPath> 67 | </Reference> 68 | <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> 69 | <HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> 70 | </Reference> 71 | <Reference Include="System" /> 72 | <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> 73 | <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath> 74 | </Reference> 75 | <Reference Include="System.Core" /> 76 | <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> 77 | <HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath> 78 | </Reference> 79 | <Reference Include="System.Numerics" /> 80 | <Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> 81 | <HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath> 82 | </Reference> 83 | <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> 84 | <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath> 85 | </Reference> 86 | <Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> 87 | <HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath> 88 | <Private>True</Private> 89 | <Private>True</Private> 90 | </Reference> 91 | <Reference Include="System.Text.Encodings.Web, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> 92 | <HintPath>..\packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll</HintPath> 93 | </Reference> 94 | <Reference Include="System.Text.Json, Version=5.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> 95 | <HintPath>..\packages\System.Text.Json.5.0.2\lib\net461\System.Text.Json.dll</HintPath> 96 | </Reference> 97 | <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> 98 | <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath> 99 | </Reference> 100 | <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> 101 | <HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath> 102 | </Reference> 103 | <Reference Include="System.Xml.Linq" /> 104 | <Reference Include="System.Data.DataSetExtensions" /> 105 | <Reference Include="Microsoft.CSharp" /> 106 | <Reference Include="System.Data" /> 107 | <Reference Include="System.Net.Http" /> 108 | <Reference Include="System.Xml" /> 109 | </ItemGroup> 110 | <ItemGroup> 111 | <Compile Include="Program.cs" /> 112 | <Compile Include="Properties\AssemblyInfo.cs" /> 113 | </ItemGroup> 114 | <ItemGroup> 115 | <None Include="App.config" /> 116 | <None Include="packages.config" /> 117 | </ItemGroup> 118 | <ItemGroup> 119 | <ProjectReference Include="..\QuickLogger.NetStandard.Abstractions\QuickLogger.NetStandard.Abstractions.csproj"> 120 | <Project>{943f3c07-0743-4c17-a5af-22027276beaf}</Project> 121 | <Name>QuickLogger.NetStandard.Abstractions</Name> 122 | </ProjectReference> 123 | <ProjectReference Include="..\QuickLogger\QuickLogger.NetStandard.csproj"> 124 | <Project>{8760612a-a649-4752-9cc3-b7af44f14b5a}</Project> 125 | <Name>QuickLogger.NetStandard</Name> 126 | </ProjectReference> 127 | </ItemGroup> 128 | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 129 | </Project> -------------------------------------------------------------------------------- /library/wrappers/dotnet/QuickLogger/QuickLogger.Sample.NetFramework.Console/packages.config: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <packages> 3 | <package id="Microsoft.Bcl.AsyncInterfaces" version="5.0.0" targetFramework="net462" /> 4 | <package id="Microsoft.DotNet.PlatformAbstractions" version="3.1.6" targetFramework="net462" /> 5 | <package id="Microsoft.Extensions.DependencyModel" version="5.0.0" targetFramework="net462" /> 6 | <package id="NativeLibraryLoader" version="1.0.12" targetFramework="net462" /> 7 | <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net462" /> 8 | <package id="System.Buffers" version="4.5.1" targetFramework="net462" /> 9 | <package id="System.Memory" version="4.5.4" targetFramework="net462" /> 10 | <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" /> 11 | <package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net462" /> 12 | <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" /> 13 | <package id="System.Text.Encodings.Web" version="5.0.1" targetFramework="net462" /> 14 | <package id="System.Text.Json" version="5.0.2" targetFramework="net462" /> 15 | <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" /> 16 | <package id="System.ValueTuple" version="4.5.0" targetFramework="net462" /> 17 | </packages> -------------------------------------------------------------------------------- /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<string, object> _testproviderinfo = 19 | new Dictionary<string, object>() { 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 | <?xml version="1.0" encoding="utf-8"?> 2 | <configuration> 3 | <runtime> 4 | <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 5 | <dependentAssembly> 6 | <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/> 7 | <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0"/> 8 | </dependentAssembly> 9 | <dependentAssembly> 10 | <assemblyIdentity name="Microsoft.DotNet.PlatformAbstractions" publicKeyToken="adb9793829ddae60" culture="neutral"/> 11 | <bindingRedirect oldVersion="0.0.0.0-3.1.6.0" newVersion="3.1.6.0"/> 12 | </dependentAssembly> 13 | <dependentAssembly> 14 | <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 15 | <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0"/> 16 | </dependentAssembly> 17 | <dependentAssembly> 18 | <assemblyIdentity name="Microsoft.Extensions.DependencyModel" publicKeyToken="adb9793829ddae60" culture="neutral"/> 19 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/> 20 | </dependentAssembly> 21 | <dependentAssembly> 22 | <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 23 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/> 24 | </dependentAssembly> 25 | <dependentAssembly> 26 | <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/> 27 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.2" newVersion="5.0.0.2"/> 28 | </dependentAssembly> 29 | <dependentAssembly> 30 | <assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/> 31 | <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/> 32 | </dependentAssembly> 33 | </assemblyBinding> 34 | </runtime> 35 | <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/></startup></configuration> 36 | -------------------------------------------------------------------------------- /library/wrappers/dotnet/QuickLogger/QuickLogger.Tests/packages.config: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <packages> 3 | <package id="Microsoft.Bcl.AsyncInterfaces" version="5.0.0" targetFramework="net462" /> 4 | <package id="Microsoft.DotNet.PlatformAbstractions" version="3.1.6" targetFramework="net462" /> 5 | <package id="Microsoft.Extensions.DependencyModel" version="5.0.0" targetFramework="net462" /> 6 | <package id="MSTest.TestAdapter" version="2.2.7" targetFramework="net462" /> 7 | <package id="MSTest.TestFramework" version="2.2.7" targetFramework="net462" /> 8 | <package id="NativeLibraryLoader" version="1.0.12" targetFramework="net462" /> 9 | <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net462" /> 10 | <package id="NUnit" version="3.13.2" targetFramework="net462" /> 11 | <package id="NUnit.Console" version="3.12.0" targetFramework="net462" /> 12 | <package id="NUnit.ConsoleRunner" version="3.12.0" targetFramework="net462" /> 13 | <package id="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net462" /> 14 | <package id="NUnit.Extension.NUnitV2Driver" version="3.9.0" targetFramework="net462" /> 15 | <package id="NUnit.Extension.NUnitV2ResultWriter" version="3.7.0" targetFramework="net462" /> 16 | <package id="NUnit.Extension.TeamCityEventListener" version="1.0.8-beta" targetFramework="net462" /> 17 | <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net462" /> 18 | <package id="System.Buffers" version="4.5.1" targetFramework="net462" /> 19 | <package id="System.Memory" version="4.5.4" targetFramework="net462" /> 20 | <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" /> 21 | <package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net462" /> 22 | <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" /> 23 | <package id="System.Text.Encodings.Web" version="5.0.1" targetFramework="net462" /> 24 | <package id="System.Text.Json" version="5.0.2" targetFramework="net462" /> 25 | <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" /> 26 | <package id="System.ValueTuple" version="4.5.0" targetFramework="net462" requireReinstallation="true" /> 27 | <package id="xunit.abstractions" version="2.0.3" targetFramework="net462" /> 28 | <package id="xunit.assert" version="2.4.1" targetFramework="net462" /> 29 | <package id="xunit.core" version="2.4.1" targetFramework="net462" /> 30 | <package id="xunit.extensibility.core" version="2.4.1" targetFramework="net462" /> 31 | <package id="xunit.extensibility.execution" version="2.4.1" targetFramework="net462" /> 32 | </packages> -------------------------------------------------------------------------------- /library/wrappers/dotnet/QuickLogger/QuickLogger.v3.ncrunchsolution: -------------------------------------------------------------------------------- 1 | <SolutionConfiguration> 2 | <Settings> 3 | <AllowParallelTestExecution>False</AllowParallelTestExecution> 4 | <SolutionConfigured>True</SolutionConfigured> 5 | </Settings> 6 | </SolutionConfiguration> -------------------------------------------------------------------------------- /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 | <Project Sdk="Microsoft.NET.Sdk"> 2 | 3 | <PropertyGroup> 4 | <TargetFramework>netstandard2.0</TargetFramework> 5 | <Platforms>AnyCPU;x64;x86</Platforms> 6 | <Version>1.6.1</Version> 7 | <Description>QuickLogger is a cross-platform-native, Testable and Injectable multi-provider logging library for .NET ,NetCore, Object Paascal C, PHP, Python, Golang and more!</Description> 8 | <Copyright>Exilon & Turric4n</Copyright> 9 | <PackageProjectUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</PackageProjectUrl> 10 | <GeneratePackageOnBuild>true</GeneratePackageOnBuild> 11 | <AssemblyVersion>1.6.1</AssemblyVersion> 12 | <FileVersion>1.6.1</FileVersion> 13 | <RepositoryUrl>https://github.com/exilon/QuickLogger/tree/master/library/wrappers/dotnet/QuickLogger</RepositoryUrl> 14 | <PackageTags>Logger, Native, NetStandard, C++, C#, Delphi, CrossPlatform, Injectable</PackageTags> 15 | <RepositoryType>GIT</RepositoryType> 16 | <PublishRepositoryUrl>true</PublishRepositoryUrl> 17 | <IncludeSymbols>true</IncludeSymbols> 18 | <SymbolPackageFormat>snupkg</SymbolPackageFormat> 19 | <IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindows> 20 | <IsOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">true</IsOSX> 21 | <IsLinux Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">true</IsLinux> 22 | </PropertyGroup> 23 | 24 | <PropertyGroup Condition="'$(IsWindows)'=='true'"> 25 | <DefineConstants>Windows</DefineConstants> 26 | </PropertyGroup> 27 | <PropertyGroup Condition="'$(IsOSX)'=='true'"> 28 | <DefineConstants>OSX</DefineConstants> 29 | </PropertyGroup> 30 | <PropertyGroup Condition="'$(IsLinux)'=='true'"> 31 | <DefineConstants>Linux</DefineConstants> 32 | </PropertyGroup> 33 | 34 | <ItemGroup> 35 | <PackageReference Include="libquickloggernative.redist" Version="1.5.3"> 36 | <PrivateAssets>all</PrivateAssets> 37 | <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> 38 | </PackageReference> 39 | <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" /> 40 | </ItemGroup> 41 | 42 | 43 | 44 | 45 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> 46 | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 47 | </PropertyGroup> 48 | 49 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'"> 50 | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 51 | </PropertyGroup> 52 | 53 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> 54 | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 55 | <PlatformTarget>AnyCPU</PlatformTarget> 56 | </PropertyGroup> 57 | 58 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> 59 | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 60 | </PropertyGroup> 61 | 62 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'"> 63 | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 64 | </PropertyGroup> 65 | 66 | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> 67 | <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 68 | </PropertyGroup> 69 | 70 | <ItemGroup> 71 | <PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> 72 | <PackageReference Include="NativeLibraryLoader" Version="1.0.12" /> 73 | <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> 74 | </ItemGroup> 75 | 76 | <ItemGroup> 77 | <ProjectReference Include="..\QuickLogger.NetStandard.Abstractions\QuickLogger.NetStandard.Abstractions.csproj" /> 78 | </ItemGroup> 79 | 80 | 81 | 82 | </Project> 83 | -------------------------------------------------------------------------------- /library/wrappers/dotnet/QuickLogger/QuickLogger/QuickLogger.NetStandard.nuspec: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!--Automatically generated--> 3 | <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 4 | <metadata minClientVersion="2.12"> 5 | <id>QuickLogger.NetStandard</id> 6 | <title>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 | <UseAppBundle Value="False"/> 16 | <ResourceType Value="res"/> 17 | </General> 18 | <BuildModes Count="1"> 19 | <Item1 Name="Default" Default="True"/> 20 | </BuildModes> 21 | <PublishOptions> 22 | <Version Value="2"/> 23 | </PublishOptions> 24 | <RunParams> 25 | <FormatVersion Value="2"/> 26 | <Modes Count="0"/> 27 | </RunParams> 28 | <RequiredPackages Count="1"> 29 | <Item1> 30 | <PackageName Value="indylaz"/> 31 | </Item1> 32 | </RequiredPackages> 33 | <Units Count="1"> 34 | <Unit0> 35 | <Filename Value="ConsoleLogger.lpr"/> 36 | <IsPartOfProject Value="True"/> 37 | </Unit0> 38 | </Units> 39 | </ProjectOptions> 40 | <CompilerOptions> 41 | <Version Value="11"/> 42 | <PathDelim Value="\"/> 43 | <Target> 44 | <Filename Value="bin\$(TargetCPU)-$(TargetOS)\ConsoleLogger"/> 45 | </Target> 46 | <SearchPaths> 47 | <IncludeFiles Value="$(ProjOutDir)"/> 48 | <OtherUnitFiles Value="..\..\..\..\QuickLogger;..\..\..\..\QuickLib"/> 49 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 50 | </SearchPaths> 51 | <CodeGeneration> 52 | <TargetCPU Value="x86_64"/> 53 | <TargetOS Value="linux"/> 54 | </CodeGeneration> 55 | </CompilerOptions> 56 | <Debugging> 57 | <Exceptions Count="3"> 58 | <Item1> 59 | <Name Value="EAbort"/> 60 | </Item1> 61 | <Item2> 62 | <Name Value="ECodetoolError"/> 63 | </Item2> 64 | <Item3> 65 | <Name Value="EFOpenError"/> 66 | </Item3> 67 | </Exceptions> 68 | </Debugging> 69 | </CONFIG> 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 | <?xml version="1.0" encoding="UTF-8"?> 2 | <CONFIG> 3 | <ProjectOptions> 4 | <Version Value="11"/> 5 | <PathDelim Value="\"/> 6 | <General> 7 | <Flags> 8 | <MainUnitHasCreateFormStatements Value="False"/> 9 | <MainUnitHasTitleStatement Value="False"/> 10 | <MainUnitHasScaledStatement Value="False"/> 11 | </Flags> 12 | <SessionStorage Value="InProjectDir"/> 13 | <MainUnit Value="0"/> 14 | <Title Value="ConsoleLogger"/> 15 | <UseAppBundle Value="False"/> 16 | <ResourceType Value="res"/> 17 | </General> 18 | <BuildModes Count="1"> 19 | <Item1 Name="Default" Default="True"/> 20 | </BuildModes> 21 | <PublishOptions> 22 | <Version Value="2"/> 23 | </PublishOptions> 24 | <RunParams> 25 | <FormatVersion Value="2"/> 26 | <Modes Count="0"/> 27 | </RunParams> 28 | <RequiredPackages Count="1"> 29 | <Item1> 30 | <PackageName Value="indylaz"/> 31 | </Item1> 32 | </RequiredPackages> 33 | <Units Count="1"> 34 | <Unit0> 35 | <Filename Value="ConsoleLogger.lpr"/> 36 | <IsPartOfProject Value="True"/> 37 | </Unit0> 38 | </Units> 39 | </ProjectOptions> 40 | <CompilerOptions> 41 | <Version Value="11"/> 42 | <PathDelim Value="\"/> 43 | <Target> 44 | <Filename Value="ConsoleLogger"/> 45 | </Target> 46 | <SearchPaths> 47 | <IncludeFiles Value="$(ProjOutDir)"/> 48 | <OtherUnitFiles Value="..\..\..\..\QuickLogger;..\..\..\..\QuickLib"/> 49 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 50 | </SearchPaths> 51 | <CodeGeneration> 52 | <TargetCPU Value="x86_64"/> 53 | <TargetOS Value="linux"/> 54 | </CodeGeneration> 55 | </CompilerOptions> 56 | <Debugging> 57 | <Exceptions Count="3"> 58 | <Item1> 59 | <Name Value="EAbort"/> 60 | </Item1> 61 | <Item2> 62 | <Name Value="ECodetoolError"/> 63 | </Item2> 64 | <Item3> 65 | <Name Value="EFOpenError"/> 66 | </Item3> 67 | </Exceptions> 68 | </Debugging> 69 | </CONFIG> 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 | <?xml version="1.0" encoding="UTF-8"?> 2 | <CONFIG> 3 | <ProjectOptions> 4 | <Version Value="11"/> 5 | <PathDelim Value="\"/> 6 | <General> 7 | <Flags> 8 | <MainUnitHasCreateFormStatements Value="False"/> 9 | <MainUnitHasScaledStatement Value="False"/> 10 | </Flags> 11 | <SessionStorage Value="InProjectDir"/> 12 | <MainUnit Value="0"/> 13 | <Title Value="MultiLogger"/> 14 | <UseAppBundle Value="False"/> 15 | <ResourceType Value="res"/> 16 | </General> 17 | <VersionInfo> 18 | <UseVersionInfo Value="True"/> 19 | <MajorVersionNr Value="1"/> 20 | <MinorVersionNr Value="1"/> 21 | </VersionInfo> 22 | <BuildModes Count="1"> 23 | <Item1 Name="Default" Default="True"/> 24 | </BuildModes> 25 | <PublishOptions> 26 | <Version Value="2"/> 27 | </PublishOptions> 28 | <RunParams> 29 | <FormatVersion Value="2"/> 30 | <Modes Count="0"/> 31 | </RunParams> 32 | <RequiredPackages Count="1"> 33 | <Item1> 34 | <PackageName Value="indylaz"/> 35 | </Item1> 36 | </RequiredPackages> 37 | <Units Count="1"> 38 | <Unit0> 39 | <Filename Value="MultiLogger.pas"/> 40 | <IsPartOfProject Value="True"/> 41 | </Unit0> 42 | </Units> 43 | </ProjectOptions> 44 | <CompilerOptions> 45 | <Version Value="11"/> 46 | <PathDelim Value="\"/> 47 | <Target> 48 | <Filename Value="bin\$(TargetCPU)-$(TargetOS)\MultiLogger"/> 49 | </Target> 50 | <SearchPaths> 51 | <IncludeFiles Value="$(ProjOutDir)"/> 52 | <Libraries Value="..\..\..\..\QuickLogger;..\..\..\..\QuickLib"/> 53 | <OtherUnitFiles Value="..\..\..\..\QuickLogger;..\..\..\..\QuickLib"/> 54 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 55 | </SearchPaths> 56 | <CodeGeneration> 57 | <TargetCPU Value="x86_64"/> 58 | </CodeGeneration> 59 | </CompilerOptions> 60 | <Debugging> 61 | <Exceptions Count="3"> 62 | <Item1> 63 | <Name Value="EAbort"/> 64 | </Item1> 65 | <Item2> 66 | <Name Value="ECodetoolError"/> 67 | </Item2> 68 | <Item3> 69 | <Name Value="EFOpenError"/> 70 | </Item3> 71 | </Exceptions> 72 | </Debugging> 73 | </CONFIG> 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 <Enter> 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 <Enter> 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 | --------------------------------------------------------------------------------