[{"data":1,"prerenderedAt":3152},["ShallowReactive",2],{"doc-\u002Fexamples\u002Fpython-log-file-analyzer-example":3},{"id":4,"title":5,"body":6,"description":3145,"extension":3146,"meta":3147,"navigation":88,"path":3148,"seo":3149,"stem":3150,"__hash__":3151},"content\u002Fexamples\u002Fpython-log-file-analyzer-example.md","Python Log File Analyzer Example",{"type":7,"value":8,"toc":3101},"minimark",[9,13,17,33,47,52,55,425,428,447,450,454,457,477,481,484,487,498,501,518,522,525,566,578,582,588,591,599,602,620,624,629,636,718,721,745,749,752,839,849,855,862,957,960,971,977,1160,1167,1173,1177,1180,1186,1416,1422,1477,1481,1484,1839,1843,1849,1855,1858,1862,1865,1869,1875,1878,1886,1890,1893,2056,2059,2063,2066,2200,2207,2218,2221,2459,2466,2469,2778,2782,2785,2788,2791,2816,2820,2823,2827,2833,2836,2889,2892,2903,2910,2914,2920,2924,2933,2936,2956,2960,2968,2971,2981,2987,2992,2996,2999,3002,3006,3010,3016,3020,3023,3027,3036,3040,3043,3047,3083,3086,3097],[10,11,5],"h1",{"id":12},"python-log-file-analyzer-example",[14,15,16],"p",{},"A log file analyzer is a good beginner project because it combines several useful Python skills in one script.",[14,18,19,20,24,25,28,29,32],{},"In this example, you will read a log file, look for important lines such as ",[21,22,23],"code",{},"ERROR",", ",[21,26,27],{},"WARNING",", and ",[21,30,31],{},"INFO",", count them, and print a simple summary.",[14,34,35,36,41,42,46],{},"This page focuses on building one practical script. If you want a separate lesson on file handling, see ",[37,38,40],"a",{"href":39},"\u002Fhow-to\u002Fhow-to-read-a-file-in-python\u002F","how to read a file in Python"," or ",[37,43,45],{"href":44},"\u002Fhow-to\u002Fhow-to-read-a-file-line-by-line-in-python\u002F","how to read a file line by line in Python",".",[48,49,51],"h2",{"id":50},"quick-working-version","Quick working version",[14,53,54],{},"If you want a simple version first, start with this:",[56,57,62],"pre",{"className":58,"code":59,"language":60,"meta":61,"style":61},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","from collections import Counter\n\nlog_file = \"app.log\"\ncounts = Counter()\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n        if \"ERROR\" in line:\n            counts[\"ERROR\"] += 1\n        elif \"WARNING\" in line:\n            counts[\"WARNING\"] += 1\n        elif \"INFO\" in line:\n            counts[\"INFO\"] += 1\n\nprint(\"Log summary\")\nfor level, total in counts.items():\n    print(f\"{level}: {total}\")\n","python","",[21,63,64,83,90,111,127,132,187,203,221,240,265,283,302,319,338,343,361,388],{"__ignoreMap":61},[65,66,69,73,77,80],"span",{"class":67,"line":68},"line",1,[65,70,72],{"class":71},"sVHd0","from",[65,74,76],{"class":75},"su5hD"," collections ",[65,78,79],{"class":71},"import",[65,81,82],{"class":75}," Counter\n",[65,84,86],{"class":67,"line":85},2,[65,87,89],{"emptyLinePlaceholder":88},true,"\n",[65,91,93,96,100,104,108],{"class":67,"line":92},3,[65,94,95],{"class":75},"log_file ",[65,97,99],{"class":98},"smGrS","=",[65,101,103],{"class":102},"sjJ54"," \"",[65,105,107],{"class":106},"s_sjI","app.log",[65,109,110],{"class":102},"\"\n",[65,112,114,117,119,123],{"class":67,"line":113},4,[65,115,116],{"class":75},"counts ",[65,118,99],{"class":98},[65,120,122],{"class":121},"slqww"," Counter",[65,124,126],{"class":125},"sP7_E","()\n",[65,128,130],{"class":67,"line":129},5,[65,131,89],{"emptyLinePlaceholder":88},[65,133,135,138,142,145,148,151,153,156,159,161,165,167,169,172,174,177,180,184],{"class":67,"line":134},6,[65,136,137],{"class":71},"with",[65,139,141],{"class":140},"sptTA"," open",[65,143,144],{"class":125},"(",[65,146,147],{"class":121},"log_file",[65,149,150],{"class":125},",",[65,152,103],{"class":102},[65,154,155],{"class":106},"r",[65,157,158],{"class":102},"\"",[65,160,150],{"class":125},[65,162,164],{"class":163},"s99_P"," encoding",[65,166,99],{"class":98},[65,168,158],{"class":102},[65,170,171],{"class":106},"utf-8",[65,173,158],{"class":102},[65,175,176],{"class":125},")",[65,178,179],{"class":71}," as",[65,181,183],{"class":182},"sMMDD"," file",[65,185,186],{"class":125},":\n",[65,188,190,193,196,199,201],{"class":67,"line":189},7,[65,191,192],{"class":71},"    for",[65,194,195],{"class":75}," line ",[65,197,198],{"class":71},"in",[65,200,183],{"class":182},[65,202,186],{"class":125},[65,204,206,209,211,214,216,219],{"class":67,"line":205},8,[65,207,208],{"class":75},"        line ",[65,210,99],{"class":98},[65,212,213],{"class":75}," line",[65,215,46],{"class":125},[65,217,218],{"class":121},"strip",[65,220,126],{"class":125},[65,222,224,227,229,231,233,236,238],{"class":67,"line":223},9,[65,225,226],{"class":71},"        if",[65,228,103],{"class":102},[65,230,23],{"class":106},[65,232,158],{"class":102},[65,234,235],{"class":98}," in",[65,237,213],{"class":75},[65,239,186],{"class":125},[65,241,243,246,249,251,253,255,258,261],{"class":67,"line":242},10,[65,244,245],{"class":75},"            counts",[65,247,248],{"class":125},"[",[65,250,158],{"class":102},[65,252,23],{"class":106},[65,254,158],{"class":102},[65,256,257],{"class":125},"]",[65,259,260],{"class":98}," +=",[65,262,264],{"class":263},"srdBf"," 1\n",[65,266,268,271,273,275,277,279,281],{"class":67,"line":267},11,[65,269,270],{"class":71},"        elif",[65,272,103],{"class":102},[65,274,27],{"class":106},[65,276,158],{"class":102},[65,278,235],{"class":98},[65,280,213],{"class":75},[65,282,186],{"class":125},[65,284,286,288,290,292,294,296,298,300],{"class":67,"line":285},12,[65,287,245],{"class":75},[65,289,248],{"class":125},[65,291,158],{"class":102},[65,293,27],{"class":106},[65,295,158],{"class":102},[65,297,257],{"class":125},[65,299,260],{"class":98},[65,301,264],{"class":263},[65,303,305,307,309,311,313,315,317],{"class":67,"line":304},13,[65,306,270],{"class":71},[65,308,103],{"class":102},[65,310,31],{"class":106},[65,312,158],{"class":102},[65,314,235],{"class":98},[65,316,213],{"class":75},[65,318,186],{"class":125},[65,320,322,324,326,328,330,332,334,336],{"class":67,"line":321},14,[65,323,245],{"class":75},[65,325,248],{"class":125},[65,327,158],{"class":102},[65,329,31],{"class":106},[65,331,158],{"class":102},[65,333,257],{"class":125},[65,335,260],{"class":98},[65,337,264],{"class":263},[65,339,341],{"class":67,"line":340},15,[65,342,89],{"emptyLinePlaceholder":88},[65,344,346,349,351,353,356,358],{"class":67,"line":345},16,[65,347,348],{"class":140},"print",[65,350,144],{"class":125},[65,352,158],{"class":102},[65,354,355],{"class":106},"Log summary",[65,357,158],{"class":102},[65,359,360],{"class":125},")\n",[65,362,364,367,370,372,375,377,380,382,385],{"class":67,"line":363},17,[65,365,366],{"class":71},"for",[65,368,369],{"class":75}," level",[65,371,150],{"class":125},[65,373,374],{"class":75}," total ",[65,376,198],{"class":71},[65,378,379],{"class":75}," counts",[65,381,46],{"class":125},[65,383,384],{"class":121},"items",[65,386,387],{"class":125},"():\n",[65,389,391,394,396,400,402,405,408,411,414,416,419,421,423],{"class":67,"line":390},18,[65,392,393],{"class":140},"    print",[65,395,144],{"class":125},[65,397,399],{"class":398},"sbsja","f",[65,401,158],{"class":106},[65,403,404],{"class":263},"{",[65,406,407],{"class":121},"level",[65,409,410],{"class":263},"}",[65,412,413],{"class":106},": ",[65,415,404],{"class":263},[65,417,418],{"class":121},"total",[65,420,410],{"class":263},[65,422,158],{"class":106},[65,424,360],{"class":125},[14,426,427],{},"This version:",[429,430,431,435,438,441,444],"ul",{},[432,433,434],"li",{},"opens the file",[432,436,437],{},"reads it one line at a time",[432,439,440],{},"checks each line for common log levels",[432,442,443],{},"counts matches",[432,445,446],{},"prints the totals",[14,448,449],{},"Next, let’s build it step by step so the code is easier to understand.",[48,451,453],{"id":452},"what-this-example-builds","What this example builds",[14,455,456],{},"This script will:",[429,458,459,462,471,474],{},[432,460,461],{},"Read a text log file line by line",[432,463,464,465,24,467,28,469],{},"Look for common log levels such as ",[21,466,23],{},[21,468,27],{},[21,470,31],{},[432,472,473],{},"Count how many times each level appears",[432,475,476],{},"Print a simple report at the end",[48,478,480],{"id":479},"what-a-log-file-is","What a log file is",[14,482,483],{},"A log file is a text file created by a program.",[14,485,486],{},"It usually stores messages about what the program did, such as:",[429,488,489,492,495],{},[432,490,491],{},"normal activity",[432,493,494],{},"warnings",[432,496,497],{},"errors",[14,499,500],{},"For example, a program might write messages like:",[429,502,503,508,513],{},[432,504,505],{},[21,506,507],{},"INFO: User logged in",[432,509,510],{},[21,511,512],{},"WARNING: Disk space is low",[432,514,515],{},[21,516,517],{},"ERROR: Could not connect to database",[48,519,521],{"id":520},"skills-used-in-this-project","Skills used in this project",[14,523,524],{},"This example uses several basic Python skills:",[429,526,527,536,542,551,557,563],{},[432,528,529,530],{},"Opening a file with ",[37,531,533],{"href":532},"\u002Freference\u002Fpython-open-function-explained\u002F",[21,534,535],{},"open()",[432,537,538,539,541],{},"Looping through lines with a ",[21,540,366],{}," loop",[432,543,544,545],{},"Cleaning text with ",[37,546,548],{"href":547},"\u002Freference\u002Fpython-string-strip-method\u002F",[21,549,550],{},"strip()",[432,552,553,554,556],{},"Checking text with the ",[21,555,198],{}," operator",[432,558,559,560],{},"Counting values with a dictionary or ",[21,561,562],{},"Counter",[432,564,565],{},"Printing readable output",[14,567,568,569,573,574,46],{},"If dictionaries are new to you, see ",[37,570,572],{"href":571},"\u002Flearn\u002Fpython-dictionaries-explained\u002F","Python dictionaries explained",". If loops are new, see ",[37,575,577],{"href":576},"\u002Flearn\u002Fpython-for-loops-explained\u002F","Python for loops explained",[48,579,581],{"id":580},"sample-log-file-input","Sample log file input",[14,583,584,585,587],{},"Create a file named ",[21,586,107],{}," in the same folder as your Python script.",[14,589,590],{},"Put this sample text inside it:",[56,592,597],{"className":593,"code":595,"language":596,"meta":61},[594],"language-text","INFO: Application started\nINFO: User login successful\nWARNING: Disk space is getting low\nERROR: Could not connect to server\nINFO: Retrying connection\nERROR: Connection failed again\n","text",[21,598,595],{"__ignoreMap":61},[14,600,601],{},"This file contains:",[429,603,604,610,615],{},[432,605,606,607,609],{},"several ",[21,608,31],{}," lines",[432,611,612,613,213],{},"one ",[21,614,27],{},[432,616,617,618,609],{},"two ",[21,619,23],{},[48,621,623],{"id":622},"build-the-analyzer-step-by-step","Build the analyzer step by step",[625,626,628],"h3",{"id":627},"_1-open-the-file-safely","1. Open the file safely",[14,630,631,632,635],{},"Use ",[21,633,634],{},"with open(...)"," to open the file.",[56,637,639],{"className":58,"code":638,"language":60,"meta":61,"style":61},"log_file = \"app.log\"\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        print(line)\n",[21,640,641,653,657,695,707],{"__ignoreMap":61},[65,642,643,645,647,649,651],{"class":67,"line":68},[65,644,95],{"class":75},[65,646,99],{"class":98},[65,648,103],{"class":102},[65,650,107],{"class":106},[65,652,110],{"class":102},[65,654,655],{"class":67,"line":85},[65,656,89],{"emptyLinePlaceholder":88},[65,658,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693],{"class":67,"line":92},[65,660,137],{"class":71},[65,662,141],{"class":140},[65,664,144],{"class":125},[65,666,147],{"class":121},[65,668,150],{"class":125},[65,670,103],{"class":102},[65,672,155],{"class":106},[65,674,158],{"class":102},[65,676,150],{"class":125},[65,678,164],{"class":163},[65,680,99],{"class":98},[65,682,158],{"class":102},[65,684,171],{"class":106},[65,686,158],{"class":102},[65,688,176],{"class":125},[65,690,179],{"class":71},[65,692,183],{"class":182},[65,694,186],{"class":125},[65,696,697,699,701,703,705],{"class":67,"line":113},[65,698,192],{"class":71},[65,700,195],{"class":75},[65,702,198],{"class":71},[65,704,183],{"class":182},[65,706,186],{"class":125},[65,708,709,712,714,716],{"class":67,"line":129},[65,710,711],{"class":140},"        print",[65,713,144],{"class":125},[65,715,67],{"class":121},[65,717,360],{"class":125},[14,719,720],{},"Why this works:",[429,722,723,728,734,740],{},[432,724,725,727],{},[21,726,535],{}," opens the file for reading",[432,729,730,733],{},[21,731,732],{},"\"r\""," means read mode",[432,735,736,739],{},[21,737,738],{},"encoding=\"utf-8\""," is a safe choice for text files",[432,741,742,744],{},[21,743,137],{}," closes the file automatically when finished",[625,746,748],{"id":747},"_2-loop-over-each-line","2. Loop over each line",[14,750,751],{},"A file can be looped through directly.",[56,753,755],{"className":58,"code":754,"language":60,"meta":61,"style":61},"log_file = \"app.log\"\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        print(repr(line))\n",[21,756,757,769,773,811,823],{"__ignoreMap":61},[65,758,759,761,763,765,767],{"class":67,"line":68},[65,760,95],{"class":75},[65,762,99],{"class":98},[65,764,103],{"class":102},[65,766,107],{"class":106},[65,768,110],{"class":102},[65,770,771],{"class":67,"line":85},[65,772,89],{"emptyLinePlaceholder":88},[65,774,775,777,779,781,783,785,787,789,791,793,795,797,799,801,803,805,807,809],{"class":67,"line":92},[65,776,137],{"class":71},[65,778,141],{"class":140},[65,780,144],{"class":125},[65,782,147],{"class":121},[65,784,150],{"class":125},[65,786,103],{"class":102},[65,788,155],{"class":106},[65,790,158],{"class":102},[65,792,150],{"class":125},[65,794,164],{"class":163},[65,796,99],{"class":98},[65,798,158],{"class":102},[65,800,171],{"class":106},[65,802,158],{"class":102},[65,804,176],{"class":125},[65,806,179],{"class":71},[65,808,183],{"class":182},[65,810,186],{"class":125},[65,812,813,815,817,819,821],{"class":67,"line":113},[65,814,192],{"class":71},[65,816,195],{"class":75},[65,818,198],{"class":71},[65,820,183],{"class":182},[65,822,186],{"class":125},[65,824,825,827,829,832,834,836],{"class":67,"line":129},[65,826,711],{"class":140},[65,828,144],{"class":125},[65,830,831],{"class":140},"repr",[65,833,144],{"class":125},[65,835,67],{"class":121},[65,837,838],{"class":125},"))\n",[14,840,841,842,845,846,46],{},"Using ",[21,843,844],{},"repr(line)"," helps you see hidden characters like ",[21,847,848],{},"\\n",[625,850,852,853],{"id":851},"_3-remove-extra-newline-characters-with-strip","3. Remove extra newline characters with ",[21,854,550],{},[14,856,857,858,46],{},"Each line usually ends with a newline character. You can remove it with ",[37,859,860],{"href":547},[21,861,550],{},[56,863,865],{"className":58,"code":864,"language":60,"meta":61,"style":61},"log_file = \"app.log\"\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n        print(line)\n",[21,866,867,879,883,921,933,947],{"__ignoreMap":61},[65,868,869,871,873,875,877],{"class":67,"line":68},[65,870,95],{"class":75},[65,872,99],{"class":98},[65,874,103],{"class":102},[65,876,107],{"class":106},[65,878,110],{"class":102},[65,880,881],{"class":67,"line":85},[65,882,89],{"emptyLinePlaceholder":88},[65,884,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919],{"class":67,"line":92},[65,886,137],{"class":71},[65,888,141],{"class":140},[65,890,144],{"class":125},[65,892,147],{"class":121},[65,894,150],{"class":125},[65,896,103],{"class":102},[65,898,155],{"class":106},[65,900,158],{"class":102},[65,902,150],{"class":125},[65,904,164],{"class":163},[65,906,99],{"class":98},[65,908,158],{"class":102},[65,910,171],{"class":106},[65,912,158],{"class":102},[65,914,176],{"class":125},[65,916,179],{"class":71},[65,918,183],{"class":182},[65,920,186],{"class":125},[65,922,923,925,927,929,931],{"class":67,"line":113},[65,924,192],{"class":71},[65,926,195],{"class":75},[65,928,198],{"class":71},[65,930,183],{"class":182},[65,932,186],{"class":125},[65,934,935,937,939,941,943,945],{"class":67,"line":129},[65,936,208],{"class":75},[65,938,99],{"class":98},[65,940,213],{"class":75},[65,942,46],{"class":125},[65,944,218],{"class":121},[65,946,126],{"class":125},[65,948,949,951,953,955],{"class":67,"line":134},[65,950,711],{"class":140},[65,952,144],{"class":125},[65,954,67],{"class":121},[65,956,360],{"class":125},[14,958,959],{},"This makes the line cleaner before you check its content.",[625,961,963,964,24,966,968,969],{"id":962},"_4-check-whether-a-line-contains-error-warning-or-info","4. Check whether a line contains ",[21,965,23],{},[21,967,27],{},", or ",[21,970,31],{},[14,972,973,974,976],{},"Now check each cleaned line with the ",[21,975,198],{}," operator.",[56,978,980],{"className":58,"code":979,"language":60,"meta":61,"style":61},"log_file = \"app.log\"\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n\n        if \"ERROR\" in line:\n            print(\"Found an error line\")\n        elif \"WARNING\" in line:\n            print(\"Found a warning line\")\n        elif \"INFO\" in line:\n            print(\"Found an info line\")\n",[21,981,982,994,998,1036,1048,1062,1066,1082,1098,1114,1129,1145],{"__ignoreMap":61},[65,983,984,986,988,990,992],{"class":67,"line":68},[65,985,95],{"class":75},[65,987,99],{"class":98},[65,989,103],{"class":102},[65,991,107],{"class":106},[65,993,110],{"class":102},[65,995,996],{"class":67,"line":85},[65,997,89],{"emptyLinePlaceholder":88},[65,999,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034],{"class":67,"line":92},[65,1001,137],{"class":71},[65,1003,141],{"class":140},[65,1005,144],{"class":125},[65,1007,147],{"class":121},[65,1009,150],{"class":125},[65,1011,103],{"class":102},[65,1013,155],{"class":106},[65,1015,158],{"class":102},[65,1017,150],{"class":125},[65,1019,164],{"class":163},[65,1021,99],{"class":98},[65,1023,158],{"class":102},[65,1025,171],{"class":106},[65,1027,158],{"class":102},[65,1029,176],{"class":125},[65,1031,179],{"class":71},[65,1033,183],{"class":182},[65,1035,186],{"class":125},[65,1037,1038,1040,1042,1044,1046],{"class":67,"line":113},[65,1039,192],{"class":71},[65,1041,195],{"class":75},[65,1043,198],{"class":71},[65,1045,183],{"class":182},[65,1047,186],{"class":125},[65,1049,1050,1052,1054,1056,1058,1060],{"class":67,"line":129},[65,1051,208],{"class":75},[65,1053,99],{"class":98},[65,1055,213],{"class":75},[65,1057,46],{"class":125},[65,1059,218],{"class":121},[65,1061,126],{"class":125},[65,1063,1064],{"class":67,"line":134},[65,1065,89],{"emptyLinePlaceholder":88},[65,1067,1068,1070,1072,1074,1076,1078,1080],{"class":67,"line":189},[65,1069,226],{"class":71},[65,1071,103],{"class":102},[65,1073,23],{"class":106},[65,1075,158],{"class":102},[65,1077,235],{"class":98},[65,1079,213],{"class":75},[65,1081,186],{"class":125},[65,1083,1084,1087,1089,1091,1094,1096],{"class":67,"line":205},[65,1085,1086],{"class":140},"            print",[65,1088,144],{"class":125},[65,1090,158],{"class":102},[65,1092,1093],{"class":106},"Found an error line",[65,1095,158],{"class":102},[65,1097,360],{"class":125},[65,1099,1100,1102,1104,1106,1108,1110,1112],{"class":67,"line":223},[65,1101,270],{"class":71},[65,1103,103],{"class":102},[65,1105,27],{"class":106},[65,1107,158],{"class":102},[65,1109,235],{"class":98},[65,1111,213],{"class":75},[65,1113,186],{"class":125},[65,1115,1116,1118,1120,1122,1125,1127],{"class":67,"line":242},[65,1117,1086],{"class":140},[65,1119,144],{"class":125},[65,1121,158],{"class":102},[65,1123,1124],{"class":106},"Found a warning line",[65,1126,158],{"class":102},[65,1128,360],{"class":125},[65,1130,1131,1133,1135,1137,1139,1141,1143],{"class":67,"line":267},[65,1132,270],{"class":71},[65,1134,103],{"class":102},[65,1136,31],{"class":106},[65,1138,158],{"class":102},[65,1140,235],{"class":98},[65,1142,213],{"class":75},[65,1144,186],{"class":125},[65,1146,1147,1149,1151,1153,1156,1158],{"class":67,"line":285},[65,1148,1086],{"class":140},[65,1150,144],{"class":125},[65,1152,158],{"class":102},[65,1154,1155],{"class":106},"Found an info line",[65,1157,158],{"class":102},[65,1159,360],{"class":125},[14,1161,1162,1163,1166],{},"Why use ",[21,1164,1165],{},"elif"," here?",[14,1168,1169,1170,1172],{},"Because one line should only be counted once. Using ",[21,1171,1165],{}," stops Python after the first matching condition.",[625,1174,1176],{"id":1175},"_5-increase-the-correct-count","5. Increase the correct count",[14,1178,1179],{},"Now let’s count each type of line.",[14,1181,1182,1183,1185],{},"This version uses ",[21,1184,562],{},", which is a convenient counting tool.",[56,1187,1189],{"className":58,"code":1188,"language":60,"meta":61,"style":61},"from collections import Counter\n\nlog_file = \"app.log\"\ncounts = Counter()\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n\n        if \"ERROR\" in line:\n            counts[\"ERROR\"] += 1\n        elif \"WARNING\" in line:\n            counts[\"WARNING\"] += 1\n        elif \"INFO\" in line:\n            counts[\"INFO\"] += 1\n\nprint(counts)\n",[21,1190,1191,1201,1205,1217,1227,1231,1269,1281,1295,1299,1315,1333,1349,1367,1383,1401,1405],{"__ignoreMap":61},[65,1192,1193,1195,1197,1199],{"class":67,"line":68},[65,1194,72],{"class":71},[65,1196,76],{"class":75},[65,1198,79],{"class":71},[65,1200,82],{"class":75},[65,1202,1203],{"class":67,"line":85},[65,1204,89],{"emptyLinePlaceholder":88},[65,1206,1207,1209,1211,1213,1215],{"class":67,"line":92},[65,1208,95],{"class":75},[65,1210,99],{"class":98},[65,1212,103],{"class":102},[65,1214,107],{"class":106},[65,1216,110],{"class":102},[65,1218,1219,1221,1223,1225],{"class":67,"line":113},[65,1220,116],{"class":75},[65,1222,99],{"class":98},[65,1224,122],{"class":121},[65,1226,126],{"class":125},[65,1228,1229],{"class":67,"line":129},[65,1230,89],{"emptyLinePlaceholder":88},[65,1232,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267],{"class":67,"line":134},[65,1234,137],{"class":71},[65,1236,141],{"class":140},[65,1238,144],{"class":125},[65,1240,147],{"class":121},[65,1242,150],{"class":125},[65,1244,103],{"class":102},[65,1246,155],{"class":106},[65,1248,158],{"class":102},[65,1250,150],{"class":125},[65,1252,164],{"class":163},[65,1254,99],{"class":98},[65,1256,158],{"class":102},[65,1258,171],{"class":106},[65,1260,158],{"class":102},[65,1262,176],{"class":125},[65,1264,179],{"class":71},[65,1266,183],{"class":182},[65,1268,186],{"class":125},[65,1270,1271,1273,1275,1277,1279],{"class":67,"line":189},[65,1272,192],{"class":71},[65,1274,195],{"class":75},[65,1276,198],{"class":71},[65,1278,183],{"class":182},[65,1280,186],{"class":125},[65,1282,1283,1285,1287,1289,1291,1293],{"class":67,"line":205},[65,1284,208],{"class":75},[65,1286,99],{"class":98},[65,1288,213],{"class":75},[65,1290,46],{"class":125},[65,1292,218],{"class":121},[65,1294,126],{"class":125},[65,1296,1297],{"class":67,"line":223},[65,1298,89],{"emptyLinePlaceholder":88},[65,1300,1301,1303,1305,1307,1309,1311,1313],{"class":67,"line":242},[65,1302,226],{"class":71},[65,1304,103],{"class":102},[65,1306,23],{"class":106},[65,1308,158],{"class":102},[65,1310,235],{"class":98},[65,1312,213],{"class":75},[65,1314,186],{"class":125},[65,1316,1317,1319,1321,1323,1325,1327,1329,1331],{"class":67,"line":267},[65,1318,245],{"class":75},[65,1320,248],{"class":125},[65,1322,158],{"class":102},[65,1324,23],{"class":106},[65,1326,158],{"class":102},[65,1328,257],{"class":125},[65,1330,260],{"class":98},[65,1332,264],{"class":263},[65,1334,1335,1337,1339,1341,1343,1345,1347],{"class":67,"line":285},[65,1336,270],{"class":71},[65,1338,103],{"class":102},[65,1340,27],{"class":106},[65,1342,158],{"class":102},[65,1344,235],{"class":98},[65,1346,213],{"class":75},[65,1348,186],{"class":125},[65,1350,1351,1353,1355,1357,1359,1361,1363,1365],{"class":67,"line":304},[65,1352,245],{"class":75},[65,1354,248],{"class":125},[65,1356,158],{"class":102},[65,1358,27],{"class":106},[65,1360,158],{"class":102},[65,1362,257],{"class":125},[65,1364,260],{"class":98},[65,1366,264],{"class":263},[65,1368,1369,1371,1373,1375,1377,1379,1381],{"class":67,"line":321},[65,1370,270],{"class":71},[65,1372,103],{"class":102},[65,1374,31],{"class":106},[65,1376,158],{"class":102},[65,1378,235],{"class":98},[65,1380,213],{"class":75},[65,1382,186],{"class":125},[65,1384,1385,1387,1389,1391,1393,1395,1397,1399],{"class":67,"line":340},[65,1386,245],{"class":75},[65,1388,248],{"class":125},[65,1390,158],{"class":102},[65,1392,31],{"class":106},[65,1394,158],{"class":102},[65,1396,257],{"class":125},[65,1398,260],{"class":98},[65,1400,264],{"class":263},[65,1402,1403],{"class":67,"line":345},[65,1404,89],{"emptyLinePlaceholder":88},[65,1406,1407,1409,1411,1414],{"class":67,"line":363},[65,1408,348],{"class":140},[65,1410,144],{"class":125},[65,1412,1413],{"class":121},"counts",[65,1415,360],{"class":125},[14,1417,1418,1419,1421],{},"After reading the sample log file, ",[21,1420,1413],{}," will contain:",[56,1423,1425],{"className":58,"code":1424,"language":60,"meta":61,"style":61},"Counter({'INFO': 3, 'ERROR': 2, 'WARNING': 1})\n",[21,1426,1427],{"__ignoreMap":61},[65,1428,1429,1431,1434,1437,1439,1441,1444,1447,1449,1452,1454,1456,1458,1461,1463,1465,1467,1469,1471,1474],{"class":67,"line":68},[65,1430,562],{"class":121},[65,1432,1433],{"class":125},"({",[65,1435,1436],{"class":102},"'",[65,1438,31],{"class":106},[65,1440,1436],{"class":102},[65,1442,1443],{"class":125},":",[65,1445,1446],{"class":263}," 3",[65,1448,150],{"class":125},[65,1450,1451],{"class":102}," '",[65,1453,23],{"class":106},[65,1455,1436],{"class":102},[65,1457,1443],{"class":125},[65,1459,1460],{"class":263}," 2",[65,1462,150],{"class":125},[65,1464,1451],{"class":102},[65,1466,27],{"class":106},[65,1468,1436],{"class":102},[65,1470,1443],{"class":125},[65,1472,1473],{"class":263}," 1",[65,1475,1476],{"class":125},"})\n",[625,1478,1480],{"id":1479},"_6-print-the-final-totals","6. Print the final totals",[14,1482,1483],{},"Here is the full script:",[56,1485,1487],{"className":58,"code":1486,"language":60,"meta":61,"style":61},"from collections import Counter\n\nlog_file = \"app.log\"\ncounts = Counter()\ntotal_lines = 0\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        total_lines += 1\n        line = line.strip()\n\n        if \"ERROR\" in line:\n            counts[\"ERROR\"] += 1\n        elif \"WARNING\" in line:\n            counts[\"WARNING\"] += 1\n        elif \"INFO\" in line:\n            counts[\"INFO\"] += 1\n\nprint(\"Log summary\")\nprint(f\"Total lines: {total_lines}\")\n\nfor level in [\"ERROR\", \"WARNING\", \"INFO\"]:\n    print(f\"{level}: {counts[level]}\")\n",[21,1488,1489,1499,1503,1515,1525,1535,1539,1577,1589,1599,1613,1617,1633,1651,1667,1685,1701,1719,1723,1738,1761,1766,1804],{"__ignoreMap":61},[65,1490,1491,1493,1495,1497],{"class":67,"line":68},[65,1492,72],{"class":71},[65,1494,76],{"class":75},[65,1496,79],{"class":71},[65,1498,82],{"class":75},[65,1500,1501],{"class":67,"line":85},[65,1502,89],{"emptyLinePlaceholder":88},[65,1504,1505,1507,1509,1511,1513],{"class":67,"line":92},[65,1506,95],{"class":75},[65,1508,99],{"class":98},[65,1510,103],{"class":102},[65,1512,107],{"class":106},[65,1514,110],{"class":102},[65,1516,1517,1519,1521,1523],{"class":67,"line":113},[65,1518,116],{"class":75},[65,1520,99],{"class":98},[65,1522,122],{"class":121},[65,1524,126],{"class":125},[65,1526,1527,1530,1532],{"class":67,"line":129},[65,1528,1529],{"class":75},"total_lines ",[65,1531,99],{"class":98},[65,1533,1534],{"class":263}," 0\n",[65,1536,1537],{"class":67,"line":134},[65,1538,89],{"emptyLinePlaceholder":88},[65,1540,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575],{"class":67,"line":189},[65,1542,137],{"class":71},[65,1544,141],{"class":140},[65,1546,144],{"class":125},[65,1548,147],{"class":121},[65,1550,150],{"class":125},[65,1552,103],{"class":102},[65,1554,155],{"class":106},[65,1556,158],{"class":102},[65,1558,150],{"class":125},[65,1560,164],{"class":163},[65,1562,99],{"class":98},[65,1564,158],{"class":102},[65,1566,171],{"class":106},[65,1568,158],{"class":102},[65,1570,176],{"class":125},[65,1572,179],{"class":71},[65,1574,183],{"class":182},[65,1576,186],{"class":125},[65,1578,1579,1581,1583,1585,1587],{"class":67,"line":205},[65,1580,192],{"class":71},[65,1582,195],{"class":75},[65,1584,198],{"class":71},[65,1586,183],{"class":182},[65,1588,186],{"class":125},[65,1590,1591,1594,1597],{"class":67,"line":223},[65,1592,1593],{"class":75},"        total_lines ",[65,1595,1596],{"class":98},"+=",[65,1598,264],{"class":263},[65,1600,1601,1603,1605,1607,1609,1611],{"class":67,"line":242},[65,1602,208],{"class":75},[65,1604,99],{"class":98},[65,1606,213],{"class":75},[65,1608,46],{"class":125},[65,1610,218],{"class":121},[65,1612,126],{"class":125},[65,1614,1615],{"class":67,"line":267},[65,1616,89],{"emptyLinePlaceholder":88},[65,1618,1619,1621,1623,1625,1627,1629,1631],{"class":67,"line":285},[65,1620,226],{"class":71},[65,1622,103],{"class":102},[65,1624,23],{"class":106},[65,1626,158],{"class":102},[65,1628,235],{"class":98},[65,1630,213],{"class":75},[65,1632,186],{"class":125},[65,1634,1635,1637,1639,1641,1643,1645,1647,1649],{"class":67,"line":304},[65,1636,245],{"class":75},[65,1638,248],{"class":125},[65,1640,158],{"class":102},[65,1642,23],{"class":106},[65,1644,158],{"class":102},[65,1646,257],{"class":125},[65,1648,260],{"class":98},[65,1650,264],{"class":263},[65,1652,1653,1655,1657,1659,1661,1663,1665],{"class":67,"line":321},[65,1654,270],{"class":71},[65,1656,103],{"class":102},[65,1658,27],{"class":106},[65,1660,158],{"class":102},[65,1662,235],{"class":98},[65,1664,213],{"class":75},[65,1666,186],{"class":125},[65,1668,1669,1671,1673,1675,1677,1679,1681,1683],{"class":67,"line":340},[65,1670,245],{"class":75},[65,1672,248],{"class":125},[65,1674,158],{"class":102},[65,1676,27],{"class":106},[65,1678,158],{"class":102},[65,1680,257],{"class":125},[65,1682,260],{"class":98},[65,1684,264],{"class":263},[65,1686,1687,1689,1691,1693,1695,1697,1699],{"class":67,"line":345},[65,1688,270],{"class":71},[65,1690,103],{"class":102},[65,1692,31],{"class":106},[65,1694,158],{"class":102},[65,1696,235],{"class":98},[65,1698,213],{"class":75},[65,1700,186],{"class":125},[65,1702,1703,1705,1707,1709,1711,1713,1715,1717],{"class":67,"line":363},[65,1704,245],{"class":75},[65,1706,248],{"class":125},[65,1708,158],{"class":102},[65,1710,31],{"class":106},[65,1712,158],{"class":102},[65,1714,257],{"class":125},[65,1716,260],{"class":98},[65,1718,264],{"class":263},[65,1720,1721],{"class":67,"line":390},[65,1722,89],{"emptyLinePlaceholder":88},[65,1724,1726,1728,1730,1732,1734,1736],{"class":67,"line":1725},19,[65,1727,348],{"class":140},[65,1729,144],{"class":125},[65,1731,158],{"class":102},[65,1733,355],{"class":106},[65,1735,158],{"class":102},[65,1737,360],{"class":125},[65,1739,1741,1743,1745,1747,1750,1752,1755,1757,1759],{"class":67,"line":1740},20,[65,1742,348],{"class":140},[65,1744,144],{"class":125},[65,1746,399],{"class":398},[65,1748,1749],{"class":106},"\"Total lines: ",[65,1751,404],{"class":263},[65,1753,1754],{"class":121},"total_lines",[65,1756,410],{"class":263},[65,1758,158],{"class":106},[65,1760,360],{"class":125},[65,1762,1764],{"class":67,"line":1763},21,[65,1765,89],{"emptyLinePlaceholder":88},[65,1767,1769,1771,1774,1776,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801],{"class":67,"line":1768},22,[65,1770,366],{"class":71},[65,1772,1773],{"class":75}," level ",[65,1775,198],{"class":71},[65,1777,1778],{"class":125}," [",[65,1780,158],{"class":102},[65,1782,23],{"class":106},[65,1784,158],{"class":102},[65,1786,150],{"class":125},[65,1788,103],{"class":102},[65,1790,27],{"class":106},[65,1792,158],{"class":102},[65,1794,150],{"class":125},[65,1796,103],{"class":102},[65,1798,31],{"class":106},[65,1800,158],{"class":102},[65,1802,1803],{"class":125},"]:\n",[65,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837],{"class":67,"line":1806},23,[65,1808,393],{"class":140},[65,1810,144],{"class":125},[65,1812,399],{"class":398},[65,1814,158],{"class":106},[65,1816,404],{"class":263},[65,1818,407],{"class":121},[65,1820,410],{"class":263},[65,1822,413],{"class":106},[65,1824,404],{"class":263},[65,1826,1413],{"class":121},[65,1828,248],{"class":125},[65,1830,407],{"class":121},[65,1832,257],{"class":125},[65,1834,410],{"class":263},[65,1836,158],{"class":106},[65,1838,360],{"class":125},[48,1840,1842],{"id":1841},"expected-output","Expected output",[14,1844,1845,1846,1848],{},"With the sample ",[21,1847,107],{}," file shown earlier, the output will be:",[56,1850,1853],{"className":1851,"code":1852,"language":596,"meta":61},[594],"Log summary\nTotal lines: 6\nERROR: 2\nWARNING: 1\nINFO: 3\n",[21,1854,1852],{"__ignoreMap":61},[14,1856,1857],{},"This output is simple and easy to compare with the input file.",[48,1859,1861],{"id":1860},"useful-beginner-improvements","Useful beginner improvements",[14,1863,1864],{},"Once the basic version works, you can try small improvements.",[625,1866,1868],{"id":1867},"count-all-lines-not-only-matched-lines","Count all lines, not only matched lines",[14,1870,1871,1872,46],{},"The full example already shows ",[21,1873,1874],{},"total_lines += 1",[14,1876,1877],{},"This helps you compare:",[429,1879,1880,1883],{},[432,1881,1882],{},"total lines in the file",[432,1884,1885],{},"matched log level lines",[625,1887,1889],{"id":1888},"store-matching-lines-in-separate-lists","Store matching lines in separate lists",[14,1891,1892],{},"You can save the actual lines, not just the totals.",[56,1894,1896],{"className":58,"code":1895,"language":60,"meta":61,"style":61},"error_lines = []\nwarning_lines = []\n\nwith open(\"app.log\", \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n\n        if \"ERROR\" in line:\n            error_lines.append(line)\n        elif \"WARNING\" in line:\n            warning_lines.append(line)\n",[21,1897,1898,1908,1917,1921,1963,1975,1989,1993,2009,2025,2041],{"__ignoreMap":61},[65,1899,1900,1903,1905],{"class":67,"line":68},[65,1901,1902],{"class":75},"error_lines ",[65,1904,99],{"class":98},[65,1906,1907],{"class":125}," []\n",[65,1909,1910,1913,1915],{"class":67,"line":85},[65,1911,1912],{"class":75},"warning_lines ",[65,1914,99],{"class":98},[65,1916,1907],{"class":125},[65,1918,1919],{"class":67,"line":92},[65,1920,89],{"emptyLinePlaceholder":88},[65,1922,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961],{"class":67,"line":113},[65,1924,137],{"class":71},[65,1926,141],{"class":140},[65,1928,144],{"class":125},[65,1930,158],{"class":102},[65,1932,107],{"class":106},[65,1934,158],{"class":102},[65,1936,150],{"class":125},[65,1938,103],{"class":102},[65,1940,155],{"class":106},[65,1942,158],{"class":102},[65,1944,150],{"class":125},[65,1946,164],{"class":163},[65,1948,99],{"class":98},[65,1950,158],{"class":102},[65,1952,171],{"class":106},[65,1954,158],{"class":102},[65,1956,176],{"class":125},[65,1958,179],{"class":71},[65,1960,183],{"class":182},[65,1962,186],{"class":125},[65,1964,1965,1967,1969,1971,1973],{"class":67,"line":129},[65,1966,192],{"class":71},[65,1968,195],{"class":75},[65,1970,198],{"class":71},[65,1972,183],{"class":182},[65,1974,186],{"class":125},[65,1976,1977,1979,1981,1983,1985,1987],{"class":67,"line":134},[65,1978,208],{"class":75},[65,1980,99],{"class":98},[65,1982,213],{"class":75},[65,1984,46],{"class":125},[65,1986,218],{"class":121},[65,1988,126],{"class":125},[65,1990,1991],{"class":67,"line":189},[65,1992,89],{"emptyLinePlaceholder":88},[65,1994,1995,1997,1999,2001,2003,2005,2007],{"class":67,"line":205},[65,1996,226],{"class":71},[65,1998,103],{"class":102},[65,2000,23],{"class":106},[65,2002,158],{"class":102},[65,2004,235],{"class":98},[65,2006,213],{"class":75},[65,2008,186],{"class":125},[65,2010,2011,2014,2016,2019,2021,2023],{"class":67,"line":223},[65,2012,2013],{"class":75},"            error_lines",[65,2015,46],{"class":125},[65,2017,2018],{"class":121},"append",[65,2020,144],{"class":125},[65,2022,67],{"class":121},[65,2024,360],{"class":125},[65,2026,2027,2029,2031,2033,2035,2037,2039],{"class":67,"line":242},[65,2028,270],{"class":71},[65,2030,103],{"class":102},[65,2032,27],{"class":106},[65,2034,158],{"class":102},[65,2036,235],{"class":98},[65,2038,213],{"class":75},[65,2040,186],{"class":125},[65,2042,2043,2046,2048,2050,2052,2054],{"class":67,"line":267},[65,2044,2045],{"class":75},"            warning_lines",[65,2047,46],{"class":125},[65,2049,2018],{"class":121},[65,2051,144],{"class":125},[65,2053,67],{"class":121},[65,2055,360],{"class":125},[14,2057,2058],{},"This is useful if you want to print or save the problem lines later.",[625,2060,2062],{"id":2061},"find-the-first-error-line","Find the first error line",[14,2064,2065],{},"You can stop as soon as the first error is found.",[56,2067,2069],{"className":58,"code":2068,"language":60,"meta":61,"style":61},"first_error = None\n\nwith open(\"app.log\", \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n        if \"ERROR\" in line:\n            first_error = line\n            break\n\nprint(first_error)\n",[21,2070,2071,2082,2086,2128,2140,2154,2170,2180,2185,2189],{"__ignoreMap":61},[65,2072,2073,2076,2078],{"class":67,"line":68},[65,2074,2075],{"class":75},"first_error ",[65,2077,99],{"class":98},[65,2079,2081],{"class":2080},"s39Yj"," None\n",[65,2083,2084],{"class":67,"line":85},[65,2085,89],{"emptyLinePlaceholder":88},[65,2087,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126],{"class":67,"line":92},[65,2089,137],{"class":71},[65,2091,141],{"class":140},[65,2093,144],{"class":125},[65,2095,158],{"class":102},[65,2097,107],{"class":106},[65,2099,158],{"class":102},[65,2101,150],{"class":125},[65,2103,103],{"class":102},[65,2105,155],{"class":106},[65,2107,158],{"class":102},[65,2109,150],{"class":125},[65,2111,164],{"class":163},[65,2113,99],{"class":98},[65,2115,158],{"class":102},[65,2117,171],{"class":106},[65,2119,158],{"class":102},[65,2121,176],{"class":125},[65,2123,179],{"class":71},[65,2125,183],{"class":182},[65,2127,186],{"class":125},[65,2129,2130,2132,2134,2136,2138],{"class":67,"line":113},[65,2131,192],{"class":71},[65,2133,195],{"class":75},[65,2135,198],{"class":71},[65,2137,183],{"class":182},[65,2139,186],{"class":125},[65,2141,2142,2144,2146,2148,2150,2152],{"class":67,"line":129},[65,2143,208],{"class":75},[65,2145,99],{"class":98},[65,2147,213],{"class":75},[65,2149,46],{"class":125},[65,2151,218],{"class":121},[65,2153,126],{"class":125},[65,2155,2156,2158,2160,2162,2164,2166,2168],{"class":67,"line":134},[65,2157,226],{"class":71},[65,2159,103],{"class":102},[65,2161,23],{"class":106},[65,2163,158],{"class":102},[65,2165,235],{"class":98},[65,2167,213],{"class":75},[65,2169,186],{"class":125},[65,2171,2172,2175,2177],{"class":67,"line":189},[65,2173,2174],{"class":75},"            first_error ",[65,2176,99],{"class":98},[65,2178,2179],{"class":75}," line\n",[65,2181,2182],{"class":67,"line":205},[65,2183,2184],{"class":71},"            break\n",[65,2186,2187],{"class":67,"line":223},[65,2188,89],{"emptyLinePlaceholder":88},[65,2190,2191,2193,2195,2198],{"class":67,"line":242},[65,2192,348],{"class":140},[65,2194,144],{"class":125},[65,2196,2197],{"class":121},"first_error",[65,2199,360],{"class":125},[625,2201,2203,2204],{"id":2202},"ignore-letter-case-with-upper","Ignore letter case with ",[21,2205,2206],{},"upper()",[14,2208,2209,2210,24,2213,968,2216,46],{},"Some files may use ",[21,2211,2212],{},"error",[21,2214,2215],{},"Error",[21,2217,23],{},[14,2219,2220],{},"To handle that, convert each line to one case first:",[56,2222,2224],{"className":58,"code":2223,"language":60,"meta":61,"style":61},"from collections import Counter\n\ncounts = Counter()\n\nwith open(\"app.log\", \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n        upper_line = line.upper()\n\n        if \"ERROR\" in upper_line:\n            counts[\"ERROR\"] += 1\n        elif \"WARNING\" in upper_line:\n            counts[\"WARNING\"] += 1\n        elif \"INFO\" in upper_line:\n            counts[\"INFO\"] += 1\n\nprint(counts)\n",[21,2225,2226,2236,2240,2250,2254,2296,2308,2322,2338,2342,2359,2377,2393,2411,2427,2445,2449],{"__ignoreMap":61},[65,2227,2228,2230,2232,2234],{"class":67,"line":68},[65,2229,72],{"class":71},[65,2231,76],{"class":75},[65,2233,79],{"class":71},[65,2235,82],{"class":75},[65,2237,2238],{"class":67,"line":85},[65,2239,89],{"emptyLinePlaceholder":88},[65,2241,2242,2244,2246,2248],{"class":67,"line":92},[65,2243,116],{"class":75},[65,2245,99],{"class":98},[65,2247,122],{"class":121},[65,2249,126],{"class":125},[65,2251,2252],{"class":67,"line":113},[65,2253,89],{"emptyLinePlaceholder":88},[65,2255,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294],{"class":67,"line":129},[65,2257,137],{"class":71},[65,2259,141],{"class":140},[65,2261,144],{"class":125},[65,2263,158],{"class":102},[65,2265,107],{"class":106},[65,2267,158],{"class":102},[65,2269,150],{"class":125},[65,2271,103],{"class":102},[65,2273,155],{"class":106},[65,2275,158],{"class":102},[65,2277,150],{"class":125},[65,2279,164],{"class":163},[65,2281,99],{"class":98},[65,2283,158],{"class":102},[65,2285,171],{"class":106},[65,2287,158],{"class":102},[65,2289,176],{"class":125},[65,2291,179],{"class":71},[65,2293,183],{"class":182},[65,2295,186],{"class":125},[65,2297,2298,2300,2302,2304,2306],{"class":67,"line":134},[65,2299,192],{"class":71},[65,2301,195],{"class":75},[65,2303,198],{"class":71},[65,2305,183],{"class":182},[65,2307,186],{"class":125},[65,2309,2310,2312,2314,2316,2318,2320],{"class":67,"line":189},[65,2311,208],{"class":75},[65,2313,99],{"class":98},[65,2315,213],{"class":75},[65,2317,46],{"class":125},[65,2319,218],{"class":121},[65,2321,126],{"class":125},[65,2323,2324,2327,2329,2331,2333,2336],{"class":67,"line":205},[65,2325,2326],{"class":75},"        upper_line ",[65,2328,99],{"class":98},[65,2330,213],{"class":75},[65,2332,46],{"class":125},[65,2334,2335],{"class":121},"upper",[65,2337,126],{"class":125},[65,2339,2340],{"class":67,"line":223},[65,2341,89],{"emptyLinePlaceholder":88},[65,2343,2344,2346,2348,2350,2352,2354,2357],{"class":67,"line":242},[65,2345,226],{"class":71},[65,2347,103],{"class":102},[65,2349,23],{"class":106},[65,2351,158],{"class":102},[65,2353,235],{"class":98},[65,2355,2356],{"class":75}," upper_line",[65,2358,186],{"class":125},[65,2360,2361,2363,2365,2367,2369,2371,2373,2375],{"class":67,"line":267},[65,2362,245],{"class":75},[65,2364,248],{"class":125},[65,2366,158],{"class":102},[65,2368,23],{"class":106},[65,2370,158],{"class":102},[65,2372,257],{"class":125},[65,2374,260],{"class":98},[65,2376,264],{"class":263},[65,2378,2379,2381,2383,2385,2387,2389,2391],{"class":67,"line":285},[65,2380,270],{"class":71},[65,2382,103],{"class":102},[65,2384,27],{"class":106},[65,2386,158],{"class":102},[65,2388,235],{"class":98},[65,2390,2356],{"class":75},[65,2392,186],{"class":125},[65,2394,2395,2397,2399,2401,2403,2405,2407,2409],{"class":67,"line":304},[65,2396,245],{"class":75},[65,2398,248],{"class":125},[65,2400,158],{"class":102},[65,2402,27],{"class":106},[65,2404,158],{"class":102},[65,2406,257],{"class":125},[65,2408,260],{"class":98},[65,2410,264],{"class":263},[65,2412,2413,2415,2417,2419,2421,2423,2425],{"class":67,"line":321},[65,2414,270],{"class":71},[65,2416,103],{"class":102},[65,2418,31],{"class":106},[65,2420,158],{"class":102},[65,2422,235],{"class":98},[65,2424,2356],{"class":75},[65,2426,186],{"class":125},[65,2428,2429,2431,2433,2435,2437,2439,2441,2443],{"class":67,"line":340},[65,2430,245],{"class":75},[65,2432,248],{"class":125},[65,2434,158],{"class":102},[65,2436,31],{"class":106},[65,2438,158],{"class":102},[65,2440,257],{"class":125},[65,2442,260],{"class":98},[65,2444,264],{"class":263},[65,2446,2447],{"class":67,"line":345},[65,2448,89],{"emptyLinePlaceholder":88},[65,2450,2451,2453,2455,2457],{"class":67,"line":363},[65,2452,348],{"class":140},[65,2454,144],{"class":125},[65,2456,1413],{"class":121},[65,2458,360],{"class":125},[625,2460,2462,2463],{"id":2461},"ask-the-user-for-the-file-name-with-input","Ask the user for the file name with ",[21,2464,2465],{},"input()",[14,2467,2468],{},"You can make the script more flexible:",[56,2470,2472],{"className":58,"code":2471,"language":60,"meta":61,"style":61},"from collections import Counter\n\nlog_file = input(\"Enter the log file name: \")\ncounts = Counter()\n\nwith open(log_file, \"r\", encoding=\"utf-8\") as file:\n    for line in file:\n        line = line.strip()\n\n        if \"ERROR\" in line:\n            counts[\"ERROR\"] += 1\n        elif \"WARNING\" in line:\n            counts[\"WARNING\"] += 1\n        elif \"INFO\" in line:\n            counts[\"INFO\"] += 1\n\nprint(\"Log summary\")\nfor level in [\"ERROR\", \"WARNING\", \"INFO\"]:\n    print(f\"{level}: {counts[level]}\")\n",[21,2473,2474,2484,2488,2508,2518,2522,2560,2572,2586,2590,2606,2624,2640,2658,2674,2692,2696,2710,2744],{"__ignoreMap":61},[65,2475,2476,2478,2480,2482],{"class":67,"line":68},[65,2477,72],{"class":71},[65,2479,76],{"class":75},[65,2481,79],{"class":71},[65,2483,82],{"class":75},[65,2485,2486],{"class":67,"line":85},[65,2487,89],{"emptyLinePlaceholder":88},[65,2489,2490,2492,2494,2497,2499,2501,2504,2506],{"class":67,"line":92},[65,2491,95],{"class":75},[65,2493,99],{"class":98},[65,2495,2496],{"class":140}," input",[65,2498,144],{"class":125},[65,2500,158],{"class":102},[65,2502,2503],{"class":106},"Enter the log file name: ",[65,2505,158],{"class":102},[65,2507,360],{"class":125},[65,2509,2510,2512,2514,2516],{"class":67,"line":113},[65,2511,116],{"class":75},[65,2513,99],{"class":98},[65,2515,122],{"class":121},[65,2517,126],{"class":125},[65,2519,2520],{"class":67,"line":129},[65,2521,89],{"emptyLinePlaceholder":88},[65,2523,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558],{"class":67,"line":134},[65,2525,137],{"class":71},[65,2527,141],{"class":140},[65,2529,144],{"class":125},[65,2531,147],{"class":121},[65,2533,150],{"class":125},[65,2535,103],{"class":102},[65,2537,155],{"class":106},[65,2539,158],{"class":102},[65,2541,150],{"class":125},[65,2543,164],{"class":163},[65,2545,99],{"class":98},[65,2547,158],{"class":102},[65,2549,171],{"class":106},[65,2551,158],{"class":102},[65,2553,176],{"class":125},[65,2555,179],{"class":71},[65,2557,183],{"class":182},[65,2559,186],{"class":125},[65,2561,2562,2564,2566,2568,2570],{"class":67,"line":189},[65,2563,192],{"class":71},[65,2565,195],{"class":75},[65,2567,198],{"class":71},[65,2569,183],{"class":182},[65,2571,186],{"class":125},[65,2573,2574,2576,2578,2580,2582,2584],{"class":67,"line":205},[65,2575,208],{"class":75},[65,2577,99],{"class":98},[65,2579,213],{"class":75},[65,2581,46],{"class":125},[65,2583,218],{"class":121},[65,2585,126],{"class":125},[65,2587,2588],{"class":67,"line":223},[65,2589,89],{"emptyLinePlaceholder":88},[65,2591,2592,2594,2596,2598,2600,2602,2604],{"class":67,"line":242},[65,2593,226],{"class":71},[65,2595,103],{"class":102},[65,2597,23],{"class":106},[65,2599,158],{"class":102},[65,2601,235],{"class":98},[65,2603,213],{"class":75},[65,2605,186],{"class":125},[65,2607,2608,2610,2612,2614,2616,2618,2620,2622],{"class":67,"line":267},[65,2609,245],{"class":75},[65,2611,248],{"class":125},[65,2613,158],{"class":102},[65,2615,23],{"class":106},[65,2617,158],{"class":102},[65,2619,257],{"class":125},[65,2621,260],{"class":98},[65,2623,264],{"class":263},[65,2625,2626,2628,2630,2632,2634,2636,2638],{"class":67,"line":285},[65,2627,270],{"class":71},[65,2629,103],{"class":102},[65,2631,27],{"class":106},[65,2633,158],{"class":102},[65,2635,235],{"class":98},[65,2637,213],{"class":75},[65,2639,186],{"class":125},[65,2641,2642,2644,2646,2648,2650,2652,2654,2656],{"class":67,"line":304},[65,2643,245],{"class":75},[65,2645,248],{"class":125},[65,2647,158],{"class":102},[65,2649,27],{"class":106},[65,2651,158],{"class":102},[65,2653,257],{"class":125},[65,2655,260],{"class":98},[65,2657,264],{"class":263},[65,2659,2660,2662,2664,2666,2668,2670,2672],{"class":67,"line":321},[65,2661,270],{"class":71},[65,2663,103],{"class":102},[65,2665,31],{"class":106},[65,2667,158],{"class":102},[65,2669,235],{"class":98},[65,2671,213],{"class":75},[65,2673,186],{"class":125},[65,2675,2676,2678,2680,2682,2684,2686,2688,2690],{"class":67,"line":340},[65,2677,245],{"class":75},[65,2679,248],{"class":125},[65,2681,158],{"class":102},[65,2683,31],{"class":106},[65,2685,158],{"class":102},[65,2687,257],{"class":125},[65,2689,260],{"class":98},[65,2691,264],{"class":263},[65,2693,2694],{"class":67,"line":345},[65,2695,89],{"emptyLinePlaceholder":88},[65,2697,2698,2700,2702,2704,2706,2708],{"class":67,"line":363},[65,2699,348],{"class":140},[65,2701,144],{"class":125},[65,2703,158],{"class":102},[65,2705,355],{"class":106},[65,2707,158],{"class":102},[65,2709,360],{"class":125},[65,2711,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742],{"class":67,"line":390},[65,2713,366],{"class":71},[65,2715,1773],{"class":75},[65,2717,198],{"class":71},[65,2719,1778],{"class":125},[65,2721,158],{"class":102},[65,2723,23],{"class":106},[65,2725,158],{"class":102},[65,2727,150],{"class":125},[65,2729,103],{"class":102},[65,2731,27],{"class":106},[65,2733,158],{"class":102},[65,2735,150],{"class":125},[65,2737,103],{"class":102},[65,2739,31],{"class":106},[65,2741,158],{"class":102},[65,2743,1803],{"class":125},[65,2745,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776],{"class":67,"line":1725},[65,2747,393],{"class":140},[65,2749,144],{"class":125},[65,2751,399],{"class":398},[65,2753,158],{"class":106},[65,2755,404],{"class":263},[65,2757,407],{"class":121},[65,2759,410],{"class":263},[65,2761,413],{"class":106},[65,2763,404],{"class":263},[65,2765,1413],{"class":121},[65,2767,248],{"class":125},[65,2769,407],{"class":121},[65,2771,257],{"class":125},[65,2773,410],{"class":263},[65,2775,158],{"class":106},[65,2777,360],{"class":125},[48,2779,2781],{"id":2780},"how-this-page-is-different-from-related-pages","How this page is different from related pages",[14,2783,2784],{},"This page is a full example project.",[14,2786,2787],{},"It is not a complete lesson on every file or string method used here.",[14,2789,2790],{},"For deeper explanations, use these related pages:",[429,2792,2793,2797,2801,2809],{},[432,2794,2795],{},[37,2796,40],{"href":39},[432,2798,2799],{},[37,2800,45],{"href":44},[432,2802,2803],{},[37,2804,2805,2806,2808],{"href":532},"Python ",[21,2807,535],{}," function explained",[432,2810,2811],{},[37,2812,2805,2813,2815],{"href":547},[21,2814,550],{}," string method",[48,2817,2819],{"id":2818},"common-mistakes","Common mistakes",[14,2821,2822],{},"Here are some common problems beginners run into with this kind of script.",[625,2824,2826],{"id":2825},"the-log-file-name-is-wrong","The log file name is wrong",[14,2828,2829,2830,46],{},"If the file does not exist, Python raises a ",[21,2831,2832],{},"FileNotFoundError",[14,2834,2835],{},"Example:",[56,2837,2839],{"className":58,"code":2838,"language":60,"meta":61,"style":61},"with open(\"wrong_name.log\", \"r\", encoding=\"utf-8\") as file:\n    pass\n",[21,2840,2841,2884],{"__ignoreMap":61},[65,2842,2843,2845,2847,2849,2851,2854,2856,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882],{"class":67,"line":68},[65,2844,137],{"class":71},[65,2846,141],{"class":140},[65,2848,144],{"class":125},[65,2850,158],{"class":102},[65,2852,2853],{"class":106},"wrong_name.log",[65,2855,158],{"class":102},[65,2857,150],{"class":125},[65,2859,103],{"class":102},[65,2861,155],{"class":106},[65,2863,158],{"class":102},[65,2865,150],{"class":125},[65,2867,164],{"class":163},[65,2869,99],{"class":98},[65,2871,158],{"class":102},[65,2873,171],{"class":106},[65,2875,158],{"class":102},[65,2877,176],{"class":125},[65,2879,179],{"class":71},[65,2881,183],{"class":182},[65,2883,186],{"class":125},[65,2885,2886],{"class":67,"line":85},[65,2887,2888],{"class":71},"    pass\n",[14,2890,2891],{},"If that happens, check:",[429,2893,2894,2897,2900],{},[432,2895,2896],{},"the spelling of the file name",[432,2898,2899],{},"that the file is in the correct folder",[432,2901,2902],{},"your current working directory",[14,2904,2905,2906],{},"See also: ",[37,2907,2909],{"href":2908},"\u002Ferrors\u002Ffilenotfounderror-in-python-causes-and-fixes","FileNotFoundError: No such file or directory fix",[625,2911,2913],{"id":2912},"the-path-points-to-a-folder-instead-of-a-file","The path points to a folder instead of a file",[14,2915,2916,2917,2919],{},"Make sure ",[21,2918,147],{}," contains a file path, not just a folder name.",[625,2921,2923],{"id":2922},"the-log-levels-use-different-letter-case","The log levels use different letter case",[14,2925,2926,2927,2929,2930,2932],{},"If your file contains ",[21,2928,2212],{}," instead of ",[21,2931,23],{},", your checks may fail.",[14,2934,2935],{},"Fix this by converting the line first:",[56,2937,2939],{"className":58,"code":2938,"language":60,"meta":61,"style":61},"upper_line = line.upper()\n",[21,2940,2941],{"__ignoreMap":61},[65,2942,2943,2946,2948,2950,2952,2954],{"class":67,"line":68},[65,2944,2945],{"class":75},"upper_line ",[65,2947,99],{"class":98},[65,2949,213],{"class":75},[65,2951,46],{"class":125},[65,2953,2335],{"class":121},[65,2955,126],{"class":125},[625,2957,2959],{"id":2958},"you-forget-to-strip-newline-characters","You forget to strip newline characters",[14,2961,2962,2963,2965,2966,46],{},"Without ",[21,2964,550],{},", the line may contain extra spaces or ",[21,2967,848],{},[14,2969,2970],{},"That can make debugging harder.",[625,2972,2974,2975,2978,2979],{"id":2973},"you-use-if-for-every-check-instead-of-elif","You use ",[21,2976,2977],{},"if"," for every check instead of ",[21,2980,1165],{},[14,2982,2983,2984,2986],{},"If you use separate ",[21,2985,2977],{}," statements, one line could be counted more than once in some cases.",[14,2988,841,2989,2991],{},[21,2990,1165],{}," makes the checks exclusive.",[625,2993,2995],{"id":2994},"the-file-contains-unexpected-text-format","The file contains unexpected text format",[14,2997,2998],{},"Some log files may have extra spaces, timestamps, or different wording.",[14,3000,3001],{},"If needed, print each line while testing so you can see the real format.",[48,3003,3005],{"id":3004},"faq","FAQ",[625,3007,3009],{"id":3008},"do-i-need-a-special-library-to-analyze-a-log-file","Do I need a special library to analyze a log file?",[14,3011,3012,3013,3015],{},"No. A basic analyzer can use only built-in Python tools such as ",[21,3014,535],{},", loops, strings, and dictionaries.",[625,3017,3019],{"id":3018},"should-i-read-the-whole-file-at-once","Should I read the whole file at once?",[14,3021,3022],{},"For beginners, reading line by line is usually better. It uses less memory and is easier to understand.",[625,3024,3026],{"id":3025},"what-if-my-log-file-uses-lowercase-words-like-error","What if my log file uses lowercase words like error?",[14,3028,3029,3030,3033,3034,46],{},"Convert each line to one case first, such as ",[21,3031,3032],{},"line.upper()",", then check for ",[21,3035,23],{},[625,3037,3039],{"id":3038},"can-this-example-search-for-dates-or-usernames-too","Can this example search for dates or usernames too?",[14,3041,3042],{},"Yes. You can check each line for other patterns and store extra counts or matching lines.",[48,3044,3046],{"id":3045},"see-also","See also",[429,3048,3049,3054,3059,3065,3071,3075,3079],{},[432,3050,3051],{},[37,3052,3053],{"href":39},"How to read a file in Python",[432,3055,3056],{},[37,3057,3058],{"href":44},"How to read a file line by line in Python",[432,3060,3061],{},[37,3062,2805,3063,2808],{"href":532},[21,3064,535],{},[432,3066,3067],{},[37,3068,2805,3069,2815],{"href":547},[21,3070,550],{},[432,3072,3073],{},[37,3074,572],{"href":571},[432,3076,3077],{},[37,3078,577],{"href":576},[432,3080,3081],{},[37,3082,2909],{"href":2908},[14,3084,3085],{},"Try extending this project next:",[429,3087,3088,3091,3094],{},[432,3089,3090],{},"count dates in the log",[432,3092,3093],{},"extract all error lines",[432,3095,3096],{},"save the summary to a new file",[3098,3099,3100],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sMMDD, html code.shiki .sMMDD{--shiki-light:#90A4AE;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":61,"searchDepth":85,"depth":85,"links":3102},[3103,3104,3105,3106,3107,3108,3118,3119,3128,3129,3138,3144],{"id":50,"depth":85,"text":51},{"id":452,"depth":85,"text":453},{"id":479,"depth":85,"text":480},{"id":520,"depth":85,"text":521},{"id":580,"depth":85,"text":581},{"id":622,"depth":85,"text":623,"children":3109},[3110,3111,3112,3114,3116,3117],{"id":627,"depth":92,"text":628},{"id":747,"depth":92,"text":748},{"id":851,"depth":92,"text":3113},"3. Remove extra newline characters with strip()",{"id":962,"depth":92,"text":3115},"4. Check whether a line contains ERROR, WARNING, or INFO",{"id":1175,"depth":92,"text":1176},{"id":1479,"depth":92,"text":1480},{"id":1841,"depth":85,"text":1842},{"id":1860,"depth":85,"text":1861,"children":3120},[3121,3122,3123,3124,3126],{"id":1867,"depth":92,"text":1868},{"id":1888,"depth":92,"text":1889},{"id":2061,"depth":92,"text":2062},{"id":2202,"depth":92,"text":3125},"Ignore letter case with upper()",{"id":2461,"depth":92,"text":3127},"Ask the user for the file name with input()",{"id":2780,"depth":85,"text":2781},{"id":2818,"depth":85,"text":2819,"children":3130},[3131,3132,3133,3134,3135,3137],{"id":2825,"depth":92,"text":2826},{"id":2912,"depth":92,"text":2913},{"id":2922,"depth":92,"text":2923},{"id":2958,"depth":92,"text":2959},{"id":2973,"depth":92,"text":3136},"You use if for every check instead of elif",{"id":2994,"depth":92,"text":2995},{"id":3004,"depth":85,"text":3005,"children":3139},[3140,3141,3142,3143],{"id":3008,"depth":92,"text":3009},{"id":3018,"depth":92,"text":3019},{"id":3025,"depth":92,"text":3026},{"id":3038,"depth":92,"text":3039},{"id":3045,"depth":85,"text":3046},"Master python log file analyzer example in our comprehensive Python beginner guide.","md",{},"\u002Fexamples\u002Fpython-log-file-analyzer-example",{"title":5,"description":3145},"examples\u002Fpython-log-file-analyzer-example","CR9xx4nDcdyds9MLoa2jof6wnb2rblfn06nlOGo_DX4",1777585476915]